From 240e6b50d2dfd9d501eeb3e180be594f51f6f03c Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 4 Jun 2018 13:49:38 +0000 Subject: fixes [92564326a9] if compiled on some x86 systems (with dirent64 but without DIR64, partially cherry-picked from https://www.androwish.org/index.html/info/6119b8ac2aee8411). --- unix/configure | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ unix/tcl.m4 | 11 ++++++++- unix/tclConfig.h.in | 3 +++ unix/tclUnixPort.h | 13 ++++++----- 4 files changed, 85 insertions(+), 6 deletions(-) diff --git a/unix/configure b/unix/configure index 7ff9f72..61d922a 100755 --- a/unix/configure +++ b/unix/configure @@ -9643,6 +9643,70 @@ _ACEOF fi + echo "$as_me:$LINENO: checking for DIR64" >&5 +echo $ECHO_N "checking for DIR64... $ECHO_C" >&6 +if test "${tcl_cv_DIR64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +struct dirent64 *p; DIR64 d = opendir64("."); + p = readdir64(d); rewinddir64(d); closedir64(d); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + tcl_cv_DIR64=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +tcl_cv_DIR64=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $tcl_cv_DIR64" >&5 +echo "${ECHO_T}$tcl_cv_DIR64" >&6 + if test "x${tcl_cv_DIR64}" = "xyes" ; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DIR64 1 +_ACEOF + + fi + echo "$as_me:$LINENO: checking for struct stat64" >&5 echo $ECHO_N "checking for struct stat64... $ECHO_C" >&6 if test "${tcl_cv_struct_stat64+set}" = set; then diff --git a/unix/tcl.m4 b/unix/tcl.m4 index 6b6d373..294ecf0 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 @@ -2749,7 +2749,7 @@ AC_DEFUN([SC_TCL_EARLY_FLAGS],[ # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE -# HAVE_STRUCT_DIRENT64 +# HAVE_STRUCT_DIRENT64, HAVE_DIR64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T # @@ -2785,6 +2785,15 @@ AC_DEFUN([SC_TCL_64BIT_FLAGS], [ AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi + AC_CACHE_CHECK([for DIR64], tcl_cv_DIR64,[ + AC_TRY_COMPILE([#include +#include ],[struct dirent64 *p; DIR64 d = opendir64("."); + p = readdir64(d); rewinddir64(d); closedir64(d);], + tcl_cv_DIR64=yes,tcl_cv_DIR64=no)]) + if test "x${tcl_cv_DIR64}" = "xyes" ; then + AC_DEFINE(HAVE_DIR64, 1, [Is 'DIR64' in ?]) + fi + AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], diff --git a/unix/tclConfig.h.in b/unix/tclConfig.h.in index 9774ce9..0879c7a 100644 --- a/unix/tclConfig.h.in +++ b/unix/tclConfig.h.in @@ -193,6 +193,9 @@ /* Is 'struct dirent64' in ? */ #undef HAVE_STRUCT_DIRENT64 +/* Is 'DIR64' in ? */ +#undef HAVE_DIR64 + /* Is 'struct stat64' in ? */ #undef HAVE_STRUCT_STAT64 diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h index a248213..9a923ef 100644 --- a/unix/tclUnixPort.h +++ b/unix/tclUnixPort.h @@ -58,16 +58,19 @@ */ #ifdef HAVE_STRUCT_DIRENT64 -typedef DIR64 TclDIR; -typedef struct dirent64 Tcl_DirEntry; +typedef struct dirent64 Tcl_DirEntry; # define TclOSreaddir readdir64 +#else +typedef struct dirent Tcl_DirEntry; +# define TclOSreaddir readdir +#endif +#ifdef HAVE_DIR64 +typedef DIR64 TclDIR; # define TclOSopendir opendir64 # define TclOSrewinddir rewinddir64 # define TclOSclosedir closedir64 #else -typedef DIR TclDIR; -typedef struct dirent Tcl_DirEntry; -# define TclOSreaddir readdir +typedef DIR TclDIR; # define TclOSopendir opendir # define TclOSrewinddir rewinddir # define TclOSclosedir closedir -- cgit v0.12 From 3b14a4b0ed16f753791f2c6046b761c4fcd5be05 Mon Sep 17 00:00:00 2001 From: sebres Date: Tue, 5 Jun 2018 09:10:56 +0000 Subject: re-autoconfigure with v.2.69 --- unix/configure | 66 +++++++++++++++++++++------------------------------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/unix/configure b/unix/configure index 2f5f72d..101c7f4 100755 --- a/unix/configure +++ b/unix/configure @@ -729,6 +729,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -815,6 +816,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1067,6 +1069,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1204,7 +1215,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1357,6 +1368,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -6868,17 +6880,13 @@ $as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi - echo "$as_me:$LINENO: checking for DIR64" >&5 -echo $ECHO_N "checking for DIR64... $ECHO_C" >&6 -if test "${tcl_cv_DIR64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DIR64" >&5 +$as_echo_n "checking for DIR64... " >&6; } +if ${tcl_cv_DIR64+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -6891,44 +6899,18 @@ struct dirent64 *p; DIR64 d = opendir64("."); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_DIR64=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -tcl_cv_DIR64=no + tcl_cv_DIR64=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $tcl_cv_DIR64" >&5 -echo "${ECHO_T}$tcl_cv_DIR64" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_DIR64" >&5 +$as_echo "$tcl_cv_DIR64" >&6; } if test "x${tcl_cv_DIR64}" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_DIR64 1 -_ACEOF +$as_echo "#define HAVE_DIR64 1" >>confdefs.h fi -- cgit v0.12 From c2e16d9b1f9dea745ffe57948997ba3ded2e58a5 Mon Sep 17 00:00:00 2001 From: sebres Date: Tue, 5 Jun 2018 21:59:09 +0000 Subject: amend to [eeefdb44cf]: fixes missing install path (closes [593aa7c421]) for mingw/*nix --- unix/Makefile.in | 2 +- win/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unix/Makefile.in b/unix/Makefile.in index e1d7d65..f044e41 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -830,7 +830,7 @@ install-libraries: libraries else true; \ fi; \ done; - @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6; \ + @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6 ../tcl8/8.7; \ do \ if [ ! -d "$(SCRIPT_INSTALL_DIR)"/$$i ] ; then \ echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \ diff --git a/win/Makefile.in b/win/Makefile.in index bf9ab8c..4e75b06 100644 --- a/win/Makefile.in +++ b/win/Makefile.in @@ -635,7 +635,7 @@ install-libraries: libraries install-tzdata install-msgs else true; \ fi; \ done; - @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6; \ + @for i in opt0.4 encoding ../tcl8 ../tcl8/8.4 ../tcl8/8.4/platform ../tcl8/8.5 ../tcl8/8.6 ../tcl8/8.7; \ do \ if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \ echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \ -- cgit v0.12 From 4755be8f419815dd933db195d13761b2c69ab480 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Thu, 7 Jun 2018 20:59:27 +0000 Subject: Give tests more time to finish since valgrind slows things down considerably. --- tests/async.test | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tests/async.test b/tests/async.test index 6de814b..fa3aae1 100644 --- a/tests/async.test +++ b/tests/async.test @@ -159,10 +159,12 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} { - nothing + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + nothing } return $aresult }} $hm @@ -178,9 +180,12 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} {} + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + } return $aresult }} $hm } -result {test pattern} -cleanup { -- cgit v0.12 From f8b9cb869de274ad68beeac3cd77ad8c857f30ca Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 8 Jun 2018 06:56:33 +0000 Subject: re-generate configure script (where does --runstatedir come from? --- unix/configure | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/unix/configure b/unix/configure index 101c7f4..9eba7f9 100755 --- a/unix/configure +++ b/unix/configure @@ -729,7 +729,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -816,7 +815,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1069,15 +1067,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1215,7 +1204,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1368,7 +1357,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] -- cgit v0.12 From 04d1270786231c4481e3000d2f98d272c63e90db Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 8 Jun 2018 12:50:43 +0000 Subject: resolves some warnings by compiling with new gcc-versions (>= 7.x): - '*' in boolean context, suggest '&&' instead [-Wint-in-bool-context] - passing argument 1 of 'Tcl_CreateExitHandler' from incompatible pointer type [-Wincompatible-pointer-types] --- generic/tclStringObj.c | 2 +- win/tclWinFile.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 67e86c5..996be77 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -113,7 +113,7 @@ typedef struct String { #define STRING_UALLOC(numChars) \ ((numChars) * sizeof(Tcl_UniChar)) #define STRING_SIZE(ualloc) \ - ((unsigned) ((ualloc) \ + ((unsigned) ((ualloc != 0) \ ? (sizeof(String) - sizeof(Tcl_UniChar) + (ualloc)) \ : sizeof(String))) #define stringCheckLimits(numChars) \ diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 3655321..1536bc0 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1394,6 +1394,12 @@ NativeMatchType( return 1; } +static void +FreeLoadLibHandle( + ClientData clientData) +{ + FreeLibrary((HMODULE)clientData); +} /* *---------------------------------------------------------------------- * @@ -1445,13 +1451,13 @@ TclpGetUserHome( GetProcAddress(handle, "NetGetDCName"); netUserGetInfoProc = (NETUSERGETINFOPROC *) GetProcAddress(handle, "NetUserGetInfo"); - Tcl_CreateExitHandler(TclpUnloadFile, handle); + Tcl_CreateExitHandler(FreeLoadLibHandle, handle); } handle = LoadLibraryA("userenv.dll"); if (handle) { getProfilesDirectoryProc = (GETPROFILESDIRECTORYPROC *) GetProcAddress(handle, "GetProfilesDirectoryW"); - Tcl_CreateExitHandler(TclpUnloadFile, handle); + Tcl_CreateExitHandler(FreeLoadLibHandle, handle); } apistubs = -1; -- cgit v0.12 From 400feb302b25831ba4be2781fbd08d22b2df35f7 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 9 Jun 2018 07:41:47 +0000 Subject: Update to latest tzdata (backported from 8.6) --- library/tzdata/Africa/Accra | 94 ++--- library/tzdata/Africa/Bissau | 2 +- library/tzdata/Africa/Sao_Tome | 9 +- library/tzdata/Africa/Windhoek | 95 +++-- library/tzdata/America/Araguaina | 50 +-- library/tzdata/America/Argentina/Buenos_Aires | 58 +-- library/tzdata/America/Argentina/Catamarca | 56 +-- library/tzdata/America/Argentina/Cordoba | 58 +-- library/tzdata/America/Argentina/Jujuy | 52 +-- library/tzdata/America/Argentina/La_Rioja | 56 +-- library/tzdata/America/Argentina/Mendoza | 52 +-- library/tzdata/America/Argentina/Rio_Gallegos | 56 +-- library/tzdata/America/Argentina/Salta | 56 +-- library/tzdata/America/Argentina/San_Juan | 56 +-- library/tzdata/America/Argentina/San_Luis | 50 +-- library/tzdata/America/Argentina/Tucuman | 58 +-- library/tzdata/America/Argentina/Ushuaia | 56 +-- library/tzdata/America/Asuncion | 250 ++++++------- library/tzdata/America/Bahia | 60 +-- library/tzdata/America/Belem | 28 +- library/tzdata/America/Boa_Vista | 32 +- library/tzdata/America/Bogota | 2 +- library/tzdata/America/Campo_Grande | 252 ++++++------- library/tzdata/America/Cuiaba | 250 ++++++------- library/tzdata/America/Eirunepe | 30 +- library/tzdata/America/Fortaleza | 38 +- library/tzdata/America/Grand_Turk | 4 +- library/tzdata/America/Guayaquil | 2 +- library/tzdata/America/Jamaica | 6 +- library/tzdata/America/La_Paz | 2 +- library/tzdata/America/Lima | 6 +- library/tzdata/America/Maceio | 40 +- library/tzdata/America/Manaus | 30 +- library/tzdata/America/Montevideo | 126 +++---- library/tzdata/America/Noronha | 38 +- library/tzdata/America/Porto_Velho | 28 +- library/tzdata/America/Punta_Arenas | 106 +++--- library/tzdata/America/Recife | 38 +- library/tzdata/America/Rio_Branco | 28 +- library/tzdata/America/Santarem | 28 +- library/tzdata/America/Santiago | 272 +++++++------- library/tzdata/America/Sao_Paulo | 250 ++++++------- library/tzdata/Antarctica/Casey | 1 + library/tzdata/Antarctica/Palmer | 78 ++-- library/tzdata/Asia/Almaty | 48 +-- library/tzdata/Asia/Aqtau | 48 +-- library/tzdata/Asia/Aqtobe | 46 +-- library/tzdata/Asia/Ashgabat | 22 +- library/tzdata/Asia/Atyrau | 46 +-- library/tzdata/Asia/Baghdad | 104 +++--- library/tzdata/Asia/Baku | 62 ++-- library/tzdata/Asia/Bishkek | 50 +-- library/tzdata/Asia/Choibalsan | 48 +-- library/tzdata/Asia/Dhaka | 2 +- library/tzdata/Asia/Dushanbe | 20 +- library/tzdata/Asia/Gaza | 72 ++-- library/tzdata/Asia/Hebron | 72 ++-- library/tzdata/Asia/Hovd | 48 +-- library/tzdata/Asia/Kuching | 14 +- library/tzdata/Asia/Macau | 2 +- library/tzdata/Asia/Manila | 6 +- library/tzdata/Asia/Oral | 46 +-- library/tzdata/Asia/Pyongyang | 1 + library/tzdata/Asia/Qyzylorda | 46 +-- library/tzdata/Asia/Samarkand | 20 +- library/tzdata/Asia/Tashkent | 22 +- library/tzdata/Asia/Tbilisi | 50 +-- library/tzdata/Asia/Tehran | 444 +++++++++++----------- library/tzdata/Asia/Tokyo | 16 +- library/tzdata/Asia/Ulaanbaatar | 48 +-- library/tzdata/Asia/Yerevan | 60 +-- library/tzdata/Atlantic/Azores | 2 +- library/tzdata/Atlantic/Cape_Verde | 2 +- library/tzdata/Atlantic/Madeira | 2 +- library/tzdata/Atlantic/Reykjavik | 66 ++-- library/tzdata/Atlantic/Stanley | 66 ++-- library/tzdata/Australia/Lord_Howe | 478 ++++++++++++------------ library/tzdata/Europe/Dublin | 515 +++++++++++++------------- library/tzdata/Europe/Lisbon | 2 +- library/tzdata/Europe/Prague | 9 +- library/tzdata/Indian/Mauritius | 4 +- library/tzdata/Pacific/Apia | 362 +++++++++--------- library/tzdata/Pacific/Chatham | 504 ++++++++++++------------- library/tzdata/Pacific/Easter | 262 ++++++------- library/tzdata/Pacific/Efate | 20 +- library/tzdata/Pacific/Enderbury | 2 +- library/tzdata/Pacific/Fiji | 186 +++++----- library/tzdata/Pacific/Galapagos | 2 +- library/tzdata/Pacific/Kiritimati | 2 +- library/tzdata/Pacific/Noumea | 6 +- library/tzdata/Pacific/Rarotonga | 26 +- library/tzdata/Pacific/Tongatapu | 8 +- 92 files changed, 3467 insertions(+), 3461 deletions(-) diff --git a/library/tzdata/Africa/Accra b/library/tzdata/Africa/Accra index 18f4522..f43f751 100644 --- a/library/tzdata/Africa/Accra +++ b/library/tzdata/Africa/Accra @@ -2,51 +2,51 @@ set TZData(:Africa/Accra) { {-9223372036854775808 -52 0 LMT} - {-1640995148 0 0 +0020} - {-1556841600 1200 1 +0020} - {-1546388400 0 0 +0020} - {-1525305600 1200 1 +0020} - {-1514852400 0 0 +0020} - {-1493769600 1200 1 +0020} - {-1483316400 0 0 +0020} - {-1462233600 1200 1 +0020} - {-1451780400 0 0 +0020} - {-1430611200 1200 1 +0020} - {-1420158000 0 0 +0020} - {-1399075200 1200 1 +0020} - {-1388622000 0 0 +0020} - {-1367539200 1200 1 +0020} - {-1357086000 0 0 +0020} - {-1336003200 1200 1 +0020} - {-1325550000 0 0 +0020} - {-1304380800 1200 1 +0020} - {-1293927600 0 0 +0020} - {-1272844800 1200 1 +0020} - {-1262391600 0 0 +0020} - {-1241308800 1200 1 +0020} - {-1230855600 0 0 +0020} - {-1209772800 1200 1 +0020} - {-1199319600 0 0 +0020} - {-1178150400 1200 1 +0020} - {-1167697200 0 0 +0020} - {-1146614400 1200 1 +0020} - {-1136161200 0 0 +0020} - {-1115078400 1200 1 +0020} - {-1104625200 0 0 +0020} - {-1083542400 1200 1 +0020} - {-1073089200 0 0 +0020} - {-1051920000 1200 1 +0020} - {-1041466800 0 0 +0020} - {-1020384000 1200 1 +0020} - {-1009930800 0 0 +0020} - {-988848000 1200 1 +0020} - {-978394800 0 0 +0020} - {-957312000 1200 1 +0020} - {-946858800 0 0 +0020} - {-925689600 1200 1 +0020} - {-915236400 0 0 +0020} - {-894153600 1200 1 +0020} - {-883700400 0 0 +0020} - {-862617600 1200 1 +0020} - {-852164400 0 0 +0020} + {-1640995148 0 0 GMT} + {-1556841600 1200 1 GMT} + {-1546388400 0 0 GMT} + {-1525305600 1200 1 GMT} + {-1514852400 0 0 GMT} + {-1493769600 1200 1 GMT} + {-1483316400 0 0 GMT} + {-1462233600 1200 1 GMT} + {-1451780400 0 0 GMT} + {-1430611200 1200 1 GMT} + {-1420158000 0 0 GMT} + {-1399075200 1200 1 GMT} + {-1388622000 0 0 GMT} + {-1367539200 1200 1 GMT} + {-1357086000 0 0 GMT} + {-1336003200 1200 1 GMT} + {-1325550000 0 0 GMT} + {-1304380800 1200 1 GMT} + {-1293927600 0 0 GMT} + {-1272844800 1200 1 GMT} + {-1262391600 0 0 GMT} + {-1241308800 1200 1 GMT} + {-1230855600 0 0 GMT} + {-1209772800 1200 1 GMT} + {-1199319600 0 0 GMT} + {-1178150400 1200 1 GMT} + {-1167697200 0 0 GMT} + {-1146614400 1200 1 GMT} + {-1136161200 0 0 GMT} + {-1115078400 1200 1 GMT} + {-1104625200 0 0 GMT} + {-1083542400 1200 1 GMT} + {-1073089200 0 0 GMT} + {-1051920000 1200 1 GMT} + {-1041466800 0 0 GMT} + {-1020384000 1200 1 GMT} + {-1009930800 0 0 GMT} + {-988848000 1200 1 GMT} + {-978394800 0 0 GMT} + {-957312000 1200 1 GMT} + {-946858800 0 0 GMT} + {-925689600 1200 1 GMT} + {-915236400 0 0 GMT} + {-894153600 1200 1 GMT} + {-883700400 0 0 GMT} + {-862617600 1200 1 GMT} + {-852164400 0 0 GMT} } diff --git a/library/tzdata/Africa/Bissau b/library/tzdata/Africa/Bissau index 88d9d03..e0568fb 100644 --- a/library/tzdata/Africa/Bissau +++ b/library/tzdata/Africa/Bissau @@ -2,6 +2,6 @@ set TZData(:Africa/Bissau) { {-9223372036854775808 -3740 0 LMT} - {-1830380260 -3600 0 -01} + {-1830380400 -3600 0 -01} {157770000 0 0 GMT} } diff --git a/library/tzdata/Africa/Sao_Tome b/library/tzdata/Africa/Sao_Tome index 078591d..6a60f5c 100644 --- a/library/tzdata/Africa/Sao_Tome +++ b/library/tzdata/Africa/Sao_Tome @@ -1,5 +1,8 @@ # created by tools/tclZIC.tcl - do not edit -if {![info exists TZData(Africa/Abidjan)]} { - LoadTimeZoneFile Africa/Abidjan + +set TZData(:Africa/Sao_Tome) { + {-9223372036854775808 1616 0 LMT} + {-2713912016 -2205 0 LMT} + {-1830384000 0 0 GMT} + {1514768400 3600 0 WAT} } -set TZData(:Africa/Sao_Tome) $TZData(:Africa/Abidjan) diff --git a/library/tzdata/Africa/Windhoek b/library/tzdata/Africa/Windhoek index 974ebda..d03c8b8 100644 --- a/library/tzdata/Africa/Windhoek +++ b/library/tzdata/Africa/Windhoek @@ -7,53 +7,52 @@ set TZData(:Africa/Windhoek) { {-860976000 10800 1 SAST} {-845254800 7200 0 SAST} {637970400 7200 0 CAT} - {764200800 3600 0 WAT} - {764204400 3600 0 WAT} - {778640400 7200 1 WAST} - {796780800 3600 0 WAT} - {810090000 7200 1 WAST} - {828835200 3600 0 WAT} - {841539600 7200 1 WAST} - {860284800 3600 0 WAT} - {873594000 7200 1 WAST} - {891734400 3600 0 WAT} - {905043600 7200 1 WAST} - {923184000 3600 0 WAT} - {936493200 7200 1 WAST} - {954633600 3600 0 WAT} - {967942800 7200 1 WAST} - {986083200 3600 0 WAT} - {999392400 7200 1 WAST} - {1018137600 3600 0 WAT} - {1030842000 7200 1 WAST} - {1049587200 3600 0 WAT} - {1062896400 7200 1 WAST} - {1081036800 3600 0 WAT} - {1094346000 7200 1 WAST} - {1112486400 3600 0 WAT} - {1125795600 7200 1 WAST} - {1143936000 3600 0 WAT} - {1157245200 7200 1 WAST} - {1175385600 3600 0 WAT} - {1188694800 7200 1 WAST} - {1207440000 3600 0 WAT} - {1220749200 7200 1 WAST} - {1238889600 3600 0 WAT} - {1252198800 7200 1 WAST} - {1270339200 3600 0 WAT} - {1283648400 7200 1 WAST} - {1301788800 3600 0 WAT} - {1315098000 7200 1 WAST} - {1333238400 3600 0 WAT} - {1346547600 7200 1 WAST} - {1365292800 3600 0 WAT} - {1377997200 7200 1 WAST} - {1396742400 3600 0 WAT} - {1410051600 7200 1 WAST} - {1428192000 3600 0 WAT} - {1441501200 7200 1 WAST} - {1459641600 3600 0 WAT} - {1472950800 7200 1 WAST} - {1491091200 3600 0 WAT} + {764200800 3600 1 WAT} + {778640400 7200 0 CAT} + {796780800 3600 1 WAT} + {810090000 7200 0 CAT} + {828835200 3600 1 WAT} + {841539600 7200 0 CAT} + {860284800 3600 1 WAT} + {873594000 7200 0 CAT} + {891734400 3600 1 WAT} + {905043600 7200 0 CAT} + {923184000 3600 1 WAT} + {936493200 7200 0 CAT} + {954633600 3600 1 WAT} + {967942800 7200 0 CAT} + {986083200 3600 1 WAT} + {999392400 7200 0 CAT} + {1018137600 3600 1 WAT} + {1030842000 7200 0 CAT} + {1049587200 3600 1 WAT} + {1062896400 7200 0 CAT} + {1081036800 3600 1 WAT} + {1094346000 7200 0 CAT} + {1112486400 3600 1 WAT} + {1125795600 7200 0 CAT} + {1143936000 3600 1 WAT} + {1157245200 7200 0 CAT} + {1175385600 3600 1 WAT} + {1188694800 7200 0 CAT} + {1207440000 3600 1 WAT} + {1220749200 7200 0 CAT} + {1238889600 3600 1 WAT} + {1252198800 7200 0 CAT} + {1270339200 3600 1 WAT} + {1283648400 7200 0 CAT} + {1301788800 3600 1 WAT} + {1315098000 7200 0 CAT} + {1333238400 3600 1 WAT} + {1346547600 7200 0 CAT} + {1365292800 3600 1 WAT} + {1377997200 7200 0 CAT} + {1396742400 3600 1 WAT} + {1410051600 7200 0 CAT} + {1428192000 3600 1 WAT} + {1441501200 7200 0 CAT} + {1459641600 3600 1 WAT} + {1472950800 7200 0 CAT} + {1491091200 3600 1 WAT} {1504400400 7200 0 CAT} } diff --git a/library/tzdata/America/Araguaina b/library/tzdata/America/Araguaina index b9e2aec..ca64292 100644 --- a/library/tzdata/America/Araguaina +++ b/library/tzdata/America/Araguaina @@ -3,58 +3,58 @@ set TZData(:America/Araguaina) { {-9223372036854775808 -11568 0 LMT} {-1767214032 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {811047600 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} - {844570800 -7200 1 -02} + {844570800 -7200 1 -03} {856058400 -10800 0 -03} - {876106800 -7200 1 -02} + {876106800 -7200 1 -03} {888717600 -10800 0 -03} - {908074800 -7200 1 -02} + {908074800 -7200 1 -03} {919562400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {982461600 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} - {1036292400 -7200 1 -02} + {1036292400 -7200 1 -03} {1045360800 -10800 0 -03} {1064368800 -10800 0 -03} - {1350788400 -7200 0 -02} + {1350788400 -7200 0 -03} {1361066400 -10800 0 -03} {1378000800 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Buenos_Aires b/library/tzdata/America/Argentina/Buenos_Aires index 8be2c45..40f1912 100644 --- a/library/tzdata/America/Argentina/Buenos_Aires +++ b/library/tzdata/America/Argentina/Buenos_Aires @@ -4,64 +4,64 @@ set TZData(:America/Argentina/Buenos_Aires) { {-9223372036854775808 -14028 0 LMT} {-2372097972 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1237082400 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Catamarca b/library/tzdata/America/Argentina/Catamarca index a546bfc..da5b42a 100644 --- a/library/tzdata/America/Argentina/Catamarca +++ b/library/tzdata/America/Argentina/Catamarca @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Catamarca) { {-9223372036854775808 -15788 0 LMT} {-2372096212 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Cordoba b/library/tzdata/America/Argentina/Cordoba index ec6978e..6a1426e 100644 --- a/library/tzdata/America/Argentina/Cordoba +++ b/library/tzdata/America/Argentina/Cordoba @@ -4,64 +4,64 @@ set TZData(:America/Argentina/Cordoba) { {-9223372036854775808 -15408 0 LMT} {-2372096592 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1237082400 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Jujuy b/library/tzdata/America/Argentina/Jujuy index 0e11ba2..72080f5 100644 --- a/library/tzdata/America/Argentina/Jujuy +++ b/library/tzdata/America/Argentina/Jujuy @@ -4,64 +4,64 @@ set TZData(:America/Argentina/Jujuy) { {-9223372036854775808 -15672 0 LMT} {-2372096328 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -14400 0 -04} {657086400 -10800 1 -03} {669178800 -14400 0 -04} {686721600 -7200 1 -02} {694231200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/La_Rioja b/library/tzdata/America/Argentina/La_Rioja index 90e0030..fb7b237 100644 --- a/library/tzdata/America/Argentina/La_Rioja +++ b/library/tzdata/America/Argentina/La_Rioja @@ -4,66 +4,66 @@ set TZData(:America/Argentina/La_Rioja) { {-9223372036854775808 -16044 0 LMT} {-2372095956 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667792800 -14400 0 -04} {673588800 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Mendoza b/library/tzdata/America/Argentina/Mendoza index 8dfcd2b..af7342e 100644 --- a/library/tzdata/America/Argentina/Mendoza +++ b/library/tzdata/America/Argentina/Mendoza @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Mendoza) { {-9223372036854775808 -16516 0 LMT} {-2372095484 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -14400 0 -04} {655963200 -10800 1 -03} {667796400 -14400 0 -04} {687499200 -10800 1 -03} {699418800 -14400 0 -04} - {719380800 -7200 0 -02} + {719380800 -7200 0 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1085281200 -14400 0 -04} {1096171200 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Rio_Gallegos b/library/tzdata/America/Argentina/Rio_Gallegos index 4b2a348..2a197a4 100644 --- a/library/tzdata/America/Argentina/Rio_Gallegos +++ b/library/tzdata/America/Argentina/Rio_Gallegos @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Rio_Gallegos) { {-9223372036854775808 -16612 0 LMT} {-2372095388 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Salta b/library/tzdata/America/Argentina/Salta index 4f9ccf9..d49e82f 100644 --- a/library/tzdata/America/Argentina/Salta +++ b/library/tzdata/America/Argentina/Salta @@ -4,63 +4,63 @@ set TZData(:America/Argentina/Salta) { {-9223372036854775808 -15700 0 LMT} {-2372096300 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/San_Juan b/library/tzdata/America/Argentina/San_Juan index 1f0530a..d67f688 100644 --- a/library/tzdata/America/Argentina/San_Juan +++ b/library/tzdata/America/Argentina/San_Juan @@ -4,66 +4,66 @@ set TZData(:America/Argentina/San_Juan) { {-9223372036854775808 -16444 0 LMT} {-2372095556 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667792800 -14400 0 -04} {673588800 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1085972400 -14400 0 -04} {1090728000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/San_Luis b/library/tzdata/America/Argentina/San_Luis index 3583a39..4d27c32 100644 --- a/library/tzdata/America/Argentina/San_Luis +++ b/library/tzdata/America/Argentina/San_Luis @@ -4,52 +4,52 @@ set TZData(:America/Argentina/San_Luis) { {-9223372036854775808 -15924 0 LMT} {-2372096076 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {631159200 -7200 1 -02} {637380000 -14400 0 -04} {655963200 -10800 1 -03} @@ -59,10 +59,10 @@ set TZData(:America/Argentina/San_Luis) { {952052400 -10800 0 -03} {1085972400 -14400 0 -04} {1090728000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1200880800 -10800 0 -04} {1205031600 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1236481200 -14400 0 -04} {1255233600 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Tucuman b/library/tzdata/America/Argentina/Tucuman index 15c5c63..6809800 100644 --- a/library/tzdata/America/Argentina/Tucuman +++ b/library/tzdata/America/Argentina/Tucuman @@ -4,66 +4,66 @@ set TZData(:America/Argentina/Tucuman) { {-9223372036854775808 -15652 0 LMT} {-2372096348 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -14400 0 -04} - {687931200 -7200 0 -02} + {687931200 -7200 0 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1086058800 -14400 0 -04} {1087099200 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1237082400 -10800 0 -03} } diff --git a/library/tzdata/America/Argentina/Ushuaia b/library/tzdata/America/Argentina/Ushuaia index 4214c1d..c62ca0d 100644 --- a/library/tzdata/America/Argentina/Ushuaia +++ b/library/tzdata/America/Argentina/Ushuaia @@ -4,65 +4,65 @@ set TZData(:America/Argentina/Ushuaia) { {-9223372036854775808 -16392 0 LMT} {-2372095608 -15408 0 CMT} {-1567453392 -14400 0 -04} - {-1233432000 -10800 0 -03} + {-1233432000 -10800 0 -04} {-1222981200 -14400 0 -04} - {-1205956800 -10800 1 -03} + {-1205956800 -10800 1 -04} {-1194037200 -14400 0 -04} - {-1172865600 -10800 1 -03} + {-1172865600 -10800 1 -04} {-1162501200 -14400 0 -04} - {-1141329600 -10800 1 -03} + {-1141329600 -10800 1 -04} {-1130965200 -14400 0 -04} - {-1109793600 -10800 1 -03} + {-1109793600 -10800 1 -04} {-1099429200 -14400 0 -04} - {-1078257600 -10800 1 -03} + {-1078257600 -10800 1 -04} {-1067806800 -14400 0 -04} - {-1046635200 -10800 1 -03} + {-1046635200 -10800 1 -04} {-1036270800 -14400 0 -04} - {-1015099200 -10800 1 -03} + {-1015099200 -10800 1 -04} {-1004734800 -14400 0 -04} - {-983563200 -10800 1 -03} + {-983563200 -10800 1 -04} {-973198800 -14400 0 -04} - {-952027200 -10800 1 -03} + {-952027200 -10800 1 -04} {-941576400 -14400 0 -04} - {-931032000 -10800 1 -03} + {-931032000 -10800 1 -04} {-900882000 -14400 0 -04} - {-890337600 -10800 1 -03} + {-890337600 -10800 1 -04} {-833749200 -14400 0 -04} - {-827265600 -10800 1 -03} + {-827265600 -10800 1 -04} {-752274000 -14400 0 -04} - {-733780800 -10800 1 -03} + {-733780800 -10800 1 -04} {-197326800 -14400 0 -04} - {-190843200 -10800 1 -03} + {-190843200 -10800 1 -04} {-184194000 -14400 0 -04} - {-164491200 -10800 1 -03} + {-164491200 -10800 1 -04} {-152658000 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} - {596948400 -7200 1 -02} + {596948400 -7200 1 -03} {605066400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {731469600 -10800 0 -03} {938916000 -10800 0 -04} - {938919600 -10800 1 -03} + {938919600 -10800 1 -04} {952056000 -10800 0 -03} {1085886000 -14400 0 -04} {1087704000 -10800 0 -03} - {1198983600 -7200 1 -02} + {1198983600 -7200 1 -03} {1205632800 -10800 0 -03} {1224295200 -10800 0 -03} } diff --git a/library/tzdata/America/Asuncion b/library/tzdata/America/Asuncion index 606db57..8e6c1b0 100644 --- a/library/tzdata/America/Asuncion +++ b/library/tzdata/America/Asuncion @@ -7,253 +7,253 @@ set TZData(:America/Asuncion) { {86760000 -10800 0 -03} {134017200 -14400 0 -04} {162878400 -14400 0 -04} - {181368000 -10800 1 -03} + {181368000 -10800 1 -04} {194497200 -14400 0 -04} - {212990400 -10800 1 -03} + {212990400 -10800 1 -04} {226033200 -14400 0 -04} - {244526400 -10800 1 -03} + {244526400 -10800 1 -04} {257569200 -14400 0 -04} - {276062400 -10800 1 -03} + {276062400 -10800 1 -04} {291783600 -14400 0 -04} - {307598400 -10800 1 -03} + {307598400 -10800 1 -04} {323406000 -14400 0 -04} - {339220800 -10800 1 -03} + {339220800 -10800 1 -04} {354942000 -14400 0 -04} - {370756800 -10800 1 -03} + {370756800 -10800 1 -04} {386478000 -14400 0 -04} - {402292800 -10800 1 -03} + {402292800 -10800 1 -04} {418014000 -14400 0 -04} - {433828800 -10800 1 -03} + {433828800 -10800 1 -04} {449636400 -14400 0 -04} - {465451200 -10800 1 -03} + {465451200 -10800 1 -04} {481172400 -14400 0 -04} - {496987200 -10800 1 -03} + {496987200 -10800 1 -04} {512708400 -14400 0 -04} - {528523200 -10800 1 -03} + {528523200 -10800 1 -04} {544244400 -14400 0 -04} - {560059200 -10800 1 -03} + {560059200 -10800 1 -04} {575866800 -14400 0 -04} - {591681600 -10800 1 -03} + {591681600 -10800 1 -04} {607402800 -14400 0 -04} - {625032000 -10800 1 -03} + {625032000 -10800 1 -04} {638938800 -14400 0 -04} - {654753600 -10800 1 -03} + {654753600 -10800 1 -04} {670474800 -14400 0 -04} - {686721600 -10800 1 -03} + {686721600 -10800 1 -04} {699418800 -14400 0 -04} - {718257600 -10800 1 -03} + {718257600 -10800 1 -04} {733546800 -14400 0 -04} - {749448000 -10800 1 -03} + {749448000 -10800 1 -04} {762318000 -14400 0 -04} - {780984000 -10800 1 -03} + {780984000 -10800 1 -04} {793767600 -14400 0 -04} - {812520000 -10800 1 -03} + {812520000 -10800 1 -04} {825649200 -14400 0 -04} - {844574400 -10800 1 -03} + {844574400 -10800 1 -04} {856666800 -14400 0 -04} - {876024000 -10800 1 -03} + {876024000 -10800 1 -04} {888721200 -14400 0 -04} - {907473600 -10800 1 -03} + {907473600 -10800 1 -04} {920775600 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {952225200 -14400 0 -04} - {970372800 -10800 1 -03} + {970372800 -10800 1 -04} {983674800 -14400 0 -04} - {1002427200 -10800 1 -03} + {1002427200 -10800 1 -04} {1018148400 -14400 0 -04} - {1030852800 -10800 1 -03} + {1030852800 -10800 1 -04} {1049598000 -14400 0 -04} - {1062907200 -10800 1 -03} + {1062907200 -10800 1 -04} {1081047600 -14400 0 -04} - {1097985600 -10800 1 -03} + {1097985600 -10800 1 -04} {1110682800 -14400 0 -04} - {1129435200 -10800 1 -03} + {1129435200 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192939200 -10800 1 -03} + {1192939200 -10800 1 -04} {1205031600 -14400 0 -04} - {1224388800 -10800 1 -03} + {1224388800 -10800 1 -04} {1236481200 -14400 0 -04} - {1255838400 -10800 1 -03} + {1255838400 -10800 1 -04} {1270954800 -14400 0 -04} - {1286078400 -10800 1 -03} + {1286078400 -10800 1 -04} {1302404400 -14400 0 -04} - {1317528000 -10800 1 -03} + {1317528000 -10800 1 -04} {1333854000 -14400 0 -04} - {1349582400 -10800 1 -03} + {1349582400 -10800 1 -04} {1364094000 -14400 0 -04} - {1381032000 -10800 1 -03} + {1381032000 -10800 1 -04} {1395543600 -14400 0 -04} - {1412481600 -10800 1 -03} + {1412481600 -10800 1 -04} {1426993200 -14400 0 -04} - {1443931200 -10800 1 -03} + {1443931200 -10800 1 -04} {1459047600 -14400 0 -04} - {1475380800 -10800 1 -03} + {1475380800 -10800 1 -04} {1490497200 -14400 0 -04} - {1506830400 -10800 1 -03} + {1506830400 -10800 1 -04} {1521946800 -14400 0 -04} - {1538884800 -10800 1 -03} + {1538884800 -10800 1 -04} {1553396400 -14400 0 -04} - {1570334400 -10800 1 -03} + {1570334400 -10800 1 -04} {1584846000 -14400 0 -04} - {1601784000 -10800 1 -03} + {1601784000 -10800 1 -04} {1616900400 -14400 0 -04} - {1633233600 -10800 1 -03} + {1633233600 -10800 1 -04} {1648350000 -14400 0 -04} - {1664683200 -10800 1 -03} + {1664683200 -10800 1 -04} {1679799600 -14400 0 -04} - {1696132800 -10800 1 -03} + {1696132800 -10800 1 -04} {1711249200 -14400 0 -04} - {1728187200 -10800 1 -03} + {1728187200 -10800 1 -04} {1742698800 -14400 0 -04} - {1759636800 -10800 1 -03} + {1759636800 -10800 1 -04} {1774148400 -14400 0 -04} - {1791086400 -10800 1 -03} + {1791086400 -10800 1 -04} {1806202800 -14400 0 -04} - {1822536000 -10800 1 -03} + {1822536000 -10800 1 -04} {1837652400 -14400 0 -04} - {1853985600 -10800 1 -03} + {1853985600 -10800 1 -04} {1869102000 -14400 0 -04} - {1886040000 -10800 1 -03} + {1886040000 -10800 1 -04} {1900551600 -14400 0 -04} - {1917489600 -10800 1 -03} + {1917489600 -10800 1 -04} {1932001200 -14400 0 -04} - {1948939200 -10800 1 -03} + {1948939200 -10800 1 -04} {1964055600 -14400 0 -04} - {1980388800 -10800 1 -03} + {1980388800 -10800 1 -04} {1995505200 -14400 0 -04} - {2011838400 -10800 1 -03} + {2011838400 -10800 1 -04} {2026954800 -14400 0 -04} - {2043288000 -10800 1 -03} + {2043288000 -10800 1 -04} {2058404400 -14400 0 -04} - {2075342400 -10800 1 -03} + {2075342400 -10800 1 -04} {2089854000 -14400 0 -04} - {2106792000 -10800 1 -03} + {2106792000 -10800 1 -04} {2121303600 -14400 0 -04} - {2138241600 -10800 1 -03} + {2138241600 -10800 1 -04} {2153358000 -14400 0 -04} - {2169691200 -10800 1 -03} + {2169691200 -10800 1 -04} {2184807600 -14400 0 -04} - {2201140800 -10800 1 -03} + {2201140800 -10800 1 -04} {2216257200 -14400 0 -04} - {2233195200 -10800 1 -03} + {2233195200 -10800 1 -04} {2247706800 -14400 0 -04} - {2264644800 -10800 1 -03} + {2264644800 -10800 1 -04} {2279156400 -14400 0 -04} - {2296094400 -10800 1 -03} + {2296094400 -10800 1 -04} {2310606000 -14400 0 -04} - {2327544000 -10800 1 -03} + {2327544000 -10800 1 -04} {2342660400 -14400 0 -04} - {2358993600 -10800 1 -03} + {2358993600 -10800 1 -04} {2374110000 -14400 0 -04} - {2390443200 -10800 1 -03} + {2390443200 -10800 1 -04} {2405559600 -14400 0 -04} - {2422497600 -10800 1 -03} + {2422497600 -10800 1 -04} {2437009200 -14400 0 -04} - {2453947200 -10800 1 -03} + {2453947200 -10800 1 -04} {2468458800 -14400 0 -04} - {2485396800 -10800 1 -03} + {2485396800 -10800 1 -04} {2500513200 -14400 0 -04} - {2516846400 -10800 1 -03} + {2516846400 -10800 1 -04} {2531962800 -14400 0 -04} - {2548296000 -10800 1 -03} + {2548296000 -10800 1 -04} {2563412400 -14400 0 -04} - {2579745600 -10800 1 -03} + {2579745600 -10800 1 -04} {2594862000 -14400 0 -04} - {2611800000 -10800 1 -03} + {2611800000 -10800 1 -04} {2626311600 -14400 0 -04} - {2643249600 -10800 1 -03} + {2643249600 -10800 1 -04} {2657761200 -14400 0 -04} - {2674699200 -10800 1 -03} + {2674699200 -10800 1 -04} {2689815600 -14400 0 -04} - {2706148800 -10800 1 -03} + {2706148800 -10800 1 -04} {2721265200 -14400 0 -04} - {2737598400 -10800 1 -03} + {2737598400 -10800 1 -04} {2752714800 -14400 0 -04} - {2769652800 -10800 1 -03} + {2769652800 -10800 1 -04} {2784164400 -14400 0 -04} - {2801102400 -10800 1 -03} + {2801102400 -10800 1 -04} {2815614000 -14400 0 -04} - {2832552000 -10800 1 -03} + {2832552000 -10800 1 -04} {2847668400 -14400 0 -04} - {2864001600 -10800 1 -03} + {2864001600 -10800 1 -04} {2879118000 -14400 0 -04} - {2895451200 -10800 1 -03} + {2895451200 -10800 1 -04} {2910567600 -14400 0 -04} - {2926900800 -10800 1 -03} + {2926900800 -10800 1 -04} {2942017200 -14400 0 -04} - {2958955200 -10800 1 -03} + {2958955200 -10800 1 -04} {2973466800 -14400 0 -04} - {2990404800 -10800 1 -03} + {2990404800 -10800 1 -04} {3004916400 -14400 0 -04} - {3021854400 -10800 1 -03} + {3021854400 -10800 1 -04} {3036970800 -14400 0 -04} - {3053304000 -10800 1 -03} + {3053304000 -10800 1 -04} {3068420400 -14400 0 -04} - {3084753600 -10800 1 -03} + {3084753600 -10800 1 -04} {3099870000 -14400 0 -04} - {3116808000 -10800 1 -03} + {3116808000 -10800 1 -04} {3131319600 -14400 0 -04} - {3148257600 -10800 1 -03} + {3148257600 -10800 1 -04} {3162769200 -14400 0 -04} - {3179707200 -10800 1 -03} + {3179707200 -10800 1 -04} {3194218800 -14400 0 -04} - {3211156800 -10800 1 -03} + {3211156800 -10800 1 -04} {3226273200 -14400 0 -04} - {3242606400 -10800 1 -03} + {3242606400 -10800 1 -04} {3257722800 -14400 0 -04} - {3274056000 -10800 1 -03} + {3274056000 -10800 1 -04} {3289172400 -14400 0 -04} - {3306110400 -10800 1 -03} + {3306110400 -10800 1 -04} {3320622000 -14400 0 -04} - {3337560000 -10800 1 -03} + {3337560000 -10800 1 -04} {3352071600 -14400 0 -04} - {3369009600 -10800 1 -03} + {3369009600 -10800 1 -04} {3384126000 -14400 0 -04} - {3400459200 -10800 1 -03} + {3400459200 -10800 1 -04} {3415575600 -14400 0 -04} - {3431908800 -10800 1 -03} + {3431908800 -10800 1 -04} {3447025200 -14400 0 -04} - {3463358400 -10800 1 -03} + {3463358400 -10800 1 -04} {3478474800 -14400 0 -04} - {3495412800 -10800 1 -03} + {3495412800 -10800 1 -04} {3509924400 -14400 0 -04} - {3526862400 -10800 1 -03} + {3526862400 -10800 1 -04} {3541374000 -14400 0 -04} - {3558312000 -10800 1 -03} + {3558312000 -10800 1 -04} {3573428400 -14400 0 -04} - {3589761600 -10800 1 -03} + {3589761600 -10800 1 -04} {3604878000 -14400 0 -04} - {3621211200 -10800 1 -03} + {3621211200 -10800 1 -04} {3636327600 -14400 0 -04} - {3653265600 -10800 1 -03} + {3653265600 -10800 1 -04} {3667777200 -14400 0 -04} - {3684715200 -10800 1 -03} + {3684715200 -10800 1 -04} {3699226800 -14400 0 -04} - {3716164800 -10800 1 -03} + {3716164800 -10800 1 -04} {3731281200 -14400 0 -04} - {3747614400 -10800 1 -03} + {3747614400 -10800 1 -04} {3762730800 -14400 0 -04} - {3779064000 -10800 1 -03} + {3779064000 -10800 1 -04} {3794180400 -14400 0 -04} - {3810513600 -10800 1 -03} + {3810513600 -10800 1 -04} {3825630000 -14400 0 -04} - {3842568000 -10800 1 -03} + {3842568000 -10800 1 -04} {3857079600 -14400 0 -04} - {3874017600 -10800 1 -03} + {3874017600 -10800 1 -04} {3888529200 -14400 0 -04} - {3905467200 -10800 1 -03} + {3905467200 -10800 1 -04} {3920583600 -14400 0 -04} - {3936916800 -10800 1 -03} + {3936916800 -10800 1 -04} {3952033200 -14400 0 -04} - {3968366400 -10800 1 -03} + {3968366400 -10800 1 -04} {3983482800 -14400 0 -04} - {4000420800 -10800 1 -03} + {4000420800 -10800 1 -04} {4014932400 -14400 0 -04} - {4031870400 -10800 1 -03} + {4031870400 -10800 1 -04} {4046382000 -14400 0 -04} - {4063320000 -10800 1 -03} + {4063320000 -10800 1 -04} {4077831600 -14400 0 -04} - {4094769600 -10800 1 -03} + {4094769600 -10800 1 -04} } diff --git a/library/tzdata/America/Bahia b/library/tzdata/America/Bahia index 7dbcb90..7aaf834 100644 --- a/library/tzdata/America/Bahia +++ b/library/tzdata/America/Bahia @@ -3,66 +3,66 @@ set TZData(:America/Bahia) { {-9223372036854775808 -9244 0 LMT} {-1767216356 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {666756000 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {697600800 -10800 0 -03} - {719982000 -7200 1 -02} + {719982000 -7200 1 -03} {728445600 -10800 0 -03} - {750826800 -7200 1 -02} + {750826800 -7200 1 -03} {761709600 -10800 0 -03} - {782276400 -7200 1 -02} + {782276400 -7200 1 -03} {793159200 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} - {844570800 -7200 1 -02} + {844570800 -7200 1 -03} {856058400 -10800 0 -03} - {876106800 -7200 1 -02} + {876106800 -7200 1 -03} {888717600 -10800 0 -03} - {908074800 -7200 1 -02} + {908074800 -7200 1 -03} {919562400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {982461600 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} - {1036292400 -7200 1 -02} + {1036292400 -7200 1 -03} {1045360800 -10800 0 -03} {1064368800 -10800 0 -03} - {1318734000 -7200 0 -02} + {1318734000 -7200 0 -03} {1330221600 -10800 0 -03} {1350784800 -10800 0 -03} } diff --git a/library/tzdata/America/Belem b/library/tzdata/America/Belem index b2bf3a6..42a3ec5 100644 --- a/library/tzdata/America/Belem +++ b/library/tzdata/America/Belem @@ -3,33 +3,33 @@ set TZData(:America/Belem) { {-9223372036854775808 -11636 0 LMT} {-1767213964 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} {590032800 -10800 0 -03} } diff --git a/library/tzdata/America/Boa_Vista b/library/tzdata/America/Boa_Vista index 982249b..0af989e 100644 --- a/library/tzdata/America/Boa_Vista +++ b/library/tzdata/America/Boa_Vista @@ -3,38 +3,38 @@ set TZData(:America/Boa_Vista) { {-9223372036854775808 -14560 0 LMT} {-1767211040 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} {938664000 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {951620400 -14400 0 -04} - {970977600 -10800 1 -03} + {970977600 -10800 1 -04} {971578800 -14400 0 -04} } diff --git a/library/tzdata/America/Bogota b/library/tzdata/America/Bogota index 69e4557..8ca39ba 100644 --- a/library/tzdata/America/Bogota +++ b/library/tzdata/America/Bogota @@ -4,6 +4,6 @@ set TZData(:America/Bogota) { {-9223372036854775808 -17776 0 LMT} {-2707671824 -17776 0 BMT} {-1739041424 -18000 0 -05} - {704869200 -14400 1 -04} + {704869200 -14400 1 -05} {733896000 -18000 0 -05} } diff --git a/library/tzdata/America/Campo_Grande b/library/tzdata/America/Campo_Grande index 77cb4d1..5ec7112 100644 --- a/library/tzdata/America/Campo_Grande +++ b/library/tzdata/America/Campo_Grande @@ -3,255 +3,255 @@ set TZData(:America/Campo_Grande) { {-9223372036854775808 -13108 0 LMT} {-1767212492 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} - {592977600 -10800 1 -03} + {592977600 -10800 1 -04} {602046000 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {634705200 -14400 0 -04} - {656481600 -10800 1 -03} + {656481600 -10800 1 -04} {666759600 -14400 0 -04} - {687931200 -10800 1 -03} + {687931200 -10800 1 -04} {697604400 -14400 0 -04} - {719985600 -10800 1 -03} + {719985600 -10800 1 -04} {728449200 -14400 0 -04} - {750830400 -10800 1 -03} + {750830400 -10800 1 -04} {761713200 -14400 0 -04} - {782280000 -10800 1 -03} + {782280000 -10800 1 -04} {793162800 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {824007600 -14400 0 -04} - {844574400 -10800 1 -03} + {844574400 -10800 1 -04} {856062000 -14400 0 -04} - {876110400 -10800 1 -03} + {876110400 -10800 1 -04} {888721200 -14400 0 -04} - {908078400 -10800 1 -03} + {908078400 -10800 1 -04} {919566000 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {951620400 -14400 0 -04} - {970977600 -10800 1 -03} + {970977600 -10800 1 -04} {982465200 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1013914800 -14400 0 -04} - {1036296000 -10800 1 -03} + {1036296000 -10800 1 -04} {1045364400 -14400 0 -04} - {1066536000 -10800 1 -03} + {1066536000 -10800 1 -04} {1076814000 -14400 0 -04} - {1099368000 -10800 1 -03} + {1099368000 -10800 1 -04} {1108868400 -14400 0 -04} - {1129435200 -10800 1 -03} + {1129435200 -10800 1 -04} {1140318000 -14400 0 -04} - {1162699200 -10800 1 -03} + {1162699200 -10800 1 -04} {1172372400 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1203217200 -14400 0 -04} - {1224388800 -10800 1 -03} + {1224388800 -10800 1 -04} {1234666800 -14400 0 -04} - {1255838400 -10800 1 -03} + {1255838400 -10800 1 -04} {1266721200 -14400 0 -04} - {1287288000 -10800 1 -03} + {1287288000 -10800 1 -04} {1298170800 -14400 0 -04} - {1318737600 -10800 1 -03} + {1318737600 -10800 1 -04} {1330225200 -14400 0 -04} - {1350792000 -10800 1 -03} + {1350792000 -10800 1 -04} {1361070000 -14400 0 -04} - {1382241600 -10800 1 -03} + {1382241600 -10800 1 -04} {1392519600 -14400 0 -04} - {1413691200 -10800 1 -03} + {1413691200 -10800 1 -04} {1424574000 -14400 0 -04} - {1445140800 -10800 1 -03} + {1445140800 -10800 1 -04} {1456023600 -14400 0 -04} - {1476590400 -10800 1 -03} + {1476590400 -10800 1 -04} {1487473200 -14400 0 -04} - {1508040000 -10800 1 -03} + {1508040000 -10800 1 -04} {1518922800 -14400 0 -04} - {1540094400 -10800 1 -03} + {1541304000 -10800 1 -04} {1550372400 -14400 0 -04} - {1571544000 -10800 1 -03} + {1572753600 -10800 1 -04} {1581822000 -14400 0 -04} - {1602993600 -10800 1 -03} + {1604203200 -10800 1 -04} {1613876400 -14400 0 -04} - {1634443200 -10800 1 -03} + {1636257600 -10800 1 -04} {1645326000 -14400 0 -04} - {1665892800 -10800 1 -03} + {1667707200 -10800 1 -04} {1677380400 -14400 0 -04} - {1697342400 -10800 1 -03} + {1699156800 -10800 1 -04} {1708225200 -14400 0 -04} - {1729396800 -10800 1 -03} + {1730606400 -10800 1 -04} {1739674800 -14400 0 -04} - {1760846400 -10800 1 -03} + {1762056000 -10800 1 -04} {1771729200 -14400 0 -04} - {1792296000 -10800 1 -03} + {1793505600 -10800 1 -04} {1803178800 -14400 0 -04} - {1823745600 -10800 1 -03} + {1825560000 -10800 1 -04} {1834628400 -14400 0 -04} - {1855195200 -10800 1 -03} + {1857009600 -10800 1 -04} {1866078000 -14400 0 -04} - {1887249600 -10800 1 -03} + {1888459200 -10800 1 -04} {1897527600 -14400 0 -04} - {1918699200 -10800 1 -03} + {1919908800 -10800 1 -04} {1928977200 -14400 0 -04} - {1950148800 -10800 1 -03} + {1951358400 -10800 1 -04} {1960426800 -14400 0 -04} - {1981598400 -10800 1 -03} + {1983412800 -10800 1 -04} {1992481200 -14400 0 -04} - {2013048000 -10800 1 -03} + {2014862400 -10800 1 -04} {2024535600 -14400 0 -04} - {2044497600 -10800 1 -03} + {2046312000 -10800 1 -04} {2055380400 -14400 0 -04} - {2076552000 -10800 1 -03} + {2077761600 -10800 1 -04} {2086830000 -14400 0 -04} - {2108001600 -10800 1 -03} + {2109211200 -10800 1 -04} {2118884400 -14400 0 -04} - {2139451200 -10800 1 -03} + {2140660800 -10800 1 -04} {2150334000 -14400 0 -04} - {2170900800 -10800 1 -03} + {2172715200 -10800 1 -04} {2181783600 -14400 0 -04} - {2202350400 -10800 1 -03} + {2204164800 -10800 1 -04} {2213233200 -14400 0 -04} - {2234404800 -10800 1 -03} + {2235614400 -10800 1 -04} {2244682800 -14400 0 -04} - {2265854400 -10800 1 -03} + {2267064000 -10800 1 -04} {2276132400 -14400 0 -04} - {2297304000 -10800 1 -03} + {2298513600 -10800 1 -04} {2307582000 -14400 0 -04} - {2328753600 -10800 1 -03} + {2329963200 -10800 1 -04} {2339636400 -14400 0 -04} - {2360203200 -10800 1 -03} + {2362017600 -10800 1 -04} {2371086000 -14400 0 -04} - {2391652800 -10800 1 -03} + {2393467200 -10800 1 -04} {2402535600 -14400 0 -04} - {2423707200 -10800 1 -03} + {2424916800 -10800 1 -04} {2433985200 -14400 0 -04} - {2455156800 -10800 1 -03} + {2456366400 -10800 1 -04} {2465434800 -14400 0 -04} - {2486606400 -10800 1 -03} + {2487816000 -10800 1 -04} {2497489200 -14400 0 -04} - {2518056000 -10800 1 -03} + {2519870400 -10800 1 -04} {2528938800 -14400 0 -04} - {2549505600 -10800 1 -03} + {2551320000 -10800 1 -04} {2560388400 -14400 0 -04} - {2580955200 -10800 1 -03} + {2582769600 -10800 1 -04} {2591838000 -14400 0 -04} - {2613009600 -10800 1 -03} + {2614219200 -10800 1 -04} {2623287600 -14400 0 -04} - {2644459200 -10800 1 -03} + {2645668800 -10800 1 -04} {2654737200 -14400 0 -04} - {2675908800 -10800 1 -03} + {2677118400 -10800 1 -04} {2686791600 -14400 0 -04} - {2707358400 -10800 1 -03} + {2709172800 -10800 1 -04} {2718241200 -14400 0 -04} - {2738808000 -10800 1 -03} + {2740622400 -10800 1 -04} {2749690800 -14400 0 -04} - {2770862400 -10800 1 -03} + {2772072000 -10800 1 -04} {2781140400 -14400 0 -04} - {2802312000 -10800 1 -03} + {2803521600 -10800 1 -04} {2812590000 -14400 0 -04} - {2833761600 -10800 1 -03} + {2834971200 -10800 1 -04} {2844039600 -14400 0 -04} - {2865211200 -10800 1 -03} + {2867025600 -10800 1 -04} {2876094000 -14400 0 -04} - {2896660800 -10800 1 -03} + {2898475200 -10800 1 -04} {2907543600 -14400 0 -04} - {2928110400 -10800 1 -03} + {2929924800 -10800 1 -04} {2938993200 -14400 0 -04} - {2960164800 -10800 1 -03} + {2961374400 -10800 1 -04} {2970442800 -14400 0 -04} - {2991614400 -10800 1 -03} + {2992824000 -10800 1 -04} {3001892400 -14400 0 -04} - {3023064000 -10800 1 -03} + {3024273600 -10800 1 -04} {3033946800 -14400 0 -04} - {3054513600 -10800 1 -03} + {3056328000 -10800 1 -04} {3065396400 -14400 0 -04} - {3085963200 -10800 1 -03} + {3087777600 -10800 1 -04} {3096846000 -14400 0 -04} - {3118017600 -10800 1 -03} + {3119227200 -10800 1 -04} {3128295600 -14400 0 -04} - {3149467200 -10800 1 -03} + {3150676800 -10800 1 -04} {3159745200 -14400 0 -04} - {3180916800 -10800 1 -03} + {3182126400 -10800 1 -04} {3191194800 -14400 0 -04} - {3212366400 -10800 1 -03} + {3213576000 -10800 1 -04} {3223249200 -14400 0 -04} - {3243816000 -10800 1 -03} + {3245630400 -10800 1 -04} {3254698800 -14400 0 -04} - {3275265600 -10800 1 -03} + {3277080000 -10800 1 -04} {3286148400 -14400 0 -04} - {3307320000 -10800 1 -03} + {3308529600 -10800 1 -04} {3317598000 -14400 0 -04} - {3338769600 -10800 1 -03} + {3339979200 -10800 1 -04} {3349047600 -14400 0 -04} - {3370219200 -10800 1 -03} + {3371428800 -10800 1 -04} {3381102000 -14400 0 -04} - {3401668800 -10800 1 -03} + {3403483200 -10800 1 -04} {3412551600 -14400 0 -04} - {3433118400 -10800 1 -03} + {3434932800 -10800 1 -04} {3444001200 -14400 0 -04} - {3464568000 -10800 1 -03} + {3466382400 -10800 1 -04} {3475450800 -14400 0 -04} - {3496622400 -10800 1 -03} + {3497832000 -10800 1 -04} {3506900400 -14400 0 -04} - {3528072000 -10800 1 -03} + {3529281600 -10800 1 -04} {3538350000 -14400 0 -04} - {3559521600 -10800 1 -03} + {3560731200 -10800 1 -04} {3570404400 -14400 0 -04} - {3590971200 -10800 1 -03} + {3592785600 -10800 1 -04} {3601854000 -14400 0 -04} - {3622420800 -10800 1 -03} + {3624235200 -10800 1 -04} {3633303600 -14400 0 -04} - {3654475200 -10800 1 -03} + {3655684800 -10800 1 -04} {3664753200 -14400 0 -04} - {3685924800 -10800 1 -03} + {3687134400 -10800 1 -04} {3696202800 -14400 0 -04} - {3717374400 -10800 1 -03} + {3718584000 -10800 1 -04} {3727652400 -14400 0 -04} - {3748824000 -10800 1 -03} + {3750638400 -10800 1 -04} {3759706800 -14400 0 -04} - {3780273600 -10800 1 -03} + {3782088000 -10800 1 -04} {3791156400 -14400 0 -04} - {3811723200 -10800 1 -03} + {3813537600 -10800 1 -04} {3822606000 -14400 0 -04} - {3843777600 -10800 1 -03} + {3844987200 -10800 1 -04} {3854055600 -14400 0 -04} - {3875227200 -10800 1 -03} + {3876436800 -10800 1 -04} {3885505200 -14400 0 -04} - {3906676800 -10800 1 -03} + {3907886400 -10800 1 -04} {3917559600 -14400 0 -04} - {3938126400 -10800 1 -03} + {3939940800 -10800 1 -04} {3949009200 -14400 0 -04} - {3969576000 -10800 1 -03} + {3971390400 -10800 1 -04} {3980458800 -14400 0 -04} - {4001630400 -10800 1 -03} + {4002840000 -10800 1 -04} {4011908400 -14400 0 -04} - {4033080000 -10800 1 -03} + {4034289600 -10800 1 -04} {4043358000 -14400 0 -04} - {4064529600 -10800 1 -03} + {4065739200 -10800 1 -04} {4074807600 -14400 0 -04} - {4095979200 -10800 1 -03} + {4097188800 -10800 1 -04} } diff --git a/library/tzdata/America/Cuiaba b/library/tzdata/America/Cuiaba index 57cd38c..09f5b1f 100644 --- a/library/tzdata/America/Cuiaba +++ b/library/tzdata/America/Cuiaba @@ -3,255 +3,255 @@ set TZData(:America/Cuiaba) { {-9223372036854775808 -13460 0 LMT} {-1767212140 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} - {592977600 -10800 1 -03} + {592977600 -10800 1 -04} {602046000 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {634705200 -14400 0 -04} - {656481600 -10800 1 -03} + {656481600 -10800 1 -04} {666759600 -14400 0 -04} - {687931200 -10800 1 -03} + {687931200 -10800 1 -04} {697604400 -14400 0 -04} - {719985600 -10800 1 -03} + {719985600 -10800 1 -04} {728449200 -14400 0 -04} - {750830400 -10800 1 -03} + {750830400 -10800 1 -04} {761713200 -14400 0 -04} - {782280000 -10800 1 -03} + {782280000 -10800 1 -04} {793162800 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {824007600 -14400 0 -04} - {844574400 -10800 1 -03} + {844574400 -10800 1 -04} {856062000 -14400 0 -04} - {876110400 -10800 1 -03} + {876110400 -10800 1 -04} {888721200 -14400 0 -04} - {908078400 -10800 1 -03} + {908078400 -10800 1 -04} {919566000 -14400 0 -04} - {938923200 -10800 1 -03} + {938923200 -10800 1 -04} {951620400 -14400 0 -04} - {970977600 -10800 1 -03} + {970977600 -10800 1 -04} {982465200 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1013914800 -14400 0 -04} - {1036296000 -10800 1 -03} + {1036296000 -10800 1 -04} {1045364400 -14400 0 -04} {1064372400 -14400 0 -04} {1096603200 -14400 0 -04} - {1099368000 -10800 1 -03} + {1099368000 -10800 1 -04} {1108868400 -14400 0 -04} - {1129435200 -10800 1 -03} + {1129435200 -10800 1 -04} {1140318000 -14400 0 -04} - {1162699200 -10800 1 -03} + {1162699200 -10800 1 -04} {1172372400 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1203217200 -14400 0 -04} - {1224388800 -10800 1 -03} + {1224388800 -10800 1 -04} {1234666800 -14400 0 -04} - {1255838400 -10800 1 -03} + {1255838400 -10800 1 -04} {1266721200 -14400 0 -04} - {1287288000 -10800 1 -03} + {1287288000 -10800 1 -04} {1298170800 -14400 0 -04} - {1318737600 -10800 1 -03} + {1318737600 -10800 1 -04} {1330225200 -14400 0 -04} - {1350792000 -10800 1 -03} + {1350792000 -10800 1 -04} {1361070000 -14400 0 -04} - {1382241600 -10800 1 -03} + {1382241600 -10800 1 -04} {1392519600 -14400 0 -04} - {1413691200 -10800 1 -03} + {1413691200 -10800 1 -04} {1424574000 -14400 0 -04} - {1445140800 -10800 1 -03} + {1445140800 -10800 1 -04} {1456023600 -14400 0 -04} - {1476590400 -10800 1 -03} + {1476590400 -10800 1 -04} {1487473200 -14400 0 -04} - {1508040000 -10800 1 -03} + {1508040000 -10800 1 -04} {1518922800 -14400 0 -04} - {1540094400 -10800 1 -03} + {1541304000 -10800 1 -04} {1550372400 -14400 0 -04} - {1571544000 -10800 1 -03} + {1572753600 -10800 1 -04} {1581822000 -14400 0 -04} - {1602993600 -10800 1 -03} + {1604203200 -10800 1 -04} {1613876400 -14400 0 -04} - {1634443200 -10800 1 -03} + {1636257600 -10800 1 -04} {1645326000 -14400 0 -04} - {1665892800 -10800 1 -03} + {1667707200 -10800 1 -04} {1677380400 -14400 0 -04} - {1697342400 -10800 1 -03} + {1699156800 -10800 1 -04} {1708225200 -14400 0 -04} - {1729396800 -10800 1 -03} + {1730606400 -10800 1 -04} {1739674800 -14400 0 -04} - {1760846400 -10800 1 -03} + {1762056000 -10800 1 -04} {1771729200 -14400 0 -04} - {1792296000 -10800 1 -03} + {1793505600 -10800 1 -04} {1803178800 -14400 0 -04} - {1823745600 -10800 1 -03} + {1825560000 -10800 1 -04} {1834628400 -14400 0 -04} - {1855195200 -10800 1 -03} + {1857009600 -10800 1 -04} {1866078000 -14400 0 -04} - {1887249600 -10800 1 -03} + {1888459200 -10800 1 -04} {1897527600 -14400 0 -04} - {1918699200 -10800 1 -03} + {1919908800 -10800 1 -04} {1928977200 -14400 0 -04} - {1950148800 -10800 1 -03} + {1951358400 -10800 1 -04} {1960426800 -14400 0 -04} - {1981598400 -10800 1 -03} + {1983412800 -10800 1 -04} {1992481200 -14400 0 -04} - {2013048000 -10800 1 -03} + {2014862400 -10800 1 -04} {2024535600 -14400 0 -04} - {2044497600 -10800 1 -03} + {2046312000 -10800 1 -04} {2055380400 -14400 0 -04} - {2076552000 -10800 1 -03} + {2077761600 -10800 1 -04} {2086830000 -14400 0 -04} - {2108001600 -10800 1 -03} + {2109211200 -10800 1 -04} {2118884400 -14400 0 -04} - {2139451200 -10800 1 -03} + {2140660800 -10800 1 -04} {2150334000 -14400 0 -04} - {2170900800 -10800 1 -03} + {2172715200 -10800 1 -04} {2181783600 -14400 0 -04} - {2202350400 -10800 1 -03} + {2204164800 -10800 1 -04} {2213233200 -14400 0 -04} - {2234404800 -10800 1 -03} + {2235614400 -10800 1 -04} {2244682800 -14400 0 -04} - {2265854400 -10800 1 -03} + {2267064000 -10800 1 -04} {2276132400 -14400 0 -04} - {2297304000 -10800 1 -03} + {2298513600 -10800 1 -04} {2307582000 -14400 0 -04} - {2328753600 -10800 1 -03} + {2329963200 -10800 1 -04} {2339636400 -14400 0 -04} - {2360203200 -10800 1 -03} + {2362017600 -10800 1 -04} {2371086000 -14400 0 -04} - {2391652800 -10800 1 -03} + {2393467200 -10800 1 -04} {2402535600 -14400 0 -04} - {2423707200 -10800 1 -03} + {2424916800 -10800 1 -04} {2433985200 -14400 0 -04} - {2455156800 -10800 1 -03} + {2456366400 -10800 1 -04} {2465434800 -14400 0 -04} - {2486606400 -10800 1 -03} + {2487816000 -10800 1 -04} {2497489200 -14400 0 -04} - {2518056000 -10800 1 -03} + {2519870400 -10800 1 -04} {2528938800 -14400 0 -04} - {2549505600 -10800 1 -03} + {2551320000 -10800 1 -04} {2560388400 -14400 0 -04} - {2580955200 -10800 1 -03} + {2582769600 -10800 1 -04} {2591838000 -14400 0 -04} - {2613009600 -10800 1 -03} + {2614219200 -10800 1 -04} {2623287600 -14400 0 -04} - {2644459200 -10800 1 -03} + {2645668800 -10800 1 -04} {2654737200 -14400 0 -04} - {2675908800 -10800 1 -03} + {2677118400 -10800 1 -04} {2686791600 -14400 0 -04} - {2707358400 -10800 1 -03} + {2709172800 -10800 1 -04} {2718241200 -14400 0 -04} - {2738808000 -10800 1 -03} + {2740622400 -10800 1 -04} {2749690800 -14400 0 -04} - {2770862400 -10800 1 -03} + {2772072000 -10800 1 -04} {2781140400 -14400 0 -04} - {2802312000 -10800 1 -03} + {2803521600 -10800 1 -04} {2812590000 -14400 0 -04} - {2833761600 -10800 1 -03} + {2834971200 -10800 1 -04} {2844039600 -14400 0 -04} - {2865211200 -10800 1 -03} + {2867025600 -10800 1 -04} {2876094000 -14400 0 -04} - {2896660800 -10800 1 -03} + {2898475200 -10800 1 -04} {2907543600 -14400 0 -04} - {2928110400 -10800 1 -03} + {2929924800 -10800 1 -04} {2938993200 -14400 0 -04} - {2960164800 -10800 1 -03} + {2961374400 -10800 1 -04} {2970442800 -14400 0 -04} - {2991614400 -10800 1 -03} + {2992824000 -10800 1 -04} {3001892400 -14400 0 -04} - {3023064000 -10800 1 -03} + {3024273600 -10800 1 -04} {3033946800 -14400 0 -04} - {3054513600 -10800 1 -03} + {3056328000 -10800 1 -04} {3065396400 -14400 0 -04} - {3085963200 -10800 1 -03} + {3087777600 -10800 1 -04} {3096846000 -14400 0 -04} - {3118017600 -10800 1 -03} + {3119227200 -10800 1 -04} {3128295600 -14400 0 -04} - {3149467200 -10800 1 -03} + {3150676800 -10800 1 -04} {3159745200 -14400 0 -04} - {3180916800 -10800 1 -03} + {3182126400 -10800 1 -04} {3191194800 -14400 0 -04} - {3212366400 -10800 1 -03} + {3213576000 -10800 1 -04} {3223249200 -14400 0 -04} - {3243816000 -10800 1 -03} + {3245630400 -10800 1 -04} {3254698800 -14400 0 -04} - {3275265600 -10800 1 -03} + {3277080000 -10800 1 -04} {3286148400 -14400 0 -04} - {3307320000 -10800 1 -03} + {3308529600 -10800 1 -04} {3317598000 -14400 0 -04} - {3338769600 -10800 1 -03} + {3339979200 -10800 1 -04} {3349047600 -14400 0 -04} - {3370219200 -10800 1 -03} + {3371428800 -10800 1 -04} {3381102000 -14400 0 -04} - {3401668800 -10800 1 -03} + {3403483200 -10800 1 -04} {3412551600 -14400 0 -04} - {3433118400 -10800 1 -03} + {3434932800 -10800 1 -04} {3444001200 -14400 0 -04} - {3464568000 -10800 1 -03} + {3466382400 -10800 1 -04} {3475450800 -14400 0 -04} - {3496622400 -10800 1 -03} + {3497832000 -10800 1 -04} {3506900400 -14400 0 -04} - {3528072000 -10800 1 -03} + {3529281600 -10800 1 -04} {3538350000 -14400 0 -04} - {3559521600 -10800 1 -03} + {3560731200 -10800 1 -04} {3570404400 -14400 0 -04} - {3590971200 -10800 1 -03} + {3592785600 -10800 1 -04} {3601854000 -14400 0 -04} - {3622420800 -10800 1 -03} + {3624235200 -10800 1 -04} {3633303600 -14400 0 -04} - {3654475200 -10800 1 -03} + {3655684800 -10800 1 -04} {3664753200 -14400 0 -04} - {3685924800 -10800 1 -03} + {3687134400 -10800 1 -04} {3696202800 -14400 0 -04} - {3717374400 -10800 1 -03} + {3718584000 -10800 1 -04} {3727652400 -14400 0 -04} - {3748824000 -10800 1 -03} + {3750638400 -10800 1 -04} {3759706800 -14400 0 -04} - {3780273600 -10800 1 -03} + {3782088000 -10800 1 -04} {3791156400 -14400 0 -04} - {3811723200 -10800 1 -03} + {3813537600 -10800 1 -04} {3822606000 -14400 0 -04} - {3843777600 -10800 1 -03} + {3844987200 -10800 1 -04} {3854055600 -14400 0 -04} - {3875227200 -10800 1 -03} + {3876436800 -10800 1 -04} {3885505200 -14400 0 -04} - {3906676800 -10800 1 -03} + {3907886400 -10800 1 -04} {3917559600 -14400 0 -04} - {3938126400 -10800 1 -03} + {3939940800 -10800 1 -04} {3949009200 -14400 0 -04} - {3969576000 -10800 1 -03} + {3971390400 -10800 1 -04} {3980458800 -14400 0 -04} - {4001630400 -10800 1 -03} + {4002840000 -10800 1 -04} {4011908400 -14400 0 -04} - {4033080000 -10800 1 -03} + {4034289600 -10800 1 -04} {4043358000 -14400 0 -04} - {4064529600 -10800 1 -03} + {4065739200 -10800 1 -04} {4074807600 -14400 0 -04} - {4095979200 -10800 1 -03} + {4097188800 -10800 1 -04} } diff --git a/library/tzdata/America/Eirunepe b/library/tzdata/America/Eirunepe index 41b4cc9..a81b09e 100644 --- a/library/tzdata/America/Eirunepe +++ b/library/tzdata/America/Eirunepe @@ -3,37 +3,37 @@ set TZData(:America/Eirunepe) { {-9223372036854775808 -16768 0 LMT} {-1767208832 -18000 0 -05} - {-1206950400 -14400 1 -04} + {-1206950400 -14400 1 -05} {-1191355200 -18000 0 -05} - {-1175367600 -14400 1 -04} + {-1175367600 -14400 1 -05} {-1159819200 -18000 0 -05} - {-633812400 -14400 1 -04} + {-633812400 -14400 1 -05} {-622062000 -18000 0 -05} - {-602276400 -14400 1 -04} + {-602276400 -14400 1 -05} {-591825600 -18000 0 -05} - {-570740400 -14400 1 -04} + {-570740400 -14400 1 -05} {-560203200 -18000 0 -05} - {-539118000 -14400 1 -04} + {-539118000 -14400 1 -05} {-531345600 -18000 0 -05} - {-191358000 -14400 1 -04} + {-191358000 -14400 1 -05} {-184190400 -18000 0 -05} - {-155156400 -14400 1 -04} + {-155156400 -14400 1 -05} {-150062400 -18000 0 -05} - {-128890800 -14400 1 -04} + {-128890800 -14400 1 -05} {-121118400 -18000 0 -05} - {-99946800 -14400 1 -04} + {-99946800 -14400 1 -05} {-89582400 -18000 0 -05} - {-68410800 -14400 1 -04} + {-68410800 -14400 1 -05} {-57960000 -18000 0 -05} - {499755600 -14400 1 -04} + {499755600 -14400 1 -05} {511243200 -18000 0 -05} - {530600400 -14400 1 -04} + {530600400 -14400 1 -05} {540273600 -18000 0 -05} - {562136400 -14400 1 -04} + {562136400 -14400 1 -05} {571204800 -18000 0 -05} {590040000 -18000 0 -05} {749192400 -18000 0 -05} - {750834000 -14400 1 -04} + {750834000 -14400 1 -05} {761716800 -18000 0 -05} {780206400 -18000 0 -05} {1214283600 -14400 0 -04} diff --git a/library/tzdata/America/Fortaleza b/library/tzdata/America/Fortaleza index 06c7b84..bd806f1 100644 --- a/library/tzdata/America/Fortaleza +++ b/library/tzdata/America/Fortaleza @@ -3,46 +3,46 @@ set TZData(:America/Fortaleza) { {-9223372036854775808 -9240 0 LMT} {-1767216360 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {938660400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {972180000 -10800 0 -03} {1000350000 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} {1033437600 -10800 0 -03} } diff --git a/library/tzdata/America/Grand_Turk b/library/tzdata/America/Grand_Turk index c963adc..da5f09b 100644 --- a/library/tzdata/America/Grand_Turk +++ b/library/tzdata/America/Grand_Turk @@ -2,8 +2,8 @@ set TZData(:America/Grand_Turk) { {-9223372036854775808 -17072 0 LMT} - {-2524504528 -18431 0 KMT} - {-1827687169 -18000 0 EST} + {-2524504528 -18430 0 KMT} + {-1827687170 -18000 0 EST} {284014800 -18000 0 EST} {294217200 -14400 1 EDT} {309938400 -18000 0 EST} diff --git a/library/tzdata/America/Guayaquil b/library/tzdata/America/Guayaquil index 353eb69..6ba7b93 100644 --- a/library/tzdata/America/Guayaquil +++ b/library/tzdata/America/Guayaquil @@ -4,6 +4,6 @@ set TZData(:America/Guayaquil) { {-9223372036854775808 -19160 0 LMT} {-2524502440 -18840 0 QMT} {-1230749160 -18000 0 -05} - {722926800 -14400 1 -04} + {722926800 -14400 1 -05} {728884800 -18000 0 -05} } diff --git a/library/tzdata/America/Jamaica b/library/tzdata/America/Jamaica index f752842..0f758bd 100644 --- a/library/tzdata/America/Jamaica +++ b/library/tzdata/America/Jamaica @@ -1,9 +1,9 @@ # created by tools/tclZIC.tcl - do not edit set TZData(:America/Jamaica) { - {-9223372036854775808 -18431 0 LMT} - {-2524503169 -18431 0 KMT} - {-1827687169 -18000 0 EST} + {-9223372036854775808 -18430 0 LMT} + {-2524503170 -18430 0 KMT} + {-1827687170 -18000 0 EST} {126248400 -18000 0 EST} {126687600 -14400 1 EDT} {152085600 -18000 0 EST} diff --git a/library/tzdata/America/La_Paz b/library/tzdata/America/La_Paz index a245afd..ea2f711 100644 --- a/library/tzdata/America/La_Paz +++ b/library/tzdata/America/La_Paz @@ -3,6 +3,6 @@ set TZData(:America/La_Paz) { {-9223372036854775808 -16356 0 LMT} {-2524505244 -16356 0 CMT} - {-1205954844 -12756 1 BOST} + {-1205954844 -12756 1 BST} {-1192307244 -14400 0 -04} } diff --git a/library/tzdata/America/Lima b/library/tzdata/America/Lima index b224a64..e8b69d6 100644 --- a/library/tzdata/America/Lima +++ b/library/tzdata/America/Lima @@ -3,11 +3,11 @@ set TZData(:America/Lima) { {-9223372036854775808 -18492 0 LMT} {-2524503108 -18516 0 LMT} - {-1938538284 -14400 0 -04} + {-1938538284 -14400 0 -05} {-1002052800 -18000 0 -05} - {-986756400 -14400 1 -04} + {-986756400 -14400 1 -05} {-971035200 -18000 0 -05} - {-955306800 -14400 1 -04} + {-955306800 -14400 1 -05} {-939585600 -18000 0 -05} {512712000 -18000 0 -05} {544248000 -18000 0 -05} diff --git a/library/tzdata/America/Maceio b/library/tzdata/America/Maceio index e6ed548..eab534e 100644 --- a/library/tzdata/America/Maceio +++ b/library/tzdata/America/Maceio @@ -3,50 +3,50 @@ set TZData(:America/Maceio) { {-9223372036854775808 -8572 0 LMT} {-1767217028 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {813553200 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} {841802400 -10800 0 -03} {938660400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {972180000 -10800 0 -03} {1000350000 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} {1033437600 -10800 0 -03} } diff --git a/library/tzdata/America/Manaus b/library/tzdata/America/Manaus index f17023c..a855062 100644 --- a/library/tzdata/America/Manaus +++ b/library/tzdata/America/Manaus @@ -3,37 +3,37 @@ set TZData(:America/Manaus) { {-9223372036854775808 -14404 0 LMT} {-1767211196 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} {749188800 -14400 0 -04} - {750830400 -10800 1 -03} + {750830400 -10800 1 -04} {761713200 -14400 0 -04} {780202800 -14400 0 -04} } diff --git a/library/tzdata/America/Montevideo b/library/tzdata/America/Montevideo index ff85fb3..27fb76e 100644 --- a/library/tzdata/America/Montevideo +++ b/library/tzdata/America/Montevideo @@ -1,96 +1,96 @@ # created by tools/tclZIC.tcl - do not edit set TZData(:America/Montevideo) { - {-9223372036854775808 -13484 0 LMT} - {-2256668116 -13484 0 MMT} - {-1567455316 -12600 0 -0330} - {-1459542600 -10800 1 -03} + {-9223372036854775808 -13491 0 LMT} + {-1942690509 -13491 0 MMT} + {-1567455309 -14400 0 -04} + {-1459627200 -10800 0 -0330} {-1443819600 -12600 0 -0330} - {-1428006600 -10800 1 -03} + {-1428006600 -10800 1 -0330} {-1412283600 -12600 0 -0330} - {-1396470600 -10800 1 -03} + {-1396470600 -10800 1 -0330} {-1380747600 -12600 0 -0330} - {-1141590600 -10800 1 -03} + {-1141590600 -10800 1 -0330} {-1128286800 -12600 0 -0330} - {-1110141000 -10800 1 -03} + {-1110141000 -10800 1 -0330} {-1096837200 -12600 0 -0330} - {-1078691400 -10800 1 -03} + {-1078691400 -10800 1 -0330} {-1065387600 -12600 0 -0330} - {-1046637000 -10800 1 -03} + {-1047241800 -10800 1 -0330} {-1033938000 -12600 0 -0330} - {-1015187400 -10800 1 -03} + {-1015187400 -10800 1 -0330} {-1002488400 -12600 0 -0330} - {-983737800 -10800 1 -03} + {-983737800 -10800 1 -0330} {-971038800 -12600 0 -0330} - {-952288200 -10800 1 -03} + {-954707400 -10800 1 -0330} {-938984400 -12600 0 -0330} - {-920838600 -10800 1 -03} + {-920838600 -10800 1 -0330} {-907534800 -12600 0 -0330} - {-896819400 -10800 1 -03} - {-853623000 -10800 0 -03} - {-853621200 -7200 1 -02} - {-845848800 -10800 0 -03} - {-334789200 -7200 1 -02} - {-319672800 -10800 0 -03} - {-314226000 -7200 1 -02} + {-896819400 -10800 1 -0330} + {-853621200 -9000 0 -03} + {-845847000 -10800 0 -03} + {-334789200 -9000 1 -03} + {-319671000 -10800 0 -03} + {-315608400 -10800 0 -03} + {-314226000 -7200 1 -03} {-309996000 -10800 0 -03} - {-149720400 -7200 1 -02} + {-149720400 -7200 1 -03} {-134604000 -10800 0 -03} - {-118270800 -7200 1 -02} - {-100044000 -10800 0 -03} - {-86821200 -7200 1 -02} - {-68508000 -10800 0 -03} {-63147600 -10800 0 -03} - {-50446800 -9000 1 -0230} - {-34119000 -10800 0 -03} - {-18910800 -9000 1 -0230} - {-2583000 -10800 0 -03} - {12625200 -9000 1 -0230} - {28953000 -10800 0 -03} - {31546800 -10800 0 -03} - {72932400 -7200 1 -02} - {82692000 -10800 0 -03} + {-50446800 -9000 1 -03} + {-34205400 -10800 0 -03} + {10800 -10800 0 -03} + {9860400 -7200 1 -03} + {14176800 -10800 0 -03} + {72846000 -7200 1 -03} + {80100000 -10800 0 -03} {126241200 -10800 0 -03} - {132116400 -9000 1 -0230} - {156909600 -9000 0 -02} - {156911400 -7200 1 -02} - {212983200 -10800 0 -03} - {250052400 -7200 1 -02} - {260244000 -10800 0 -03} - {307594800 -7200 1 -02} - {325994400 -10800 0 -03} - {566449200 -7200 1 -02} - {574308000 -10800 0 -03} - {597812400 -7200 1 -02} - {605671200 -10800 0 -03} - {625633200 -7200 1 -02} - {636516000 -10800 0 -03} - {656478000 -7200 1 -02} + {127278000 -5400 1 -03} + {132112800 -9000 0 -03} + {147234600 -10800 0 -03} + {156909600 -10800 0 -03} + {156913200 -7200 1 -03} + {165376800 -10800 0 -03} + {219812400 -7200 1 -03} + {226461600 -10800 0 -03} + {250052400 -7200 1 -03} + {257911200 -10800 0 -03} + {282711600 -7200 1 -03} + {289360800 -10800 0 -03} + {294202800 -7200 1 -03} + {322020000 -10800 0 -03} + {566449200 -7200 1 -03} + {573012000 -10800 0 -03} + {597812400 -7200 1 -03} + {605066400 -10800 0 -03} + {625633200 -7200 1 -03} + {635911200 -10800 0 -03} + {656478000 -7200 1 -03} {667965600 -10800 0 -03} - {688532400 -7200 1 -02} + {688532400 -7200 1 -03} {699415200 -10800 0 -03} - {719377200 -7200 1 -02} + {719377200 -7200 1 -03} {730864800 -10800 0 -03} - {1095562800 -7200 1 -02} + {1095562800 -7200 1 -03} {1111896000 -10800 0 -03} - {1128834000 -7200 1 -02} + {1128834000 -7200 1 -03} {1142136000 -10800 0 -03} - {1159678800 -7200 1 -02} + {1159678800 -7200 1 -03} {1173585600 -10800 0 -03} - {1191733200 -7200 1 -02} + {1191733200 -7200 1 -03} {1205035200 -10800 0 -03} - {1223182800 -7200 1 -02} + {1223182800 -7200 1 -03} {1236484800 -10800 0 -03} - {1254632400 -7200 1 -02} + {1254632400 -7200 1 -03} {1268539200 -10800 0 -03} - {1286082000 -7200 1 -02} + {1286082000 -7200 1 -03} {1299988800 -10800 0 -03} - {1317531600 -7200 1 -02} + {1317531600 -7200 1 -03} {1331438400 -10800 0 -03} - {1349586000 -7200 1 -02} + {1349586000 -7200 1 -03} {1362888000 -10800 0 -03} - {1381035600 -7200 1 -02} + {1381035600 -7200 1 -03} {1394337600 -10800 0 -03} - {1412485200 -7200 1 -02} + {1412485200 -7200 1 -03} {1425787200 -10800 0 -03} } diff --git a/library/tzdata/America/Noronha b/library/tzdata/America/Noronha index f24b412..01fb745 100644 --- a/library/tzdata/America/Noronha +++ b/library/tzdata/America/Noronha @@ -3,46 +3,46 @@ set TZData(:America/Noronha) { {-9223372036854775808 -7780 0 LMT} {-1767217820 -7200 0 -02} - {-1206961200 -3600 1 -01} + {-1206961200 -3600 1 -02} {-1191366000 -7200 0 -02} - {-1175378400 -3600 1 -01} + {-1175378400 -3600 1 -02} {-1159830000 -7200 0 -02} - {-633823200 -3600 1 -01} + {-633823200 -3600 1 -02} {-622072800 -7200 0 -02} - {-602287200 -3600 1 -01} + {-602287200 -3600 1 -02} {-591836400 -7200 0 -02} - {-570751200 -3600 1 -01} + {-570751200 -3600 1 -02} {-560214000 -7200 0 -02} - {-539128800 -3600 1 -01} + {-539128800 -3600 1 -02} {-531356400 -7200 0 -02} - {-191368800 -3600 1 -01} + {-191368800 -3600 1 -02} {-184201200 -7200 0 -02} - {-155167200 -3600 1 -01} + {-155167200 -3600 1 -02} {-150073200 -7200 0 -02} - {-128901600 -3600 1 -01} + {-128901600 -3600 1 -02} {-121129200 -7200 0 -02} - {-99957600 -3600 1 -01} + {-99957600 -3600 1 -02} {-89593200 -7200 0 -02} - {-68421600 -3600 1 -01} + {-68421600 -3600 1 -02} {-57970800 -7200 0 -02} - {499744800 -3600 1 -01} + {499744800 -3600 1 -02} {511232400 -7200 0 -02} - {530589600 -3600 1 -01} + {530589600 -3600 1 -02} {540262800 -7200 0 -02} - {562125600 -3600 1 -01} + {562125600 -3600 1 -02} {571194000 -7200 0 -02} - {592970400 -3600 1 -01} + {592970400 -3600 1 -02} {602038800 -7200 0 -02} - {624420000 -3600 1 -01} + {624420000 -3600 1 -02} {634698000 -7200 0 -02} {653533200 -7200 0 -02} {938656800 -7200 0 -02} - {938916000 -3600 1 -01} + {938916000 -3600 1 -02} {951613200 -7200 0 -02} - {970970400 -3600 1 -01} + {970970400 -3600 1 -02} {971571600 -7200 0 -02} {1000346400 -7200 0 -02} - {1003024800 -3600 1 -01} + {1003024800 -3600 1 -02} {1013907600 -7200 0 -02} {1033434000 -7200 0 -02} } diff --git a/library/tzdata/America/Porto_Velho b/library/tzdata/America/Porto_Velho index 42566ad..8d7c8fd 100644 --- a/library/tzdata/America/Porto_Velho +++ b/library/tzdata/America/Porto_Velho @@ -3,33 +3,33 @@ set TZData(:America/Porto_Velho) { {-9223372036854775808 -15336 0 LMT} {-1767210264 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} } diff --git a/library/tzdata/America/Punta_Arenas b/library/tzdata/America/Punta_Arenas index 75487e7..5e8202a 100644 --- a/library/tzdata/America/Punta_Arenas +++ b/library/tzdata/America/Punta_Arenas @@ -8,115 +8,115 @@ set TZData(:America/Punta_Arenas) { {-1619205434 -14400 0 -04} {-1593806400 -16966 0 SMT} {-1335986234 -18000 0 -05} - {-1335985200 -14400 1 -04} + {-1335985200 -14400 1 -05} {-1317585600 -18000 0 -05} - {-1304362800 -14400 1 -04} + {-1304362800 -14400 1 -05} {-1286049600 -18000 0 -05} - {-1272826800 -14400 1 -04} + {-1272826800 -14400 1 -05} {-1254513600 -18000 0 -05} - {-1241290800 -14400 1 -04} + {-1241290800 -14400 1 -05} {-1222977600 -18000 0 -05} - {-1209754800 -14400 1 -04} + {-1209754800 -14400 1 -05} {-1191355200 -18000 0 -05} {-1178132400 -14400 0 -04} {-870552000 -18000 0 -05} {-865278000 -14400 0 -04} {-718056000 -18000 0 -05} {-713649600 -14400 0 -04} - {-36619200 -10800 1 -03} + {-36619200 -10800 1 -04} {-23922000 -14400 0 -04} - {-3355200 -10800 1 -03} + {-3355200 -10800 1 -04} {7527600 -14400 0 -04} - {24465600 -10800 1 -03} + {24465600 -10800 1 -04} {37767600 -14400 0 -04} - {55915200 -10800 1 -03} + {55915200 -10800 1 -04} {69217200 -14400 0 -04} - {87969600 -10800 1 -03} + {87969600 -10800 1 -04} {100666800 -14400 0 -04} - {118209600 -10800 1 -03} + {118209600 -10800 1 -04} {132116400 -14400 0 -04} - {150868800 -10800 1 -03} + {150868800 -10800 1 -04} {163566000 -14400 0 -04} - {182318400 -10800 1 -03} + {182318400 -10800 1 -04} {195620400 -14400 0 -04} - {213768000 -10800 1 -03} + {213768000 -10800 1 -04} {227070000 -14400 0 -04} - {245217600 -10800 1 -03} + {245217600 -10800 1 -04} {258519600 -14400 0 -04} - {277272000 -10800 1 -03} + {277272000 -10800 1 -04} {289969200 -14400 0 -04} - {308721600 -10800 1 -03} + {308721600 -10800 1 -04} {321418800 -14400 0 -04} - {340171200 -10800 1 -03} + {340171200 -10800 1 -04} {353473200 -14400 0 -04} - {371620800 -10800 1 -03} + {371620800 -10800 1 -04} {384922800 -14400 0 -04} - {403070400 -10800 1 -03} + {403070400 -10800 1 -04} {416372400 -14400 0 -04} - {434520000 -10800 1 -03} + {434520000 -10800 1 -04} {447822000 -14400 0 -04} - {466574400 -10800 1 -03} + {466574400 -10800 1 -04} {479271600 -14400 0 -04} - {498024000 -10800 1 -03} + {498024000 -10800 1 -04} {510721200 -14400 0 -04} - {529473600 -10800 1 -03} + {529473600 -10800 1 -04} {545194800 -14400 0 -04} - {560923200 -10800 1 -03} + {560923200 -10800 1 -04} {574225200 -14400 0 -04} - {592372800 -10800 1 -03} + {592372800 -10800 1 -04} {605674800 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {637124400 -14400 0 -04} - {653457600 -10800 1 -03} + {653457600 -10800 1 -04} {668574000 -14400 0 -04} - {687326400 -10800 1 -03} + {687326400 -10800 1 -04} {700628400 -14400 0 -04} - {718776000 -10800 1 -03} + {718776000 -10800 1 -04} {732078000 -14400 0 -04} - {750225600 -10800 1 -03} + {750225600 -10800 1 -04} {763527600 -14400 0 -04} - {781675200 -10800 1 -03} + {781675200 -10800 1 -04} {794977200 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {826426800 -14400 0 -04} - {845179200 -10800 1 -03} + {845179200 -10800 1 -04} {859690800 -14400 0 -04} - {876628800 -10800 1 -03} + {876628800 -10800 1 -04} {889930800 -14400 0 -04} - {906868800 -10800 1 -03} + {906868800 -10800 1 -04} {923194800 -14400 0 -04} - {939528000 -10800 1 -03} + {939528000 -10800 1 -04} {952830000 -14400 0 -04} - {971582400 -10800 1 -03} + {971582400 -10800 1 -04} {984279600 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1015729200 -14400 0 -04} - {1034481600 -10800 1 -03} + {1034481600 -10800 1 -04} {1047178800 -14400 0 -04} - {1065931200 -10800 1 -03} + {1065931200 -10800 1 -04} {1079233200 -14400 0 -04} - {1097380800 -10800 1 -03} + {1097380800 -10800 1 -04} {1110682800 -14400 0 -04} - {1128830400 -10800 1 -03} + {1128830400 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1206846000 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1237086000 -14400 0 -04} - {1255233600 -10800 1 -03} + {1255233600 -10800 1 -04} {1270350000 -14400 0 -04} - {1286683200 -10800 1 -03} + {1286683200 -10800 1 -04} {1304823600 -14400 0 -04} - {1313899200 -10800 1 -03} + {1313899200 -10800 1 -04} {1335668400 -14400 0 -04} - {1346558400 -10800 1 -03} + {1346558400 -10800 1 -04} {1367118000 -14400 0 -04} - {1378612800 -10800 1 -03} + {1378612800 -10800 1 -04} {1398567600 -14400 0 -04} - {1410062400 -10800 1 -03} + {1410062400 -10800 1 -04} {1463281200 -14400 0 -04} - {1471147200 -10800 1 -03} + {1471147200 -10800 1 -04} {1480820400 -10800 0 -03} } diff --git a/library/tzdata/America/Recife b/library/tzdata/America/Recife index 8eae571..db0a445 100644 --- a/library/tzdata/America/Recife +++ b/library/tzdata/America/Recife @@ -3,46 +3,46 @@ set TZData(:America/Recife) { {-9223372036854775808 -8376 0 LMT} {-1767217224 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} - {-191365200 -7200 1 -02} + {-191365200 -7200 1 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} {653536800 -10800 0 -03} {938660400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {971575200 -10800 0 -03} {1000350000 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} {1033437600 -10800 0 -03} } diff --git a/library/tzdata/America/Rio_Branco b/library/tzdata/America/Rio_Branco index e3c2f31..088800b 100644 --- a/library/tzdata/America/Rio_Branco +++ b/library/tzdata/America/Rio_Branco @@ -3,33 +3,33 @@ set TZData(:America/Rio_Branco) { {-9223372036854775808 -16272 0 LMT} {-1767209328 -18000 0 -05} - {-1206950400 -14400 1 -04} + {-1206950400 -14400 1 -05} {-1191355200 -18000 0 -05} - {-1175367600 -14400 1 -04} + {-1175367600 -14400 1 -05} {-1159819200 -18000 0 -05} - {-633812400 -14400 1 -04} + {-633812400 -14400 1 -05} {-622062000 -18000 0 -05} - {-602276400 -14400 1 -04} + {-602276400 -14400 1 -05} {-591825600 -18000 0 -05} - {-570740400 -14400 1 -04} + {-570740400 -14400 1 -05} {-560203200 -18000 0 -05} - {-539118000 -14400 1 -04} + {-539118000 -14400 1 -05} {-531345600 -18000 0 -05} - {-191358000 -14400 1 -04} + {-191358000 -14400 1 -05} {-184190400 -18000 0 -05} - {-155156400 -14400 1 -04} + {-155156400 -14400 1 -05} {-150062400 -18000 0 -05} - {-128890800 -14400 1 -04} + {-128890800 -14400 1 -05} {-121118400 -18000 0 -05} - {-99946800 -14400 1 -04} + {-99946800 -14400 1 -05} {-89582400 -18000 0 -05} - {-68410800 -14400 1 -04} + {-68410800 -14400 1 -05} {-57960000 -18000 0 -05} - {499755600 -14400 1 -04} + {499755600 -14400 1 -05} {511243200 -18000 0 -05} - {530600400 -14400 1 -04} + {530600400 -14400 1 -05} {540273600 -18000 0 -05} - {562136400 -14400 1 -04} + {562136400 -14400 1 -05} {571204800 -18000 0 -05} {590040000 -18000 0 -05} {1214283600 -14400 0 -04} diff --git a/library/tzdata/America/Santarem b/library/tzdata/America/Santarem index f81e9b6..5fa3551 100644 --- a/library/tzdata/America/Santarem +++ b/library/tzdata/America/Santarem @@ -3,33 +3,33 @@ set TZData(:America/Santarem) { {-9223372036854775808 -13128 0 LMT} {-1767212472 -14400 0 -04} - {-1206954000 -10800 1 -03} + {-1206954000 -10800 1 -04} {-1191358800 -14400 0 -04} - {-1175371200 -10800 1 -03} + {-1175371200 -10800 1 -04} {-1159822800 -14400 0 -04} - {-633816000 -10800 1 -03} + {-633816000 -10800 1 -04} {-622065600 -14400 0 -04} - {-602280000 -10800 1 -03} + {-602280000 -10800 1 -04} {-591829200 -14400 0 -04} - {-570744000 -10800 1 -03} + {-570744000 -10800 1 -04} {-560206800 -14400 0 -04} - {-539121600 -10800 1 -03} + {-539121600 -10800 1 -04} {-531349200 -14400 0 -04} - {-191361600 -10800 1 -03} + {-191361600 -10800 1 -04} {-184194000 -14400 0 -04} - {-155160000 -10800 1 -03} + {-155160000 -10800 1 -04} {-150066000 -14400 0 -04} - {-128894400 -10800 1 -03} + {-128894400 -10800 1 -04} {-121122000 -14400 0 -04} - {-99950400 -10800 1 -03} + {-99950400 -10800 1 -04} {-89586000 -14400 0 -04} - {-68414400 -10800 1 -03} + {-68414400 -10800 1 -04} {-57963600 -14400 0 -04} - {499752000 -10800 1 -03} + {499752000 -10800 1 -04} {511239600 -14400 0 -04} - {530596800 -10800 1 -03} + {530596800 -10800 1 -04} {540270000 -14400 0 -04} - {562132800 -10800 1 -03} + {562132800 -10800 1 -04} {571201200 -14400 0 -04} {590036400 -14400 0 -04} {1214280000 -10800 0 -03} diff --git a/library/tzdata/America/Santiago b/library/tzdata/America/Santiago index 95e920d..67d5b5c 100644 --- a/library/tzdata/America/Santiago +++ b/library/tzdata/America/Santiago @@ -8,15 +8,15 @@ set TZData(:America/Santiago) { {-1619205434 -14400 0 -04} {-1593806400 -16966 0 SMT} {-1335986234 -18000 0 -05} - {-1335985200 -14400 1 -04} + {-1335985200 -14400 1 -05} {-1317585600 -18000 0 -05} - {-1304362800 -14400 1 -04} + {-1304362800 -14400 1 -05} {-1286049600 -18000 0 -05} - {-1272826800 -14400 1 -04} + {-1272826800 -14400 1 -05} {-1254513600 -18000 0 -05} - {-1241290800 -14400 1 -04} + {-1241290800 -14400 1 -05} {-1222977600 -18000 0 -05} - {-1209754800 -14400 1 -04} + {-1209754800 -14400 1 -05} {-1191355200 -18000 0 -05} {-1178132400 -14400 0 -04} {-870552000 -18000 0 -05} @@ -25,265 +25,265 @@ set TZData(:America/Santiago) { {-736376400 -14400 0 -04} {-718056000 -18000 0 -05} {-713649600 -14400 0 -04} - {-36619200 -10800 1 -03} + {-36619200 -10800 1 -04} {-23922000 -14400 0 -04} - {-3355200 -10800 1 -03} + {-3355200 -10800 1 -04} {7527600 -14400 0 -04} - {24465600 -10800 1 -03} + {24465600 -10800 1 -04} {37767600 -14400 0 -04} - {55915200 -10800 1 -03} + {55915200 -10800 1 -04} {69217200 -14400 0 -04} - {87969600 -10800 1 -03} + {87969600 -10800 1 -04} {100666800 -14400 0 -04} - {118209600 -10800 1 -03} + {118209600 -10800 1 -04} {132116400 -14400 0 -04} - {150868800 -10800 1 -03} + {150868800 -10800 1 -04} {163566000 -14400 0 -04} - {182318400 -10800 1 -03} + {182318400 -10800 1 -04} {195620400 -14400 0 -04} - {213768000 -10800 1 -03} + {213768000 -10800 1 -04} {227070000 -14400 0 -04} - {245217600 -10800 1 -03} + {245217600 -10800 1 -04} {258519600 -14400 0 -04} - {277272000 -10800 1 -03} + {277272000 -10800 1 -04} {289969200 -14400 0 -04} - {308721600 -10800 1 -03} + {308721600 -10800 1 -04} {321418800 -14400 0 -04} - {340171200 -10800 1 -03} + {340171200 -10800 1 -04} {353473200 -14400 0 -04} - {371620800 -10800 1 -03} + {371620800 -10800 1 -04} {384922800 -14400 0 -04} - {403070400 -10800 1 -03} + {403070400 -10800 1 -04} {416372400 -14400 0 -04} - {434520000 -10800 1 -03} + {434520000 -10800 1 -04} {447822000 -14400 0 -04} - {466574400 -10800 1 -03} + {466574400 -10800 1 -04} {479271600 -14400 0 -04} - {498024000 -10800 1 -03} + {498024000 -10800 1 -04} {510721200 -14400 0 -04} - {529473600 -10800 1 -03} + {529473600 -10800 1 -04} {545194800 -14400 0 -04} - {560923200 -10800 1 -03} + {560923200 -10800 1 -04} {574225200 -14400 0 -04} - {592372800 -10800 1 -03} + {592372800 -10800 1 -04} {605674800 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {637124400 -14400 0 -04} - {653457600 -10800 1 -03} + {653457600 -10800 1 -04} {668574000 -14400 0 -04} - {687326400 -10800 1 -03} + {687326400 -10800 1 -04} {700628400 -14400 0 -04} - {718776000 -10800 1 -03} + {718776000 -10800 1 -04} {732078000 -14400 0 -04} - {750225600 -10800 1 -03} + {750225600 -10800 1 -04} {763527600 -14400 0 -04} - {781675200 -10800 1 -03} + {781675200 -10800 1 -04} {794977200 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {826426800 -14400 0 -04} - {845179200 -10800 1 -03} + {845179200 -10800 1 -04} {859690800 -14400 0 -04} - {876628800 -10800 1 -03} + {876628800 -10800 1 -04} {889930800 -14400 0 -04} - {906868800 -10800 1 -03} + {906868800 -10800 1 -04} {923194800 -14400 0 -04} - {939528000 -10800 1 -03} + {939528000 -10800 1 -04} {952830000 -14400 0 -04} - {971582400 -10800 1 -03} + {971582400 -10800 1 -04} {984279600 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1015729200 -14400 0 -04} - {1034481600 -10800 1 -03} + {1034481600 -10800 1 -04} {1047178800 -14400 0 -04} - {1065931200 -10800 1 -03} + {1065931200 -10800 1 -04} {1079233200 -14400 0 -04} - {1097380800 -10800 1 -03} + {1097380800 -10800 1 -04} {1110682800 -14400 0 -04} - {1128830400 -10800 1 -03} + {1128830400 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1206846000 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1237086000 -14400 0 -04} - {1255233600 -10800 1 -03} + {1255233600 -10800 1 -04} {1270350000 -14400 0 -04} - {1286683200 -10800 1 -03} + {1286683200 -10800 1 -04} {1304823600 -14400 0 -04} - {1313899200 -10800 1 -03} + {1313899200 -10800 1 -04} {1335668400 -14400 0 -04} - {1346558400 -10800 1 -03} + {1346558400 -10800 1 -04} {1367118000 -14400 0 -04} - {1378612800 -10800 1 -03} + {1378612800 -10800 1 -04} {1398567600 -14400 0 -04} - {1410062400 -10800 1 -03} + {1410062400 -10800 1 -04} {1463281200 -14400 0 -04} - {1471147200 -10800 1 -03} + {1471147200 -10800 1 -04} {1494730800 -14400 0 -04} - {1502596800 -10800 1 -03} + {1502596800 -10800 1 -04} {1526180400 -14400 0 -04} - {1534046400 -10800 1 -03} + {1534046400 -10800 1 -04} {1557630000 -14400 0 -04} - {1565496000 -10800 1 -03} + {1565496000 -10800 1 -04} {1589079600 -14400 0 -04} - {1596945600 -10800 1 -03} + {1596945600 -10800 1 -04} {1620529200 -14400 0 -04} - {1629000000 -10800 1 -03} + {1629000000 -10800 1 -04} {1652583600 -14400 0 -04} - {1660449600 -10800 1 -03} + {1660449600 -10800 1 -04} {1684033200 -14400 0 -04} - {1691899200 -10800 1 -03} + {1691899200 -10800 1 -04} {1715482800 -14400 0 -04} - {1723348800 -10800 1 -03} + {1723348800 -10800 1 -04} {1746932400 -14400 0 -04} - {1754798400 -10800 1 -03} + {1754798400 -10800 1 -04} {1778382000 -14400 0 -04} - {1786248000 -10800 1 -03} + {1786248000 -10800 1 -04} {1809831600 -14400 0 -04} - {1818302400 -10800 1 -03} + {1818302400 -10800 1 -04} {1841886000 -14400 0 -04} - {1849752000 -10800 1 -03} + {1849752000 -10800 1 -04} {1873335600 -14400 0 -04} - {1881201600 -10800 1 -03} + {1881201600 -10800 1 -04} {1904785200 -14400 0 -04} - {1912651200 -10800 1 -03} + {1912651200 -10800 1 -04} {1936234800 -14400 0 -04} - {1944100800 -10800 1 -03} + {1944100800 -10800 1 -04} {1967684400 -14400 0 -04} - {1976155200 -10800 1 -03} + {1976155200 -10800 1 -04} {1999738800 -14400 0 -04} - {2007604800 -10800 1 -03} + {2007604800 -10800 1 -04} {2031188400 -14400 0 -04} - {2039054400 -10800 1 -03} + {2039054400 -10800 1 -04} {2062638000 -14400 0 -04} - {2070504000 -10800 1 -03} + {2070504000 -10800 1 -04} {2094087600 -14400 0 -04} - {2101953600 -10800 1 -03} + {2101953600 -10800 1 -04} {2125537200 -14400 0 -04} - {2133403200 -10800 1 -03} + {2133403200 -10800 1 -04} {2156986800 -14400 0 -04} - {2165457600 -10800 1 -03} + {2165457600 -10800 1 -04} {2189041200 -14400 0 -04} - {2196907200 -10800 1 -03} + {2196907200 -10800 1 -04} {2220490800 -14400 0 -04} - {2228356800 -10800 1 -03} + {2228356800 -10800 1 -04} {2251940400 -14400 0 -04} - {2259806400 -10800 1 -03} + {2259806400 -10800 1 -04} {2283390000 -14400 0 -04} - {2291256000 -10800 1 -03} + {2291256000 -10800 1 -04} {2314839600 -14400 0 -04} - {2322705600 -10800 1 -03} + {2322705600 -10800 1 -04} {2346894000 -14400 0 -04} - {2354760000 -10800 1 -03} + {2354760000 -10800 1 -04} {2378343600 -14400 0 -04} - {2386209600 -10800 1 -03} + {2386209600 -10800 1 -04} {2409793200 -14400 0 -04} - {2417659200 -10800 1 -03} + {2417659200 -10800 1 -04} {2441242800 -14400 0 -04} - {2449108800 -10800 1 -03} + {2449108800 -10800 1 -04} {2472692400 -14400 0 -04} - {2480558400 -10800 1 -03} + {2480558400 -10800 1 -04} {2504142000 -14400 0 -04} - {2512612800 -10800 1 -03} + {2512612800 -10800 1 -04} {2536196400 -14400 0 -04} - {2544062400 -10800 1 -03} + {2544062400 -10800 1 -04} {2567646000 -14400 0 -04} - {2575512000 -10800 1 -03} + {2575512000 -10800 1 -04} {2599095600 -14400 0 -04} - {2606961600 -10800 1 -03} + {2606961600 -10800 1 -04} {2630545200 -14400 0 -04} - {2638411200 -10800 1 -03} + {2638411200 -10800 1 -04} {2661994800 -14400 0 -04} - {2669860800 -10800 1 -03} + {2669860800 -10800 1 -04} {2693444400 -14400 0 -04} - {2701915200 -10800 1 -03} + {2701915200 -10800 1 -04} {2725498800 -14400 0 -04} - {2733364800 -10800 1 -03} + {2733364800 -10800 1 -04} {2756948400 -14400 0 -04} - {2764814400 -10800 1 -03} + {2764814400 -10800 1 -04} {2788398000 -14400 0 -04} - {2796264000 -10800 1 -03} + {2796264000 -10800 1 -04} {2819847600 -14400 0 -04} - {2827713600 -10800 1 -03} + {2827713600 -10800 1 -04} {2851297200 -14400 0 -04} - {2859768000 -10800 1 -03} + {2859768000 -10800 1 -04} {2883351600 -14400 0 -04} - {2891217600 -10800 1 -03} + {2891217600 -10800 1 -04} {2914801200 -14400 0 -04} - {2922667200 -10800 1 -03} + {2922667200 -10800 1 -04} {2946250800 -14400 0 -04} - {2954116800 -10800 1 -03} + {2954116800 -10800 1 -04} {2977700400 -14400 0 -04} - {2985566400 -10800 1 -03} + {2985566400 -10800 1 -04} {3009150000 -14400 0 -04} - {3017016000 -10800 1 -03} + {3017016000 -10800 1 -04} {3040599600 -14400 0 -04} - {3049070400 -10800 1 -03} + {3049070400 -10800 1 -04} {3072654000 -14400 0 -04} - {3080520000 -10800 1 -03} + {3080520000 -10800 1 -04} {3104103600 -14400 0 -04} - {3111969600 -10800 1 -03} + {3111969600 -10800 1 -04} {3135553200 -14400 0 -04} - {3143419200 -10800 1 -03} + {3143419200 -10800 1 -04} {3167002800 -14400 0 -04} - {3174868800 -10800 1 -03} + {3174868800 -10800 1 -04} {3198452400 -14400 0 -04} - {3206318400 -10800 1 -03} + {3206318400 -10800 1 -04} {3230506800 -14400 0 -04} - {3238372800 -10800 1 -03} + {3238372800 -10800 1 -04} {3261956400 -14400 0 -04} - {3269822400 -10800 1 -03} + {3269822400 -10800 1 -04} {3293406000 -14400 0 -04} - {3301272000 -10800 1 -03} + {3301272000 -10800 1 -04} {3324855600 -14400 0 -04} - {3332721600 -10800 1 -03} + {3332721600 -10800 1 -04} {3356305200 -14400 0 -04} - {3364171200 -10800 1 -03} + {3364171200 -10800 1 -04} {3387754800 -14400 0 -04} - {3396225600 -10800 1 -03} + {3396225600 -10800 1 -04} {3419809200 -14400 0 -04} - {3427675200 -10800 1 -03} + {3427675200 -10800 1 -04} {3451258800 -14400 0 -04} - {3459124800 -10800 1 -03} + {3459124800 -10800 1 -04} {3482708400 -14400 0 -04} - {3490574400 -10800 1 -03} + {3490574400 -10800 1 -04} {3514158000 -14400 0 -04} - {3522024000 -10800 1 -03} + {3522024000 -10800 1 -04} {3545607600 -14400 0 -04} - {3553473600 -10800 1 -03} + {3553473600 -10800 1 -04} {3577057200 -14400 0 -04} - {3585528000 -10800 1 -03} + {3585528000 -10800 1 -04} {3609111600 -14400 0 -04} - {3616977600 -10800 1 -03} + {3616977600 -10800 1 -04} {3640561200 -14400 0 -04} - {3648427200 -10800 1 -03} + {3648427200 -10800 1 -04} {3672010800 -14400 0 -04} - {3679876800 -10800 1 -03} + {3679876800 -10800 1 -04} {3703460400 -14400 0 -04} - {3711326400 -10800 1 -03} + {3711326400 -10800 1 -04} {3734910000 -14400 0 -04} - {3743380800 -10800 1 -03} + {3743380800 -10800 1 -04} {3766964400 -14400 0 -04} - {3774830400 -10800 1 -03} + {3774830400 -10800 1 -04} {3798414000 -14400 0 -04} - {3806280000 -10800 1 -03} + {3806280000 -10800 1 -04} {3829863600 -14400 0 -04} - {3837729600 -10800 1 -03} + {3837729600 -10800 1 -04} {3861313200 -14400 0 -04} - {3869179200 -10800 1 -03} + {3869179200 -10800 1 -04} {3892762800 -14400 0 -04} - {3900628800 -10800 1 -03} + {3900628800 -10800 1 -04} {3924212400 -14400 0 -04} - {3932683200 -10800 1 -03} + {3932683200 -10800 1 -04} {3956266800 -14400 0 -04} - {3964132800 -10800 1 -03} + {3964132800 -10800 1 -04} {3987716400 -14400 0 -04} - {3995582400 -10800 1 -03} + {3995582400 -10800 1 -04} {4019166000 -14400 0 -04} - {4027032000 -10800 1 -03} + {4027032000 -10800 1 -04} {4050615600 -14400 0 -04} - {4058481600 -10800 1 -03} + {4058481600 -10800 1 -04} {4082065200 -14400 0 -04} - {4089931200 -10800 1 -03} + {4089931200 -10800 1 -04} } diff --git a/library/tzdata/America/Sao_Paulo b/library/tzdata/America/Sao_Paulo index a61c638..235f57a 100644 --- a/library/tzdata/America/Sao_Paulo +++ b/library/tzdata/America/Sao_Paulo @@ -3,256 +3,256 @@ set TZData(:America/Sao_Paulo) { {-9223372036854775808 -11188 0 LMT} {-1767214412 -10800 0 -03} - {-1206957600 -7200 1 -02} + {-1206957600 -7200 1 -03} {-1191362400 -10800 0 -03} - {-1175374800 -7200 1 -02} + {-1175374800 -7200 1 -03} {-1159826400 -10800 0 -03} - {-633819600 -7200 1 -02} + {-633819600 -7200 1 -03} {-622069200 -10800 0 -03} - {-602283600 -7200 1 -02} + {-602283600 -7200 1 -03} {-591832800 -10800 0 -03} - {-570747600 -7200 1 -02} + {-570747600 -7200 1 -03} {-560210400 -10800 0 -03} - {-539125200 -7200 1 -02} + {-539125200 -7200 1 -03} {-531352800 -10800 0 -03} {-195429600 -7200 1 -02} {-189381600 -7200 0 -03} {-184197600 -10800 0 -03} - {-155163600 -7200 1 -02} + {-155163600 -7200 1 -03} {-150069600 -10800 0 -03} - {-128898000 -7200 1 -02} + {-128898000 -7200 1 -03} {-121125600 -10800 0 -03} - {-99954000 -7200 1 -02} + {-99954000 -7200 1 -03} {-89589600 -10800 0 -03} - {-68418000 -7200 1 -02} + {-68418000 -7200 1 -03} {-57967200 -10800 0 -03} - {499748400 -7200 1 -02} + {499748400 -7200 1 -03} {511236000 -10800 0 -03} - {530593200 -7200 1 -02} + {530593200 -7200 1 -03} {540266400 -10800 0 -03} - {562129200 -7200 1 -02} + {562129200 -7200 1 -03} {571197600 -10800 0 -03} - {592974000 -7200 1 -02} + {592974000 -7200 1 -03} {602042400 -10800 0 -03} - {624423600 -7200 1 -02} + {624423600 -7200 1 -03} {634701600 -10800 0 -03} - {656478000 -7200 1 -02} + {656478000 -7200 1 -03} {666756000 -10800 0 -03} - {687927600 -7200 1 -02} + {687927600 -7200 1 -03} {697600800 -10800 0 -03} - {719982000 -7200 1 -02} + {719982000 -7200 1 -03} {728445600 -10800 0 -03} - {750826800 -7200 1 -02} + {750826800 -7200 1 -03} {761709600 -10800 0 -03} - {782276400 -7200 1 -02} + {782276400 -7200 1 -03} {793159200 -10800 0 -03} - {813726000 -7200 1 -02} + {813726000 -7200 1 -03} {824004000 -10800 0 -03} - {844570800 -7200 1 -02} + {844570800 -7200 1 -03} {856058400 -10800 0 -03} - {876106800 -7200 1 -02} + {876106800 -7200 1 -03} {888717600 -10800 0 -03} - {908074800 -7200 1 -02} + {908074800 -7200 1 -03} {919562400 -10800 0 -03} - {938919600 -7200 1 -02} + {938919600 -7200 1 -03} {951616800 -10800 0 -03} - {970974000 -7200 1 -02} + {970974000 -7200 1 -03} {982461600 -10800 0 -03} - {1003028400 -7200 1 -02} + {1003028400 -7200 1 -03} {1013911200 -10800 0 -03} - {1036292400 -7200 1 -02} + {1036292400 -7200 1 -03} {1045360800 -10800 0 -03} - {1066532400 -7200 1 -02} + {1066532400 -7200 1 -03} {1076810400 -10800 0 -03} - {1099364400 -7200 1 -02} + {1099364400 -7200 1 -03} {1108864800 -10800 0 -03} - {1129431600 -7200 1 -02} + {1129431600 -7200 1 -03} {1140314400 -10800 0 -03} - {1162695600 -7200 1 -02} + {1162695600 -7200 1 -03} {1172368800 -10800 0 -03} - {1192330800 -7200 1 -02} + {1192330800 -7200 1 -03} {1203213600 -10800 0 -03} - {1224385200 -7200 1 -02} + {1224385200 -7200 1 -03} {1234663200 -10800 0 -03} - {1255834800 -7200 1 -02} + {1255834800 -7200 1 -03} {1266717600 -10800 0 -03} - {1287284400 -7200 1 -02} + {1287284400 -7200 1 -03} {1298167200 -10800 0 -03} - {1318734000 -7200 1 -02} + {1318734000 -7200 1 -03} {1330221600 -10800 0 -03} - {1350788400 -7200 1 -02} + {1350788400 -7200 1 -03} {1361066400 -10800 0 -03} - {1382238000 -7200 1 -02} + {1382238000 -7200 1 -03} {1392516000 -10800 0 -03} - {1413687600 -7200 1 -02} + {1413687600 -7200 1 -03} {1424570400 -10800 0 -03} - {1445137200 -7200 1 -02} + {1445137200 -7200 1 -03} {1456020000 -10800 0 -03} - {1476586800 -7200 1 -02} + {1476586800 -7200 1 -03} {1487469600 -10800 0 -03} - {1508036400 -7200 1 -02} + {1508036400 -7200 1 -03} {1518919200 -10800 0 -03} - {1540090800 -7200 1 -02} + {1541300400 -7200 1 -03} {1550368800 -10800 0 -03} - {1571540400 -7200 1 -02} + {1572750000 -7200 1 -03} {1581818400 -10800 0 -03} - {1602990000 -7200 1 -02} + {1604199600 -7200 1 -03} {1613872800 -10800 0 -03} - {1634439600 -7200 1 -02} + {1636254000 -7200 1 -03} {1645322400 -10800 0 -03} - {1665889200 -7200 1 -02} + {1667703600 -7200 1 -03} {1677376800 -10800 0 -03} - {1697338800 -7200 1 -02} + {1699153200 -7200 1 -03} {1708221600 -10800 0 -03} - {1729393200 -7200 1 -02} + {1730602800 -7200 1 -03} {1739671200 -10800 0 -03} - {1760842800 -7200 1 -02} + {1762052400 -7200 1 -03} {1771725600 -10800 0 -03} - {1792292400 -7200 1 -02} + {1793502000 -7200 1 -03} {1803175200 -10800 0 -03} - {1823742000 -7200 1 -02} + {1825556400 -7200 1 -03} {1834624800 -10800 0 -03} - {1855191600 -7200 1 -02} + {1857006000 -7200 1 -03} {1866074400 -10800 0 -03} - {1887246000 -7200 1 -02} + {1888455600 -7200 1 -03} {1897524000 -10800 0 -03} - {1918695600 -7200 1 -02} + {1919905200 -7200 1 -03} {1928973600 -10800 0 -03} - {1950145200 -7200 1 -02} + {1951354800 -7200 1 -03} {1960423200 -10800 0 -03} - {1981594800 -7200 1 -02} + {1983409200 -7200 1 -03} {1992477600 -10800 0 -03} - {2013044400 -7200 1 -02} + {2014858800 -7200 1 -03} {2024532000 -10800 0 -03} - {2044494000 -7200 1 -02} + {2046308400 -7200 1 -03} {2055376800 -10800 0 -03} - {2076548400 -7200 1 -02} + {2077758000 -7200 1 -03} {2086826400 -10800 0 -03} - {2107998000 -7200 1 -02} + {2109207600 -7200 1 -03} {2118880800 -10800 0 -03} - {2139447600 -7200 1 -02} + {2140657200 -7200 1 -03} {2150330400 -10800 0 -03} - {2170897200 -7200 1 -02} + {2172711600 -7200 1 -03} {2181780000 -10800 0 -03} - {2202346800 -7200 1 -02} + {2204161200 -7200 1 -03} {2213229600 -10800 0 -03} - {2234401200 -7200 1 -02} + {2235610800 -7200 1 -03} {2244679200 -10800 0 -03} - {2265850800 -7200 1 -02} + {2267060400 -7200 1 -03} {2276128800 -10800 0 -03} - {2297300400 -7200 1 -02} + {2298510000 -7200 1 -03} {2307578400 -10800 0 -03} - {2328750000 -7200 1 -02} + {2329959600 -7200 1 -03} {2339632800 -10800 0 -03} - {2360199600 -7200 1 -02} + {2362014000 -7200 1 -03} {2371082400 -10800 0 -03} - {2391649200 -7200 1 -02} + {2393463600 -7200 1 -03} {2402532000 -10800 0 -03} - {2423703600 -7200 1 -02} + {2424913200 -7200 1 -03} {2433981600 -10800 0 -03} - {2455153200 -7200 1 -02} + {2456362800 -7200 1 -03} {2465431200 -10800 0 -03} - {2486602800 -7200 1 -02} + {2487812400 -7200 1 -03} {2497485600 -10800 0 -03} - {2518052400 -7200 1 -02} + {2519866800 -7200 1 -03} {2528935200 -10800 0 -03} - {2549502000 -7200 1 -02} + {2551316400 -7200 1 -03} {2560384800 -10800 0 -03} - {2580951600 -7200 1 -02} + {2582766000 -7200 1 -03} {2591834400 -10800 0 -03} - {2613006000 -7200 1 -02} + {2614215600 -7200 1 -03} {2623284000 -10800 0 -03} - {2644455600 -7200 1 -02} + {2645665200 -7200 1 -03} {2654733600 -10800 0 -03} - {2675905200 -7200 1 -02} + {2677114800 -7200 1 -03} {2686788000 -10800 0 -03} - {2707354800 -7200 1 -02} + {2709169200 -7200 1 -03} {2718237600 -10800 0 -03} - {2738804400 -7200 1 -02} + {2740618800 -7200 1 -03} {2749687200 -10800 0 -03} - {2770858800 -7200 1 -02} + {2772068400 -7200 1 -03} {2781136800 -10800 0 -03} - {2802308400 -7200 1 -02} + {2803518000 -7200 1 -03} {2812586400 -10800 0 -03} - {2833758000 -7200 1 -02} + {2834967600 -7200 1 -03} {2844036000 -10800 0 -03} - {2865207600 -7200 1 -02} + {2867022000 -7200 1 -03} {2876090400 -10800 0 -03} - {2896657200 -7200 1 -02} + {2898471600 -7200 1 -03} {2907540000 -10800 0 -03} - {2928106800 -7200 1 -02} + {2929921200 -7200 1 -03} {2938989600 -10800 0 -03} - {2960161200 -7200 1 -02} + {2961370800 -7200 1 -03} {2970439200 -10800 0 -03} - {2991610800 -7200 1 -02} + {2992820400 -7200 1 -03} {3001888800 -10800 0 -03} - {3023060400 -7200 1 -02} + {3024270000 -7200 1 -03} {3033943200 -10800 0 -03} - {3054510000 -7200 1 -02} + {3056324400 -7200 1 -03} {3065392800 -10800 0 -03} - {3085959600 -7200 1 -02} + {3087774000 -7200 1 -03} {3096842400 -10800 0 -03} - {3118014000 -7200 1 -02} + {3119223600 -7200 1 -03} {3128292000 -10800 0 -03} - {3149463600 -7200 1 -02} + {3150673200 -7200 1 -03} {3159741600 -10800 0 -03} - {3180913200 -7200 1 -02} + {3182122800 -7200 1 -03} {3191191200 -10800 0 -03} - {3212362800 -7200 1 -02} + {3213572400 -7200 1 -03} {3223245600 -10800 0 -03} - {3243812400 -7200 1 -02} + {3245626800 -7200 1 -03} {3254695200 -10800 0 -03} - {3275262000 -7200 1 -02} + {3277076400 -7200 1 -03} {3286144800 -10800 0 -03} - {3307316400 -7200 1 -02} + {3308526000 -7200 1 -03} {3317594400 -10800 0 -03} - {3338766000 -7200 1 -02} + {3339975600 -7200 1 -03} {3349044000 -10800 0 -03} - {3370215600 -7200 1 -02} + {3371425200 -7200 1 -03} {3381098400 -10800 0 -03} - {3401665200 -7200 1 -02} + {3403479600 -7200 1 -03} {3412548000 -10800 0 -03} - {3433114800 -7200 1 -02} + {3434929200 -7200 1 -03} {3443997600 -10800 0 -03} - {3464564400 -7200 1 -02} + {3466378800 -7200 1 -03} {3475447200 -10800 0 -03} - {3496618800 -7200 1 -02} + {3497828400 -7200 1 -03} {3506896800 -10800 0 -03} - {3528068400 -7200 1 -02} + {3529278000 -7200 1 -03} {3538346400 -10800 0 -03} - {3559518000 -7200 1 -02} + {3560727600 -7200 1 -03} {3570400800 -10800 0 -03} - {3590967600 -7200 1 -02} + {3592782000 -7200 1 -03} {3601850400 -10800 0 -03} - {3622417200 -7200 1 -02} + {3624231600 -7200 1 -03} {3633300000 -10800 0 -03} - {3654471600 -7200 1 -02} + {3655681200 -7200 1 -03} {3664749600 -10800 0 -03} - {3685921200 -7200 1 -02} + {3687130800 -7200 1 -03} {3696199200 -10800 0 -03} - {3717370800 -7200 1 -02} + {3718580400 -7200 1 -03} {3727648800 -10800 0 -03} - {3748820400 -7200 1 -02} + {3750634800 -7200 1 -03} {3759703200 -10800 0 -03} - {3780270000 -7200 1 -02} + {3782084400 -7200 1 -03} {3791152800 -10800 0 -03} - {3811719600 -7200 1 -02} + {3813534000 -7200 1 -03} {3822602400 -10800 0 -03} - {3843774000 -7200 1 -02} + {3844983600 -7200 1 -03} {3854052000 -10800 0 -03} - {3875223600 -7200 1 -02} + {3876433200 -7200 1 -03} {3885501600 -10800 0 -03} - {3906673200 -7200 1 -02} + {3907882800 -7200 1 -03} {3917556000 -10800 0 -03} - {3938122800 -7200 1 -02} + {3939937200 -7200 1 -03} {3949005600 -10800 0 -03} - {3969572400 -7200 1 -02} + {3971386800 -7200 1 -03} {3980455200 -10800 0 -03} - {4001626800 -7200 1 -02} + {4002836400 -7200 1 -03} {4011904800 -10800 0 -03} - {4033076400 -7200 1 -02} + {4034286000 -7200 1 -03} {4043354400 -10800 0 -03} - {4064526000 -7200 1 -02} + {4065735600 -7200 1 -03} {4074804000 -10800 0 -03} - {4095975600 -7200 1 -02} + {4097185200 -7200 1 -03} } diff --git a/library/tzdata/Antarctica/Casey b/library/tzdata/Antarctica/Casey index beb0f9e..aa37480 100644 --- a/library/tzdata/Antarctica/Casey +++ b/library/tzdata/Antarctica/Casey @@ -8,4 +8,5 @@ set TZData(:Antarctica/Casey) { {1319738400 39600 0 +11} {1329843600 28800 0 +08} {1477065600 39600 0 +11} + {1520701200 28800 0 +08} } diff --git a/library/tzdata/Antarctica/Palmer b/library/tzdata/Antarctica/Palmer index bb2be4d..f450e3b 100644 --- a/library/tzdata/Antarctica/Palmer +++ b/library/tzdata/Antarctica/Palmer @@ -4,84 +4,84 @@ set TZData(:Antarctica/Palmer) { {-9223372036854775808 0 0 -00} {-157766400 -14400 0 -04} {-152654400 -14400 0 -04} - {-132955200 -10800 1 -03} + {-132955200 -10800 1 -04} {-121122000 -14400 0 -04} - {-101419200 -10800 1 -03} + {-101419200 -10800 1 -04} {-86821200 -14400 0 -04} - {-71092800 -10800 1 -03} + {-71092800 -10800 1 -04} {-54766800 -14400 0 -04} - {-39038400 -10800 1 -03} + {-39038400 -10800 1 -04} {-23317200 -14400 0 -04} {-7588800 -10800 0 -03} - {128142000 -7200 1 -02} + {128142000 -7200 1 -03} {136605600 -10800 0 -03} {389070000 -14400 0 -04} - {403070400 -10800 1 -03} + {403070400 -10800 1 -04} {416372400 -14400 0 -04} - {434520000 -10800 1 -03} + {434520000 -10800 1 -04} {447822000 -14400 0 -04} - {466574400 -10800 1 -03} + {466574400 -10800 1 -04} {479271600 -14400 0 -04} - {498024000 -10800 1 -03} + {498024000 -10800 1 -04} {510721200 -14400 0 -04} - {529473600 -10800 1 -03} + {529473600 -10800 1 -04} {545194800 -14400 0 -04} - {560923200 -10800 1 -03} + {560923200 -10800 1 -04} {574225200 -14400 0 -04} - {592372800 -10800 1 -03} + {592372800 -10800 1 -04} {605674800 -14400 0 -04} - {624427200 -10800 1 -03} + {624427200 -10800 1 -04} {637124400 -14400 0 -04} - {653457600 -10800 1 -03} + {653457600 -10800 1 -04} {668574000 -14400 0 -04} - {687326400 -10800 1 -03} + {687326400 -10800 1 -04} {700628400 -14400 0 -04} - {718776000 -10800 1 -03} + {718776000 -10800 1 -04} {732078000 -14400 0 -04} - {750225600 -10800 1 -03} + {750225600 -10800 1 -04} {763527600 -14400 0 -04} - {781675200 -10800 1 -03} + {781675200 -10800 1 -04} {794977200 -14400 0 -04} - {813729600 -10800 1 -03} + {813729600 -10800 1 -04} {826426800 -14400 0 -04} - {845179200 -10800 1 -03} + {845179200 -10800 1 -04} {859690800 -14400 0 -04} - {876628800 -10800 1 -03} + {876628800 -10800 1 -04} {889930800 -14400 0 -04} - {906868800 -10800 1 -03} + {906868800 -10800 1 -04} {923194800 -14400 0 -04} - {939528000 -10800 1 -03} + {939528000 -10800 1 -04} {952830000 -14400 0 -04} - {971582400 -10800 1 -03} + {971582400 -10800 1 -04} {984279600 -14400 0 -04} - {1003032000 -10800 1 -03} + {1003032000 -10800 1 -04} {1015729200 -14400 0 -04} - {1034481600 -10800 1 -03} + {1034481600 -10800 1 -04} {1047178800 -14400 0 -04} - {1065931200 -10800 1 -03} + {1065931200 -10800 1 -04} {1079233200 -14400 0 -04} - {1097380800 -10800 1 -03} + {1097380800 -10800 1 -04} {1110682800 -14400 0 -04} - {1128830400 -10800 1 -03} + {1128830400 -10800 1 -04} {1142132400 -14400 0 -04} - {1160884800 -10800 1 -03} + {1160884800 -10800 1 -04} {1173582000 -14400 0 -04} - {1192334400 -10800 1 -03} + {1192334400 -10800 1 -04} {1206846000 -14400 0 -04} - {1223784000 -10800 1 -03} + {1223784000 -10800 1 -04} {1237086000 -14400 0 -04} - {1255233600 -10800 1 -03} + {1255233600 -10800 1 -04} {1270350000 -14400 0 -04} - {1286683200 -10800 1 -03} + {1286683200 -10800 1 -04} {1304823600 -14400 0 -04} - {1313899200 -10800 1 -03} + {1313899200 -10800 1 -04} {1335668400 -14400 0 -04} - {1346558400 -10800 1 -03} + {1346558400 -10800 1 -04} {1367118000 -14400 0 -04} - {1378612800 -10800 1 -03} + {1378612800 -10800 1 -04} {1398567600 -14400 0 -04} - {1410062400 -10800 1 -03} + {1410062400 -10800 1 -04} {1463281200 -14400 0 -04} - {1471147200 -10800 1 -03} + {1471147200 -10800 1 -04} {1480820400 -10800 0 -03} } diff --git a/library/tzdata/Asia/Almaty b/library/tzdata/Asia/Almaty index 2b83197..f42935d 100644 --- a/library/tzdata/Asia/Almaty +++ b/library/tzdata/Asia/Almaty @@ -4,54 +4,54 @@ set TZData(:Asia/Almaty) { {-9223372036854775808 18468 0 LMT} {-1441170468 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {686091600 18000 0 +05} {695768400 21600 0 +06} - {701812800 25200 1 +07} + {701812800 25200 1 +06} {717537600 21600 0 +06} - {733262400 25200 1 +07} + {733262400 25200 1 +06} {748987200 21600 0 +06} - {764712000 25200 1 +07} + {764712000 25200 1 +06} {780436800 21600 0 +06} - {796161600 25200 1 +07} + {796161600 25200 1 +06} {811886400 21600 0 +06} - {828216000 25200 1 +07} + {828216000 25200 1 +06} {846360000 21600 0 +06} - {859665600 25200 1 +07} + {859665600 25200 1 +06} {877809600 21600 0 +06} - {891115200 25200 1 +07} + {891115200 25200 1 +06} {909259200 21600 0 +06} - {922564800 25200 1 +07} + {922564800 25200 1 +06} {941313600 21600 0 +06} - {954014400 25200 1 +07} + {954014400 25200 1 +06} {972763200 21600 0 +06} - {985464000 25200 1 +07} + {985464000 25200 1 +06} {1004212800 21600 0 +06} - {1017518400 25200 1 +07} + {1017518400 25200 1 +06} {1035662400 21600 0 +06} - {1048968000 25200 1 +07} + {1048968000 25200 1 +06} {1067112000 21600 0 +06} - {1080417600 25200 1 +07} + {1080417600 25200 1 +06} {1099166400 21600 0 +06} } diff --git a/library/tzdata/Asia/Aqtau b/library/tzdata/Asia/Aqtau index c128b27..41da2ca 100644 --- a/library/tzdata/Asia/Aqtau +++ b/library/tzdata/Asia/Aqtau @@ -6,53 +6,53 @@ set TZData(:Asia/Aqtau) { {-1247544000 18000 0 +05} {370724400 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} - {780440400 18000 0 +05} + {764715600 21600 1 +05} + {780440400 18000 0 +04} {780444000 14400 0 +04} - {796168800 18000 1 +05} + {796168800 18000 1 +04} {811893600 14400 0 +04} - {828223200 18000 1 +05} + {828223200 18000 1 +04} {846367200 14400 0 +04} - {859672800 18000 1 +05} + {859672800 18000 1 +04} {877816800 14400 0 +04} - {891122400 18000 1 +05} + {891122400 18000 1 +04} {909266400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 18000 0 +05} } diff --git a/library/tzdata/Asia/Aqtobe b/library/tzdata/Asia/Aqtobe index 55ef556..2316e68 100644 --- a/library/tzdata/Asia/Aqtobe +++ b/library/tzdata/Asia/Aqtobe @@ -7,52 +7,52 @@ set TZData(:Asia/Aqtobe) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} + {764715600 21600 1 +05} {780440400 18000 0 +05} - {796165200 21600 1 +06} + {796165200 21600 1 +05} {811890000 18000 0 +05} - {828219600 21600 1 +06} + {828219600 21600 1 +05} {846363600 18000 0 +05} - {859669200 21600 1 +06} + {859669200 21600 1 +05} {877813200 18000 0 +05} - {891118800 21600 1 +06} + {891118800 21600 1 +05} {909262800 18000 0 +05} - {922568400 21600 1 +06} + {922568400 21600 1 +05} {941317200 18000 0 +05} - {954018000 21600 1 +06} + {954018000 21600 1 +05} {972766800 18000 0 +05} - {985467600 21600 1 +06} + {985467600 21600 1 +05} {1004216400 18000 0 +05} - {1017522000 21600 1 +06} + {1017522000 21600 1 +05} {1035666000 18000 0 +05} - {1048971600 21600 1 +06} + {1048971600 21600 1 +05} {1067115600 18000 0 +05} - {1080421200 21600 1 +06} + {1080421200 21600 1 +05} {1099170000 18000 0 +05} } diff --git a/library/tzdata/Asia/Ashgabat b/library/tzdata/Asia/Ashgabat index fa6a619..feb7725 100644 --- a/library/tzdata/Asia/Ashgabat +++ b/library/tzdata/Asia/Ashgabat @@ -4,28 +4,28 @@ set TZData(:Asia/Ashgabat) { {-9223372036854775808 14012 0 LMT} {-1441166012 14400 0 +04} {-1247544000 18000 0 +05} - {354913200 21600 1 +06} + {354913200 21600 1 +05} {370720800 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} } diff --git a/library/tzdata/Asia/Atyrau b/library/tzdata/Asia/Atyrau index c31ff11..b6d8253 100644 --- a/library/tzdata/Asia/Atyrau +++ b/library/tzdata/Asia/Atyrau @@ -6,53 +6,53 @@ set TZData(:Asia/Atyrau) { {-1247540400 18000 0 +05} {370724400 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {695772000 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} + {764715600 21600 1 +05} {780440400 18000 0 +05} - {796165200 21600 1 +06} + {796165200 21600 1 +05} {811890000 18000 0 +05} - {828219600 21600 1 +06} + {828219600 21600 1 +05} {846363600 18000 0 +05} - {859669200 21600 1 +06} + {859669200 21600 1 +05} {877813200 18000 0 +05} - {891118800 21600 1 +06} + {891118800 21600 1 +05} {909262800 18000 0 +05} {922568400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 18000 0 +05} } diff --git a/library/tzdata/Asia/Baghdad b/library/tzdata/Asia/Baghdad index 623e310..c76a6a1 100644 --- a/library/tzdata/Asia/Baghdad +++ b/library/tzdata/Asia/Baghdad @@ -4,56 +4,56 @@ set TZData(:Asia/Baghdad) { {-9223372036854775808 10660 0 LMT} {-2524532260 10656 0 BMT} {-1641005856 10800 0 +03} - {389048400 14400 0 +04} - {402264000 10800 0 +04} - {417906000 14400 1 +04} - {433800000 10800 0 +04} - {449614800 14400 1 +04} - {465422400 10800 0 +04} - {481150800 14400 1 +04} - {496792800 10800 0 +04} - {512517600 14400 1 +04} - {528242400 10800 0 +04} - {543967200 14400 1 +04} - {559692000 10800 0 +04} - {575416800 14400 1 +04} - {591141600 10800 0 +04} - {606866400 14400 1 +04} - {622591200 10800 0 +04} - {638316000 14400 1 +04} - {654645600 10800 0 +04} - {670464000 14400 1 +04} - {686275200 10800 0 +04} - {702086400 14400 1 +04} - {717897600 10800 0 +04} - {733622400 14400 1 +04} - {749433600 10800 0 +04} - {765158400 14400 1 +04} - {780969600 10800 0 +04} - {796694400 14400 1 +04} - {812505600 10800 0 +04} - {828316800 14400 1 +04} - {844128000 10800 0 +04} - {859852800 14400 1 +04} - {875664000 10800 0 +04} - {891388800 14400 1 +04} - {907200000 10800 0 +04} - {922924800 14400 1 +04} - {938736000 10800 0 +04} - {954547200 14400 1 +04} - {970358400 10800 0 +04} - {986083200 14400 1 +04} - {1001894400 10800 0 +04} - {1017619200 14400 1 +04} - {1033430400 10800 0 +04} - {1049155200 14400 1 +04} - {1064966400 10800 0 +04} - {1080777600 14400 1 +04} - {1096588800 10800 0 +04} - {1112313600 14400 1 +04} - {1128124800 10800 0 +04} - {1143849600 14400 1 +04} - {1159660800 10800 0 +04} - {1175385600 14400 1 +04} - {1191196800 10800 0 +04} + {389048400 14400 0 +03} + {402264000 10800 0 +03} + {417906000 14400 1 +03} + {433800000 10800 0 +03} + {449614800 14400 1 +03} + {465422400 10800 0 +03} + {481150800 14400 1 +03} + {496792800 10800 0 +03} + {512517600 14400 1 +03} + {528242400 10800 0 +03} + {543967200 14400 1 +03} + {559692000 10800 0 +03} + {575416800 14400 1 +03} + {591141600 10800 0 +03} + {606866400 14400 1 +03} + {622591200 10800 0 +03} + {638316000 14400 1 +03} + {654645600 10800 0 +03} + {670464000 14400 1 +03} + {686275200 10800 0 +03} + {702086400 14400 1 +03} + {717897600 10800 0 +03} + {733622400 14400 1 +03} + {749433600 10800 0 +03} + {765158400 14400 1 +03} + {780969600 10800 0 +03} + {796694400 14400 1 +03} + {812505600 10800 0 +03} + {828316800 14400 1 +03} + {844128000 10800 0 +03} + {859852800 14400 1 +03} + {875664000 10800 0 +03} + {891388800 14400 1 +03} + {907200000 10800 0 +03} + {922924800 14400 1 +03} + {938736000 10800 0 +03} + {954547200 14400 1 +03} + {970358400 10800 0 +03} + {986083200 14400 1 +03} + {1001894400 10800 0 +03} + {1017619200 14400 1 +03} + {1033430400 10800 0 +03} + {1049155200 14400 1 +03} + {1064966400 10800 0 +03} + {1080777600 14400 1 +03} + {1096588800 10800 0 +03} + {1112313600 14400 1 +03} + {1128124800 10800 0 +03} + {1143849600 14400 1 +03} + {1159660800 10800 0 +03} + {1175385600 14400 1 +03} + {1191196800 10800 0 +03} } diff --git a/library/tzdata/Asia/Baku b/library/tzdata/Asia/Baku index f945b89..03dee19 100644 --- a/library/tzdata/Asia/Baku +++ b/library/tzdata/Asia/Baku @@ -4,71 +4,71 @@ set TZData(:Asia/Baku) { {-9223372036854775808 11964 0 LMT} {-1441163964 10800 0 +03} {-405140400 14400 0 +04} - {354916800 18000 1 +05} + {354916800 18000 1 +04} {370724400 14400 0 +04} - {386452800 18000 1 +05} + {386452800 18000 1 +04} {402260400 14400 0 +04} - {417988800 18000 1 +05} + {417988800 18000 1 +04} {433796400 14400 0 +04} - {449611200 18000 1 +05} + {449611200 18000 1 +04} {465343200 14400 0 +04} - {481068000 18000 1 +05} + {481068000 18000 1 +04} {496792800 14400 0 +04} - {512517600 18000 1 +05} + {512517600 18000 1 +04} {528242400 14400 0 +04} - {543967200 18000 1 +05} + {543967200 18000 1 +04} {559692000 14400 0 +04} - {575416800 18000 1 +05} + {575416800 18000 1 +04} {591141600 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} {670370400 10800 0 +03} - {670374000 14400 1 +04} + {670374000 14400 1 +03} {686098800 10800 0 +03} - {701823600 14400 1 +04} + {701823600 14400 1 +03} {717548400 14400 0 +04} {820440000 14400 0 +04} {828234000 18000 1 +05} {846378000 14400 0 +04} {852062400 14400 0 +04} - {859680000 18000 1 +05} + {859680000 18000 1 +04} {877824000 14400 0 +04} - {891129600 18000 1 +05} + {891129600 18000 1 +04} {909273600 14400 0 +04} - {922579200 18000 1 +05} + {922579200 18000 1 +04} {941328000 14400 0 +04} - {954028800 18000 1 +05} + {954028800 18000 1 +04} {972777600 14400 0 +04} - {985478400 18000 1 +05} + {985478400 18000 1 +04} {1004227200 14400 0 +04} - {1017532800 18000 1 +05} + {1017532800 18000 1 +04} {1035676800 14400 0 +04} - {1048982400 18000 1 +05} + {1048982400 18000 1 +04} {1067126400 14400 0 +04} - {1080432000 18000 1 +05} + {1080432000 18000 1 +04} {1099180800 14400 0 +04} - {1111881600 18000 1 +05} + {1111881600 18000 1 +04} {1130630400 14400 0 +04} - {1143331200 18000 1 +05} + {1143331200 18000 1 +04} {1162080000 14400 0 +04} - {1174780800 18000 1 +05} + {1174780800 18000 1 +04} {1193529600 14400 0 +04} - {1206835200 18000 1 +05} + {1206835200 18000 1 +04} {1224979200 14400 0 +04} - {1238284800 18000 1 +05} + {1238284800 18000 1 +04} {1256428800 14400 0 +04} - {1269734400 18000 1 +05} + {1269734400 18000 1 +04} {1288483200 14400 0 +04} - {1301184000 18000 1 +05} + {1301184000 18000 1 +04} {1319932800 14400 0 +04} - {1332633600 18000 1 +05} + {1332633600 18000 1 +04} {1351382400 14400 0 +04} - {1364688000 18000 1 +05} + {1364688000 18000 1 +04} {1382832000 14400 0 +04} - {1396137600 18000 1 +05} + {1396137600 18000 1 +04} {1414281600 14400 0 +04} - {1427587200 18000 1 +05} + {1427587200 18000 1 +04} {1445731200 14400 0 +04} } diff --git a/library/tzdata/Asia/Bishkek b/library/tzdata/Asia/Bishkek index a02d789..bc4cbdd 100644 --- a/library/tzdata/Asia/Bishkek +++ b/library/tzdata/Asia/Bishkek @@ -4,55 +4,55 @@ set TZData(:Asia/Bishkek) { {-9223372036854775808 17904 0 LMT} {-1441169904 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {683586000 18000 0 +05} - {703018800 21600 1 +06} + {703018800 21600 1 +05} {717530400 18000 0 +05} - {734468400 21600 1 +06} + {734468400 21600 1 +05} {748980000 18000 0 +05} - {765918000 21600 1 +06} + {765918000 21600 1 +05} {780429600 18000 0 +05} - {797367600 21600 1 +06} + {797367600 21600 1 +05} {811879200 18000 0 +05} - {828817200 21600 1 +06} + {828817200 21600 1 +05} {843933600 18000 0 +05} - {859671000 21600 1 +06} + {859671000 21600 1 +05} {877811400 18000 0 +05} - {891120600 21600 1 +06} + {891120600 21600 1 +05} {909261000 18000 0 +05} - {922570200 21600 1 +06} + {922570200 21600 1 +05} {941315400 18000 0 +05} - {954019800 21600 1 +06} + {954019800 21600 1 +05} {972765000 18000 0 +05} - {985469400 21600 1 +06} + {985469400 21600 1 +05} {1004214600 18000 0 +05} - {1017523800 21600 1 +06} + {1017523800 21600 1 +05} {1035664200 18000 0 +05} - {1048973400 21600 1 +06} + {1048973400 21600 1 +05} {1067113800 18000 0 +05} - {1080423000 21600 1 +06} + {1080423000 21600 1 +05} {1099168200 18000 0 +05} - {1111872600 21600 1 +06} + {1111872600 21600 1 +05} {1123783200 21600 0 +06} } diff --git a/library/tzdata/Asia/Choibalsan b/library/tzdata/Asia/Choibalsan index 3db65de..b072c76 100644 --- a/library/tzdata/Asia/Choibalsan +++ b/library/tzdata/Asia/Choibalsan @@ -4,53 +4,53 @@ set TZData(:Asia/Choibalsan) { {-9223372036854775808 27480 0 LMT} {-2032933080 25200 0 +07} {252435600 28800 0 +08} - {417974400 36000 0 +10} + {417974400 36000 0 +09} {433778400 32400 0 +09} - {449593200 36000 1 +10} + {449593200 36000 1 +09} {465314400 32400 0 +09} - {481042800 36000 1 +10} + {481042800 36000 1 +09} {496764000 32400 0 +09} - {512492400 36000 1 +10} + {512492400 36000 1 +09} {528213600 32400 0 +09} - {543942000 36000 1 +10} + {543942000 36000 1 +09} {559663200 32400 0 +09} - {575391600 36000 1 +10} + {575391600 36000 1 +09} {591112800 32400 0 +09} - {606841200 36000 1 +10} + {606841200 36000 1 +09} {622562400 32400 0 +09} - {638290800 36000 1 +10} + {638290800 36000 1 +09} {654616800 32400 0 +09} - {670345200 36000 1 +10} + {670345200 36000 1 +09} {686066400 32400 0 +09} - {701794800 36000 1 +10} + {701794800 36000 1 +09} {717516000 32400 0 +09} - {733244400 36000 1 +10} + {733244400 36000 1 +09} {748965600 32400 0 +09} - {764694000 36000 1 +10} + {764694000 36000 1 +09} {780415200 32400 0 +09} - {796143600 36000 1 +10} + {796143600 36000 1 +09} {811864800 32400 0 +09} - {828198000 36000 1 +10} + {828198000 36000 1 +09} {843919200 32400 0 +09} - {859647600 36000 1 +10} + {859647600 36000 1 +09} {875368800 32400 0 +09} - {891097200 36000 1 +10} + {891097200 36000 1 +09} {906818400 32400 0 +09} - {988390800 36000 1 +10} + {988390800 36000 1 +09} {1001692800 32400 0 +09} - {1017421200 36000 1 +10} + {1017421200 36000 1 +09} {1033142400 32400 0 +09} - {1048870800 36000 1 +10} + {1048870800 36000 1 +09} {1064592000 32400 0 +09} - {1080320400 36000 1 +10} + {1080320400 36000 1 +09} {1096041600 32400 0 +09} - {1111770000 36000 1 +10} + {1111770000 36000 1 +09} {1127491200 32400 0 +09} - {1143219600 36000 1 +10} + {1143219600 36000 1 +09} {1159545600 32400 0 +09} {1206889200 28800 0 +08} - {1427479200 32400 1 +09} + {1427479200 32400 1 +08} {1443193200 28800 0 +08} - {1458928800 32400 1 +09} + {1458928800 32400 1 +08} {1474642800 28800 0 +08} } diff --git a/library/tzdata/Asia/Dhaka b/library/tzdata/Asia/Dhaka index 0dc3987..c044095 100644 --- a/library/tzdata/Asia/Dhaka +++ b/library/tzdata/Asia/Dhaka @@ -8,6 +8,6 @@ set TZData(:Asia/Dhaka) { {-862637400 23400 0 +0630} {-576138600 21600 0 +06} {1230746400 21600 0 +06} - {1245430800 25200 1 +07} + {1245430800 25200 1 +06} {1262278800 21600 0 +06} } diff --git a/library/tzdata/Asia/Dushanbe b/library/tzdata/Asia/Dushanbe index e9ed132..fe82ce7 100644 --- a/library/tzdata/Asia/Dushanbe +++ b/library/tzdata/Asia/Dushanbe @@ -4,25 +4,25 @@ set TZData(:Asia/Dushanbe) { {-9223372036854775808 16512 0 LMT} {-1441168512 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 21600 1 +06} {684363600 18000 0 +05} diff --git a/library/tzdata/Asia/Gaza b/library/tzdata/Asia/Gaza index 1149d51..85b9f67 100644 --- a/library/tzdata/Asia/Gaza +++ b/library/tzdata/Asia/Gaza @@ -111,9 +111,9 @@ set TZData(:Asia/Gaza) { {1477692000 7200 0 EET} {1490396400 10800 1 EEST} {1509141600 7200 0 EET} - {1522450800 10800 1 EEST} + {1521846000 10800 1 EEST} {1540591200 7200 0 EET} - {1553900400 10800 1 EEST} + {1553295600 10800 1 EEST} {1572040800 7200 0 EET} {1585350000 10800 1 EEST} {1604095200 7200 0 EET} @@ -123,9 +123,9 @@ set TZData(:Asia/Gaza) { {1666994400 7200 0 EET} {1679698800 10800 1 EEST} {1698444000 7200 0 EET} - {1711753200 10800 1 EEST} + {1711148400 10800 1 EEST} {1729893600 7200 0 EET} - {1743202800 10800 1 EEST} + {1742598000 10800 1 EEST} {1761343200 7200 0 EET} {1774652400 10800 1 EEST} {1793397600 7200 0 EET} @@ -133,11 +133,11 @@ set TZData(:Asia/Gaza) { {1824847200 7200 0 EET} {1837551600 10800 1 EEST} {1856296800 7200 0 EET} - {1869606000 10800 1 EEST} + {1869001200 10800 1 EEST} {1887746400 7200 0 EET} - {1901055600 10800 1 EEST} + {1900450800 10800 1 EEST} {1919196000 7200 0 EET} - {1932505200 10800 1 EEST} + {1931900400 10800 1 EEST} {1950645600 7200 0 EET} {1963954800 10800 1 EEST} {1982700000 7200 0 EET} @@ -145,9 +145,9 @@ set TZData(:Asia/Gaza) { {2014149600 7200 0 EET} {2026854000 10800 1 EEST} {2045599200 7200 0 EET} - {2058908400 10800 1 EEST} + {2058303600 10800 1 EEST} {2077048800 7200 0 EET} - {2090358000 10800 1 EEST} + {2089753200 10800 1 EEST} {2108498400 7200 0 EET} {2121807600 10800 1 EEST} {2140552800 7200 0 EET} @@ -155,11 +155,11 @@ set TZData(:Asia/Gaza) { {2172002400 7200 0 EET} {2184706800 10800 1 EEST} {2203452000 7200 0 EET} - {2216761200 10800 1 EEST} + {2216156400 10800 1 EEST} {2234901600 7200 0 EET} - {2248210800 10800 1 EEST} + {2247606000 10800 1 EEST} {2266351200 7200 0 EET} - {2279660400 10800 1 EEST} + {2279055600 10800 1 EEST} {2297800800 7200 0 EET} {2311110000 10800 1 EEST} {2329855200 7200 0 EET} @@ -167,9 +167,9 @@ set TZData(:Asia/Gaza) { {2361304800 7200 0 EET} {2374009200 10800 1 EEST} {2392754400 7200 0 EET} - {2406063600 10800 1 EEST} + {2405458800 10800 1 EEST} {2424204000 7200 0 EET} - {2437513200 10800 1 EEST} + {2436908400 10800 1 EEST} {2455653600 7200 0 EET} {2468962800 10800 1 EEST} {2487708000 7200 0 EET} @@ -179,9 +179,9 @@ set TZData(:Asia/Gaza) { {2550607200 7200 0 EET} {2563311600 10800 1 EEST} {2582056800 7200 0 EET} - {2595366000 10800 1 EEST} + {2594761200 10800 1 EEST} {2613506400 7200 0 EET} - {2626815600 10800 1 EEST} + {2626210800 10800 1 EEST} {2644956000 7200 0 EET} {2658265200 10800 1 EEST} {2677010400 7200 0 EET} @@ -189,11 +189,11 @@ set TZData(:Asia/Gaza) { {2708460000 7200 0 EET} {2721164400 10800 1 EEST} {2739909600 7200 0 EET} - {2753218800 10800 1 EEST} + {2752614000 10800 1 EEST} {2771359200 7200 0 EET} - {2784668400 10800 1 EEST} + {2784063600 10800 1 EEST} {2802808800 7200 0 EET} - {2816118000 10800 1 EEST} + {2815513200 10800 1 EEST} {2834258400 7200 0 EET} {2847567600 10800 1 EEST} {2866312800 7200 0 EET} @@ -201,9 +201,9 @@ set TZData(:Asia/Gaza) { {2897762400 7200 0 EET} {2910466800 10800 1 EEST} {2929212000 7200 0 EET} - {2942521200 10800 1 EEST} + {2941916400 10800 1 EEST} {2960661600 7200 0 EET} - {2973970800 10800 1 EEST} + {2973366000 10800 1 EEST} {2992111200 7200 0 EET} {3005420400 10800 1 EEST} {3024165600 7200 0 EET} @@ -211,11 +211,11 @@ set TZData(:Asia/Gaza) { {3055615200 7200 0 EET} {3068319600 10800 1 EEST} {3087064800 7200 0 EET} - {3100374000 10800 1 EEST} + {3099769200 10800 1 EEST} {3118514400 7200 0 EET} - {3131823600 10800 1 EEST} + {3131218800 10800 1 EEST} {3149964000 7200 0 EET} - {3163273200 10800 1 EEST} + {3162668400 10800 1 EEST} {3181413600 7200 0 EET} {3194722800 10800 1 EEST} {3213468000 7200 0 EET} @@ -223,9 +223,9 @@ set TZData(:Asia/Gaza) { {3244917600 7200 0 EET} {3257622000 10800 1 EEST} {3276367200 7200 0 EET} - {3289676400 10800 1 EEST} + {3289071600 10800 1 EEST} {3307816800 7200 0 EET} - {3321126000 10800 1 EEST} + {3320521200 10800 1 EEST} {3339266400 7200 0 EET} {3352575600 10800 1 EEST} {3371320800 7200 0 EET} @@ -235,9 +235,9 @@ set TZData(:Asia/Gaza) { {3434220000 7200 0 EET} {3446924400 10800 1 EEST} {3465669600 7200 0 EET} - {3478978800 10800 1 EEST} + {3478374000 10800 1 EEST} {3497119200 7200 0 EET} - {3510428400 10800 1 EEST} + {3509823600 10800 1 EEST} {3528568800 7200 0 EET} {3541878000 10800 1 EEST} {3560623200 7200 0 EET} @@ -245,11 +245,11 @@ set TZData(:Asia/Gaza) { {3592072800 7200 0 EET} {3604777200 10800 1 EEST} {3623522400 7200 0 EET} - {3636831600 10800 1 EEST} + {3636226800 10800 1 EEST} {3654972000 7200 0 EET} - {3668281200 10800 1 EEST} + {3667676400 10800 1 EEST} {3686421600 7200 0 EET} - {3699730800 10800 1 EEST} + {3699126000 10800 1 EEST} {3717871200 7200 0 EET} {3731180400 10800 1 EEST} {3749925600 7200 0 EET} @@ -257,9 +257,9 @@ set TZData(:Asia/Gaza) { {3781375200 7200 0 EET} {3794079600 10800 1 EEST} {3812824800 7200 0 EET} - {3826134000 10800 1 EEST} + {3825529200 10800 1 EEST} {3844274400 7200 0 EET} - {3857583600 10800 1 EEST} + {3856978800 10800 1 EEST} {3875724000 7200 0 EET} {3889033200 10800 1 EEST} {3907778400 7200 0 EET} @@ -267,11 +267,11 @@ set TZData(:Asia/Gaza) { {3939228000 7200 0 EET} {3951932400 10800 1 EEST} {3970677600 7200 0 EET} - {3983986800 10800 1 EEST} + {3983382000 10800 1 EEST} {4002127200 7200 0 EET} - {4015436400 10800 1 EEST} + {4014831600 10800 1 EEST} {4033576800 7200 0 EET} - {4046886000 10800 1 EEST} + {4046281200 10800 1 EEST} {4065026400 7200 0 EET} {4078335600 10800 1 EEST} {4097080800 7200 0 EET} diff --git a/library/tzdata/Asia/Hebron b/library/tzdata/Asia/Hebron index 5d312b8..c0f5447 100644 --- a/library/tzdata/Asia/Hebron +++ b/library/tzdata/Asia/Hebron @@ -110,9 +110,9 @@ set TZData(:Asia/Hebron) { {1477692000 7200 0 EET} {1490396400 10800 1 EEST} {1509141600 7200 0 EET} - {1522450800 10800 1 EEST} + {1521846000 10800 1 EEST} {1540591200 7200 0 EET} - {1553900400 10800 1 EEST} + {1553295600 10800 1 EEST} {1572040800 7200 0 EET} {1585350000 10800 1 EEST} {1604095200 7200 0 EET} @@ -122,9 +122,9 @@ set TZData(:Asia/Hebron) { {1666994400 7200 0 EET} {1679698800 10800 1 EEST} {1698444000 7200 0 EET} - {1711753200 10800 1 EEST} + {1711148400 10800 1 EEST} {1729893600 7200 0 EET} - {1743202800 10800 1 EEST} + {1742598000 10800 1 EEST} {1761343200 7200 0 EET} {1774652400 10800 1 EEST} {1793397600 7200 0 EET} @@ -132,11 +132,11 @@ set TZData(:Asia/Hebron) { {1824847200 7200 0 EET} {1837551600 10800 1 EEST} {1856296800 7200 0 EET} - {1869606000 10800 1 EEST} + {1869001200 10800 1 EEST} {1887746400 7200 0 EET} - {1901055600 10800 1 EEST} + {1900450800 10800 1 EEST} {1919196000 7200 0 EET} - {1932505200 10800 1 EEST} + {1931900400 10800 1 EEST} {1950645600 7200 0 EET} {1963954800 10800 1 EEST} {1982700000 7200 0 EET} @@ -144,9 +144,9 @@ set TZData(:Asia/Hebron) { {2014149600 7200 0 EET} {2026854000 10800 1 EEST} {2045599200 7200 0 EET} - {2058908400 10800 1 EEST} + {2058303600 10800 1 EEST} {2077048800 7200 0 EET} - {2090358000 10800 1 EEST} + {2089753200 10800 1 EEST} {2108498400 7200 0 EET} {2121807600 10800 1 EEST} {2140552800 7200 0 EET} @@ -154,11 +154,11 @@ set TZData(:Asia/Hebron) { {2172002400 7200 0 EET} {2184706800 10800 1 EEST} {2203452000 7200 0 EET} - {2216761200 10800 1 EEST} + {2216156400 10800 1 EEST} {2234901600 7200 0 EET} - {2248210800 10800 1 EEST} + {2247606000 10800 1 EEST} {2266351200 7200 0 EET} - {2279660400 10800 1 EEST} + {2279055600 10800 1 EEST} {2297800800 7200 0 EET} {2311110000 10800 1 EEST} {2329855200 7200 0 EET} @@ -166,9 +166,9 @@ set TZData(:Asia/Hebron) { {2361304800 7200 0 EET} {2374009200 10800 1 EEST} {2392754400 7200 0 EET} - {2406063600 10800 1 EEST} + {2405458800 10800 1 EEST} {2424204000 7200 0 EET} - {2437513200 10800 1 EEST} + {2436908400 10800 1 EEST} {2455653600 7200 0 EET} {2468962800 10800 1 EEST} {2487708000 7200 0 EET} @@ -178,9 +178,9 @@ set TZData(:Asia/Hebron) { {2550607200 7200 0 EET} {2563311600 10800 1 EEST} {2582056800 7200 0 EET} - {2595366000 10800 1 EEST} + {2594761200 10800 1 EEST} {2613506400 7200 0 EET} - {2626815600 10800 1 EEST} + {2626210800 10800 1 EEST} {2644956000 7200 0 EET} {2658265200 10800 1 EEST} {2677010400 7200 0 EET} @@ -188,11 +188,11 @@ set TZData(:Asia/Hebron) { {2708460000 7200 0 EET} {2721164400 10800 1 EEST} {2739909600 7200 0 EET} - {2753218800 10800 1 EEST} + {2752614000 10800 1 EEST} {2771359200 7200 0 EET} - {2784668400 10800 1 EEST} + {2784063600 10800 1 EEST} {2802808800 7200 0 EET} - {2816118000 10800 1 EEST} + {2815513200 10800 1 EEST} {2834258400 7200 0 EET} {2847567600 10800 1 EEST} {2866312800 7200 0 EET} @@ -200,9 +200,9 @@ set TZData(:Asia/Hebron) { {2897762400 7200 0 EET} {2910466800 10800 1 EEST} {2929212000 7200 0 EET} - {2942521200 10800 1 EEST} + {2941916400 10800 1 EEST} {2960661600 7200 0 EET} - {2973970800 10800 1 EEST} + {2973366000 10800 1 EEST} {2992111200 7200 0 EET} {3005420400 10800 1 EEST} {3024165600 7200 0 EET} @@ -210,11 +210,11 @@ set TZData(:Asia/Hebron) { {3055615200 7200 0 EET} {3068319600 10800 1 EEST} {3087064800 7200 0 EET} - {3100374000 10800 1 EEST} + {3099769200 10800 1 EEST} {3118514400 7200 0 EET} - {3131823600 10800 1 EEST} + {3131218800 10800 1 EEST} {3149964000 7200 0 EET} - {3163273200 10800 1 EEST} + {3162668400 10800 1 EEST} {3181413600 7200 0 EET} {3194722800 10800 1 EEST} {3213468000 7200 0 EET} @@ -222,9 +222,9 @@ set TZData(:Asia/Hebron) { {3244917600 7200 0 EET} {3257622000 10800 1 EEST} {3276367200 7200 0 EET} - {3289676400 10800 1 EEST} + {3289071600 10800 1 EEST} {3307816800 7200 0 EET} - {3321126000 10800 1 EEST} + {3320521200 10800 1 EEST} {3339266400 7200 0 EET} {3352575600 10800 1 EEST} {3371320800 7200 0 EET} @@ -234,9 +234,9 @@ set TZData(:Asia/Hebron) { {3434220000 7200 0 EET} {3446924400 10800 1 EEST} {3465669600 7200 0 EET} - {3478978800 10800 1 EEST} + {3478374000 10800 1 EEST} {3497119200 7200 0 EET} - {3510428400 10800 1 EEST} + {3509823600 10800 1 EEST} {3528568800 7200 0 EET} {3541878000 10800 1 EEST} {3560623200 7200 0 EET} @@ -244,11 +244,11 @@ set TZData(:Asia/Hebron) { {3592072800 7200 0 EET} {3604777200 10800 1 EEST} {3623522400 7200 0 EET} - {3636831600 10800 1 EEST} + {3636226800 10800 1 EEST} {3654972000 7200 0 EET} - {3668281200 10800 1 EEST} + {3667676400 10800 1 EEST} {3686421600 7200 0 EET} - {3699730800 10800 1 EEST} + {3699126000 10800 1 EEST} {3717871200 7200 0 EET} {3731180400 10800 1 EEST} {3749925600 7200 0 EET} @@ -256,9 +256,9 @@ set TZData(:Asia/Hebron) { {3781375200 7200 0 EET} {3794079600 10800 1 EEST} {3812824800 7200 0 EET} - {3826134000 10800 1 EEST} + {3825529200 10800 1 EEST} {3844274400 7200 0 EET} - {3857583600 10800 1 EEST} + {3856978800 10800 1 EEST} {3875724000 7200 0 EET} {3889033200 10800 1 EEST} {3907778400 7200 0 EET} @@ -266,11 +266,11 @@ set TZData(:Asia/Hebron) { {3939228000 7200 0 EET} {3951932400 10800 1 EEST} {3970677600 7200 0 EET} - {3983986800 10800 1 EEST} + {3983382000 10800 1 EEST} {4002127200 7200 0 EET} - {4015436400 10800 1 EEST} + {4014831600 10800 1 EEST} {4033576800 7200 0 EET} - {4046886000 10800 1 EEST} + {4046281200 10800 1 EEST} {4065026400 7200 0 EET} {4078335600 10800 1 EEST} {4097080800 7200 0 EET} diff --git a/library/tzdata/Asia/Hovd b/library/tzdata/Asia/Hovd index a9c995b..9b14d5b 100644 --- a/library/tzdata/Asia/Hovd +++ b/library/tzdata/Asia/Hovd @@ -4,52 +4,52 @@ set TZData(:Asia/Hovd) { {-9223372036854775808 21996 0 LMT} {-2032927596 21600 0 +06} {252439200 25200 0 +07} - {417978000 28800 1 +08} + {417978000 28800 1 +07} {433785600 25200 0 +07} - {449600400 28800 1 +08} + {449600400 28800 1 +07} {465321600 25200 0 +07} - {481050000 28800 1 +08} + {481050000 28800 1 +07} {496771200 25200 0 +07} - {512499600 28800 1 +08} + {512499600 28800 1 +07} {528220800 25200 0 +07} - {543949200 28800 1 +08} + {543949200 28800 1 +07} {559670400 25200 0 +07} - {575398800 28800 1 +08} + {575398800 28800 1 +07} {591120000 25200 0 +07} - {606848400 28800 1 +08} + {606848400 28800 1 +07} {622569600 25200 0 +07} - {638298000 28800 1 +08} + {638298000 28800 1 +07} {654624000 25200 0 +07} - {670352400 28800 1 +08} + {670352400 28800 1 +07} {686073600 25200 0 +07} - {701802000 28800 1 +08} + {701802000 28800 1 +07} {717523200 25200 0 +07} - {733251600 28800 1 +08} + {733251600 28800 1 +07} {748972800 25200 0 +07} - {764701200 28800 1 +08} + {764701200 28800 1 +07} {780422400 25200 0 +07} - {796150800 28800 1 +08} + {796150800 28800 1 +07} {811872000 25200 0 +07} - {828205200 28800 1 +08} + {828205200 28800 1 +07} {843926400 25200 0 +07} - {859654800 28800 1 +08} + {859654800 28800 1 +07} {875376000 25200 0 +07} - {891104400 28800 1 +08} + {891104400 28800 1 +07} {906825600 25200 0 +07} - {988398000 28800 1 +08} + {988398000 28800 1 +07} {1001700000 25200 0 +07} - {1017428400 28800 1 +08} + {1017428400 28800 1 +07} {1033149600 25200 0 +07} - {1048878000 28800 1 +08} + {1048878000 28800 1 +07} {1064599200 25200 0 +07} - {1080327600 28800 1 +08} + {1080327600 28800 1 +07} {1096048800 25200 0 +07} - {1111777200 28800 1 +08} + {1111777200 28800 1 +07} {1127498400 25200 0 +07} - {1143226800 28800 1 +08} + {1143226800 28800 1 +07} {1159552800 25200 0 +07} - {1427482800 28800 1 +08} + {1427482800 28800 1 +07} {1443196800 25200 0 +07} - {1458932400 28800 1 +08} + {1458932400 28800 1 +07} {1474646400 25200 0 +07} } diff --git a/library/tzdata/Asia/Kuching b/library/tzdata/Asia/Kuching index d6f5ad4..e5dc1b7 100644 --- a/library/tzdata/Asia/Kuching +++ b/library/tzdata/Asia/Kuching @@ -4,19 +4,19 @@ set TZData(:Asia/Kuching) { {-9223372036854775808 26480 0 LMT} {-1383463280 27000 0 +0730} {-1167636600 28800 0 +08} - {-1082448000 30000 1 +0820} + {-1082448000 30000 1 +08} {-1074586800 28800 0 +08} - {-1050825600 30000 1 +0820} + {-1050825600 30000 1 +08} {-1042964400 28800 0 +08} - {-1019289600 30000 1 +0820} + {-1019289600 30000 1 +08} {-1011428400 28800 0 +08} - {-987753600 30000 1 +0820} + {-987753600 30000 1 +08} {-979892400 28800 0 +08} - {-956217600 30000 1 +0820} + {-956217600 30000 1 +08} {-948356400 28800 0 +08} - {-924595200 30000 1 +0820} + {-924595200 30000 1 +08} {-916734000 28800 0 +08} - {-893059200 30000 1 +0820} + {-893059200 30000 1 +08} {-885198000 28800 0 +08} {-879667200 32400 0 +09} {-767005200 28800 0 +08} diff --git a/library/tzdata/Asia/Macau b/library/tzdata/Asia/Macau index 8458a8a..76a00aa 100644 --- a/library/tzdata/Asia/Macau +++ b/library/tzdata/Asia/Macau @@ -2,7 +2,7 @@ set TZData(:Asia/Macau) { {-9223372036854775808 27260 0 LMT} - {-1830411260 28800 0 CST} + {-1830412800 28800 0 CST} {-277360200 32400 1 CDT} {-257405400 28800 0 CST} {-245910600 32400 1 CDT} diff --git a/library/tzdata/Asia/Manila b/library/tzdata/Asia/Manila index 987919a..b7ffa7a 100644 --- a/library/tzdata/Asia/Manila +++ b/library/tzdata/Asia/Manila @@ -4,12 +4,12 @@ set TZData(:Asia/Manila) { {-9223372036854775808 -57360 0 LMT} {-3944621040 29040 0 LMT} {-2229321840 28800 0 +08} - {-1046678400 32400 1 +09} + {-1046678400 32400 1 +08} {-1038733200 28800 0 +08} {-873273600 32400 0 +09} {-794221200 28800 0 +08} - {-496224000 32400 1 +09} + {-496224000 32400 1 +08} {-489315600 28800 0 +08} - {259344000 32400 1 +09} + {259344000 32400 1 +08} {275151600 28800 0 +08} } diff --git a/library/tzdata/Asia/Oral b/library/tzdata/Asia/Oral index 624a59d..e781b60 100644 --- a/library/tzdata/Asia/Oral +++ b/library/tzdata/Asia/Oral @@ -7,52 +7,52 @@ set TZData(:Asia/Oral) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} {606862800 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {686095200 14400 0 +04} {701816400 14400 0 +04} - {701820000 18000 1 +05} + {701820000 18000 1 +04} {717544800 14400 0 +04} - {733269600 18000 1 +05} + {733269600 18000 1 +04} {748994400 14400 0 +04} - {764719200 18000 1 +05} + {764719200 18000 1 +04} {780444000 14400 0 +04} - {796168800 18000 1 +05} + {796168800 18000 1 +04} {811893600 14400 0 +04} - {828223200 18000 1 +05} + {828223200 18000 1 +04} {846367200 14400 0 +04} - {859672800 18000 1 +05} + {859672800 18000 1 +04} {877816800 14400 0 +04} - {891122400 18000 1 +05} + {891122400 18000 1 +04} {909266400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 18000 0 +05} } diff --git a/library/tzdata/Asia/Pyongyang b/library/tzdata/Asia/Pyongyang index 72e7f23..5746472 100644 --- a/library/tzdata/Asia/Pyongyang +++ b/library/tzdata/Asia/Pyongyang @@ -6,4 +6,5 @@ set TZData(:Asia/Pyongyang) { {-1830414600 32400 0 JST} {-768646800 32400 0 KST} {1439564400 30600 0 KST} + {1525447800 32400 0 KST} } diff --git a/library/tzdata/Asia/Qyzylorda b/library/tzdata/Asia/Qyzylorda index b2e9472..7c6df32 100644 --- a/library/tzdata/Asia/Qyzylorda +++ b/library/tzdata/Asia/Qyzylorda @@ -7,51 +7,51 @@ set TZData(:Asia/Qyzylorda) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} {670366800 14400 0 +04} - {670370400 18000 1 +05} + {670370400 18000 1 +04} {701812800 18000 0 +05} - {701816400 21600 1 +06} + {701816400 21600 1 +05} {717541200 18000 0 +05} - {733266000 21600 1 +06} + {733266000 21600 1 +05} {748990800 18000 0 +05} - {764715600 21600 1 +06} + {764715600 21600 1 +05} {780440400 18000 0 +05} - {796165200 21600 1 +06} + {796165200 21600 1 +05} {811890000 18000 0 +05} - {828219600 21600 1 +06} + {828219600 21600 1 +05} {846363600 18000 0 +05} - {859669200 21600 1 +06} + {859669200 21600 1 +05} {877813200 18000 0 +05} - {891118800 21600 1 +06} + {891118800 21600 1 +05} {909262800 18000 0 +05} - {922568400 21600 1 +06} + {922568400 21600 1 +05} {941317200 18000 0 +05} - {954018000 21600 1 +06} + {954018000 21600 1 +05} {972766800 18000 0 +05} - {985467600 21600 1 +06} + {985467600 21600 1 +05} {1004216400 18000 0 +05} - {1017522000 21600 1 +06} + {1017522000 21600 1 +05} {1035666000 18000 0 +05} - {1048971600 21600 1 +06} + {1048971600 21600 1 +05} {1067115600 18000 0 +05} - {1080421200 21600 1 +06} + {1080421200 21600 1 +05} {1099170000 21600 0 +06} } diff --git a/library/tzdata/Asia/Samarkand b/library/tzdata/Asia/Samarkand index 43ad774..805bab7 100644 --- a/library/tzdata/Asia/Samarkand +++ b/library/tzdata/Asia/Samarkand @@ -7,25 +7,25 @@ set TZData(:Asia/Samarkand) { {354913200 21600 1 +06} {370720800 21600 0 +06} {386445600 18000 0 +05} - {386449200 21600 1 +06} + {386449200 21600 1 +05} {402256800 18000 0 +05} - {417985200 21600 1 +06} + {417985200 21600 1 +05} {433792800 18000 0 +05} - {449607600 21600 1 +06} + {449607600 21600 1 +05} {465339600 18000 0 +05} - {481064400 21600 1 +06} + {481064400 21600 1 +05} {496789200 18000 0 +05} - {512514000 21600 1 +06} + {512514000 21600 1 +05} {528238800 18000 0 +05} - {543963600 21600 1 +06} + {543963600 21600 1 +05} {559688400 18000 0 +05} - {575413200 21600 1 +06} + {575413200 21600 1 +05} {591138000 18000 0 +05} - {606862800 21600 1 +06} + {606862800 21600 1 +05} {622587600 18000 0 +05} - {638312400 21600 1 +06} + {638312400 21600 1 +05} {654642000 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {686091600 18000 0 +05} {694206000 18000 0 +05} } diff --git a/library/tzdata/Asia/Tashkent b/library/tzdata/Asia/Tashkent index 7b6abe4..bd16c91 100644 --- a/library/tzdata/Asia/Tashkent +++ b/library/tzdata/Asia/Tashkent @@ -4,28 +4,28 @@ set TZData(:Asia/Tashkent) { {-9223372036854775808 16631 0 LMT} {-1441168631 18000 0 +05} {-1247547600 21600 0 +06} - {354909600 25200 1 +07} + {354909600 25200 1 +06} {370717200 21600 0 +06} - {386445600 25200 1 +07} + {386445600 25200 1 +06} {402253200 21600 0 +06} - {417981600 25200 1 +07} + {417981600 25200 1 +06} {433789200 21600 0 +06} - {449604000 25200 1 +07} + {449604000 25200 1 +06} {465336000 21600 0 +06} - {481060800 25200 1 +07} + {481060800 25200 1 +06} {496785600 21600 0 +06} - {512510400 25200 1 +07} + {512510400 25200 1 +06} {528235200 21600 0 +06} - {543960000 25200 1 +07} + {543960000 25200 1 +06} {559684800 21600 0 +06} - {575409600 25200 1 +07} + {575409600 25200 1 +06} {591134400 21600 0 +06} - {606859200 25200 1 +07} + {606859200 25200 1 +06} {622584000 21600 0 +06} - {638308800 25200 1 +07} + {638308800 25200 1 +06} {654638400 21600 0 +06} {670363200 18000 0 +05} - {670366800 21600 1 +06} + {670366800 21600 1 +05} {686091600 18000 0 +05} {694206000 18000 0 +05} } diff --git a/library/tzdata/Asia/Tbilisi b/library/tzdata/Asia/Tbilisi index 60d253c..71e7695 100644 --- a/library/tzdata/Asia/Tbilisi +++ b/library/tzdata/Asia/Tbilisi @@ -5,56 +5,56 @@ set TZData(:Asia/Tbilisi) { {-2840151551 10751 0 TBMT} {-1441162751 10800 0 +03} {-405140400 14400 0 +04} - {354916800 18000 1 +05} + {354916800 18000 1 +04} {370724400 14400 0 +04} - {386452800 18000 1 +05} + {386452800 18000 1 +04} {402260400 14400 0 +04} - {417988800 18000 1 +05} + {417988800 18000 1 +04} {433796400 14400 0 +04} - {449611200 18000 1 +05} + {449611200 18000 1 +04} {465343200 14400 0 +04} - {481068000 18000 1 +05} + {481068000 18000 1 +04} {496792800 14400 0 +04} - {512517600 18000 1 +05} + {512517600 18000 1 +04} {528242400 14400 0 +04} - {543967200 18000 1 +05} + {543967200 18000 1 +04} {559692000 14400 0 +04} - {575416800 18000 1 +05} + {575416800 18000 1 +04} {591141600 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} {670370400 10800 0 +03} - {670374000 14400 1 +04} + {670374000 14400 1 +03} {686098800 10800 0 +03} {694213200 10800 0 +03} - {701816400 14400 1 +04} + {701816400 14400 1 +03} {717537600 10800 0 +03} - {733266000 14400 1 +04} + {733266000 14400 1 +03} {748987200 10800 0 +03} - {764715600 14400 1 +04} + {764715600 14400 1 +03} {780440400 14400 0 +04} - {796161600 18000 1 +05} + {796161600 18000 1 +04} {811882800 14400 0 +04} - {828216000 18000 1 +05} + {828216000 18000 1 +04} {846360000 18000 1 +05} - {859662000 18000 0 +05} + {859662000 18000 0 +04} {877806000 14400 0 +04} - {891115200 18000 1 +05} + {891115200 18000 1 +04} {909255600 14400 0 +04} - {922564800 18000 1 +05} + {922564800 18000 1 +04} {941310000 14400 0 +04} - {954014400 18000 1 +05} + {954014400 18000 1 +04} {972759600 14400 0 +04} - {985464000 18000 1 +05} + {985464000 18000 1 +04} {1004209200 14400 0 +04} - {1017518400 18000 1 +05} + {1017518400 18000 1 +04} {1035658800 14400 0 +04} - {1048968000 18000 1 +05} + {1048968000 18000 1 +04} {1067108400 14400 0 +04} - {1080417600 18000 1 +05} - {1088280000 14400 0 +04} + {1080417600 18000 1 +04} + {1088280000 14400 0 +03} {1099177200 10800 0 +03} {1111878000 14400 0 +04} } diff --git a/library/tzdata/Asia/Tehran b/library/tzdata/Asia/Tehran index a8912ce..3d44e42 100644 --- a/library/tzdata/Asia/Tehran +++ b/library/tzdata/Asia/Tehran @@ -4,226 +4,226 @@ set TZData(:Asia/Tehran) { {-9223372036854775808 12344 0 LMT} {-1704165944 12344 0 TMT} {-757394744 12600 0 +0330} - {247177800 14400 0 +05} - {259272000 18000 1 +05} - {277758000 14400 0 +05} - {283982400 12600 0 +0430} - {290809800 16200 1 +0430} - {306531000 12600 0 +0430} - {322432200 16200 1 +0430} - {338499000 12600 0 +0430} - {673216200 16200 1 +0430} - {685481400 12600 0 +0430} - {701209800 16200 1 +0430} - {717103800 12600 0 +0430} - {732745800 16200 1 +0430} - {748639800 12600 0 +0430} - {764281800 16200 1 +0430} - {780175800 12600 0 +0430} - {795817800 16200 1 +0430} - {811711800 12600 0 +0430} - {827353800 16200 1 +0430} - {843247800 12600 0 +0430} - {858976200 16200 1 +0430} - {874870200 12600 0 +0430} - {890512200 16200 1 +0430} - {906406200 12600 0 +0430} - {922048200 16200 1 +0430} - {937942200 12600 0 +0430} - {953584200 16200 1 +0430} - {969478200 12600 0 +0430} - {985206600 16200 1 +0430} - {1001100600 12600 0 +0430} - {1016742600 16200 1 +0430} - {1032636600 12600 0 +0430} - {1048278600 16200 1 +0430} - {1064172600 12600 0 +0430} - {1079814600 16200 1 +0430} - {1095708600 12600 0 +0430} - {1111437000 16200 1 +0430} - {1127331000 12600 0 +0430} - {1206045000 16200 1 +0430} - {1221939000 12600 0 +0430} - {1237667400 16200 1 +0430} - {1253561400 12600 0 +0430} - {1269203400 16200 1 +0430} - {1285097400 12600 0 +0430} - {1300739400 16200 1 +0430} - {1316633400 12600 0 +0430} - {1332275400 16200 1 +0430} - {1348169400 12600 0 +0430} - {1363897800 16200 1 +0430} - {1379791800 12600 0 +0430} - {1395433800 16200 1 +0430} - {1411327800 12600 0 +0430} - {1426969800 16200 1 +0430} - {1442863800 12600 0 +0430} - {1458505800 16200 1 +0430} - {1474399800 12600 0 +0430} - {1490128200 16200 1 +0430} - {1506022200 12600 0 +0430} - {1521664200 16200 1 +0430} - {1537558200 12600 0 +0430} - {1553200200 16200 1 +0430} - {1569094200 12600 0 +0430} - {1584736200 16200 1 +0430} - {1600630200 12600 0 +0430} - {1616358600 16200 1 +0430} - {1632252600 12600 0 +0430} - {1647894600 16200 1 +0430} - {1663788600 12600 0 +0430} - {1679430600 16200 1 +0430} - {1695324600 12600 0 +0430} - {1710966600 16200 1 +0430} - {1726860600 12600 0 +0430} - {1742589000 16200 1 +0430} - {1758483000 12600 0 +0430} - {1774125000 16200 1 +0430} - {1790019000 12600 0 +0430} - {1805661000 16200 1 +0430} - {1821555000 12600 0 +0430} - {1837197000 16200 1 +0430} - {1853091000 12600 0 +0430} - {1868733000 16200 1 +0430} - {1884627000 12600 0 +0430} - {1900355400 16200 1 +0430} - {1916249400 12600 0 +0430} - {1931891400 16200 1 +0430} - {1947785400 12600 0 +0430} - {1963427400 16200 1 +0430} - {1979321400 12600 0 +0430} - {1994963400 16200 1 +0430} - {2010857400 12600 0 +0430} - {2026585800 16200 1 +0430} - {2042479800 12600 0 +0430} - {2058121800 16200 1 +0430} - {2074015800 12600 0 +0430} - {2089657800 16200 1 +0430} - {2105551800 12600 0 +0430} - {2121193800 16200 1 +0430} - {2137087800 12600 0 +0430} - {2152729800 16200 1 +0430} - {2168623800 12600 0 +0430} - {2184265800 16200 1 +0430} - {2200159800 12600 0 +0430} - {2215888200 16200 1 +0430} - {2231782200 12600 0 +0430} - {2247424200 16200 1 +0430} - {2263318200 12600 0 +0430} - {2278960200 16200 1 +0430} - {2294854200 12600 0 +0430} - {2310496200 16200 1 +0430} - {2326390200 12600 0 +0430} - {2342118600 16200 1 +0430} - {2358012600 12600 0 +0430} - {2373654600 16200 1 +0430} - {2389548600 12600 0 +0430} - {2405190600 16200 1 +0430} - {2421084600 12600 0 +0430} - {2436726600 16200 1 +0430} - {2452620600 12600 0 +0430} - {2468349000 16200 1 +0430} - {2484243000 12600 0 +0430} - {2499885000 16200 1 +0430} - {2515779000 12600 0 +0430} - {2531421000 16200 1 +0430} - {2547315000 12600 0 +0430} - {2562957000 16200 1 +0430} - {2578851000 12600 0 +0430} - {2594579400 16200 1 +0430} - {2610473400 12600 0 +0430} - {2626115400 16200 1 +0430} - {2642009400 12600 0 +0430} - {2657651400 16200 1 +0430} - {2673545400 12600 0 +0430} - {2689187400 16200 1 +0430} - {2705081400 12600 0 +0430} - {2720809800 16200 1 +0430} - {2736703800 12600 0 +0430} - {2752345800 16200 1 +0430} - {2768239800 12600 0 +0430} - {2783881800 16200 1 +0430} - {2799775800 12600 0 +0430} - {2815417800 16200 1 +0430} - {2831311800 12600 0 +0430} - {2847040200 16200 1 +0430} - {2862934200 12600 0 +0430} - {2878576200 16200 1 +0430} - {2894470200 12600 0 +0430} - {2910112200 16200 1 +0430} - {2926006200 12600 0 +0430} - {2941648200 16200 1 +0430} - {2957542200 12600 0 +0430} - {2973270600 16200 1 +0430} - {2989164600 12600 0 +0430} - {3004806600 16200 1 +0430} - {3020700600 12600 0 +0430} - {3036342600 16200 1 +0430} - {3052236600 12600 0 +0430} - {3067878600 16200 1 +0430} - {3083772600 12600 0 +0430} - {3099501000 16200 1 +0430} - {3115395000 12600 0 +0430} - {3131037000 16200 1 +0430} - {3146931000 12600 0 +0430} - {3162573000 16200 1 +0430} - {3178467000 12600 0 +0430} - {3194109000 16200 1 +0430} - {3210003000 12600 0 +0430} - {3225731400 16200 1 +0430} - {3241625400 12600 0 +0430} - {3257267400 16200 1 +0430} - {3273161400 12600 0 +0430} - {3288803400 16200 1 +0430} - {3304697400 12600 0 +0430} - {3320339400 16200 1 +0430} - {3336233400 12600 0 +0430} - {3351961800 16200 1 +0430} - {3367855800 12600 0 +0430} - {3383497800 16200 1 +0430} - {3399391800 12600 0 +0430} - {3415033800 16200 1 +0430} - {3430927800 12600 0 +0430} - {3446569800 16200 1 +0430} - {3462463800 12600 0 +0430} - {3478192200 16200 1 +0430} - {3494086200 12600 0 +0430} - {3509728200 16200 1 +0430} - {3525622200 12600 0 +0430} - {3541264200 16200 1 +0430} - {3557158200 12600 0 +0430} - {3572800200 16200 1 +0430} - {3588694200 12600 0 +0430} - {3604422600 16200 1 +0430} - {3620316600 12600 0 +0430} - {3635958600 16200 1 +0430} - {3651852600 12600 0 +0430} - {3667494600 16200 1 +0430} - {3683388600 12600 0 +0430} - {3699030600 16200 1 +0430} - {3714924600 12600 0 +0430} - {3730653000 16200 1 +0430} - {3746547000 12600 0 +0430} - {3762189000 16200 1 +0430} - {3778083000 12600 0 +0430} - {3793725000 16200 1 +0430} - {3809619000 12600 0 +0430} - {3825261000 16200 1 +0430} - {3841155000 12600 0 +0430} - {3856883400 16200 1 +0430} - {3872777400 12600 0 +0430} - {3888419400 16200 1 +0430} - {3904313400 12600 0 +0430} - {3919955400 16200 1 +0430} - {3935849400 12600 0 +0430} - {3951491400 16200 1 +0430} - {3967385400 12600 0 +0430} - {3983113800 16200 1 +0430} - {3999007800 12600 0 +0430} - {4014649800 16200 1 +0430} - {4030543800 12600 0 +0430} - {4046185800 16200 1 +0430} - {4062079800 12600 0 +0430} - {4077721800 16200 1 +0430} - {4093615800 12600 0 +0430} + {247177800 14400 0 +04} + {259272000 18000 1 +04} + {277758000 14400 0 +04} + {283982400 12600 0 +0330} + {290809800 16200 1 +0330} + {306531000 12600 0 +0330} + {322432200 16200 1 +0330} + {338499000 12600 0 +0330} + {673216200 16200 1 +0330} + {685481400 12600 0 +0330} + {701209800 16200 1 +0330} + {717103800 12600 0 +0330} + {732745800 16200 1 +0330} + {748639800 12600 0 +0330} + {764281800 16200 1 +0330} + {780175800 12600 0 +0330} + {795817800 16200 1 +0330} + {811711800 12600 0 +0330} + {827353800 16200 1 +0330} + {843247800 12600 0 +0330} + {858976200 16200 1 +0330} + {874870200 12600 0 +0330} + {890512200 16200 1 +0330} + {906406200 12600 0 +0330} + {922048200 16200 1 +0330} + {937942200 12600 0 +0330} + {953584200 16200 1 +0330} + {969478200 12600 0 +0330} + {985206600 16200 1 +0330} + {1001100600 12600 0 +0330} + {1016742600 16200 1 +0330} + {1032636600 12600 0 +0330} + {1048278600 16200 1 +0330} + {1064172600 12600 0 +0330} + {1079814600 16200 1 +0330} + {1095708600 12600 0 +0330} + {1111437000 16200 1 +0330} + {1127331000 12600 0 +0330} + {1206045000 16200 1 +0330} + {1221939000 12600 0 +0330} + {1237667400 16200 1 +0330} + {1253561400 12600 0 +0330} + {1269203400 16200 1 +0330} + {1285097400 12600 0 +0330} + {1300739400 16200 1 +0330} + {1316633400 12600 0 +0330} + {1332275400 16200 1 +0330} + {1348169400 12600 0 +0330} + {1363897800 16200 1 +0330} + {1379791800 12600 0 +0330} + {1395433800 16200 1 +0330} + {1411327800 12600 0 +0330} + {1426969800 16200 1 +0330} + {1442863800 12600 0 +0330} + {1458505800 16200 1 +0330} + {1474399800 12600 0 +0330} + {1490128200 16200 1 +0330} + {1506022200 12600 0 +0330} + {1521664200 16200 1 +0330} + {1537558200 12600 0 +0330} + {1553200200 16200 1 +0330} + {1569094200 12600 0 +0330} + {1584736200 16200 1 +0330} + {1600630200 12600 0 +0330} + {1616358600 16200 1 +0330} + {1632252600 12600 0 +0330} + {1647894600 16200 1 +0330} + {1663788600 12600 0 +0330} + {1679430600 16200 1 +0330} + {1695324600 12600 0 +0330} + {1710966600 16200 1 +0330} + {1726860600 12600 0 +0330} + {1742589000 16200 1 +0330} + {1758483000 12600 0 +0330} + {1774125000 16200 1 +0330} + {1790019000 12600 0 +0330} + {1805661000 16200 1 +0330} + {1821555000 12600 0 +0330} + {1837197000 16200 1 +0330} + {1853091000 12600 0 +0330} + {1868733000 16200 1 +0330} + {1884627000 12600 0 +0330} + {1900355400 16200 1 +0330} + {1916249400 12600 0 +0330} + {1931891400 16200 1 +0330} + {1947785400 12600 0 +0330} + {1963427400 16200 1 +0330} + {1979321400 12600 0 +0330} + {1994963400 16200 1 +0330} + {2010857400 12600 0 +0330} + {2026585800 16200 1 +0330} + {2042479800 12600 0 +0330} + {2058121800 16200 1 +0330} + {2074015800 12600 0 +0330} + {2089657800 16200 1 +0330} + {2105551800 12600 0 +0330} + {2121193800 16200 1 +0330} + {2137087800 12600 0 +0330} + {2152729800 16200 1 +0330} + {2168623800 12600 0 +0330} + {2184265800 16200 1 +0330} + {2200159800 12600 0 +0330} + {2215888200 16200 1 +0330} + {2231782200 12600 0 +0330} + {2247424200 16200 1 +0330} + {2263318200 12600 0 +0330} + {2278960200 16200 1 +0330} + {2294854200 12600 0 +0330} + {2310496200 16200 1 +0330} + {2326390200 12600 0 +0330} + {2342118600 16200 1 +0330} + {2358012600 12600 0 +0330} + {2373654600 16200 1 +0330} + {2389548600 12600 0 +0330} + {2405190600 16200 1 +0330} + {2421084600 12600 0 +0330} + {2436726600 16200 1 +0330} + {2452620600 12600 0 +0330} + {2468349000 16200 1 +0330} + {2484243000 12600 0 +0330} + {2499885000 16200 1 +0330} + {2515779000 12600 0 +0330} + {2531421000 16200 1 +0330} + {2547315000 12600 0 +0330} + {2562957000 16200 1 +0330} + {2578851000 12600 0 +0330} + {2594579400 16200 1 +0330} + {2610473400 12600 0 +0330} + {2626115400 16200 1 +0330} + {2642009400 12600 0 +0330} + {2657651400 16200 1 +0330} + {2673545400 12600 0 +0330} + {2689187400 16200 1 +0330} + {2705081400 12600 0 +0330} + {2720809800 16200 1 +0330} + {2736703800 12600 0 +0330} + {2752345800 16200 1 +0330} + {2768239800 12600 0 +0330} + {2783881800 16200 1 +0330} + {2799775800 12600 0 +0330} + {2815417800 16200 1 +0330} + {2831311800 12600 0 +0330} + {2847040200 16200 1 +0330} + {2862934200 12600 0 +0330} + {2878576200 16200 1 +0330} + {2894470200 12600 0 +0330} + {2910112200 16200 1 +0330} + {2926006200 12600 0 +0330} + {2941648200 16200 1 +0330} + {2957542200 12600 0 +0330} + {2973270600 16200 1 +0330} + {2989164600 12600 0 +0330} + {3004806600 16200 1 +0330} + {3020700600 12600 0 +0330} + {3036342600 16200 1 +0330} + {3052236600 12600 0 +0330} + {3067878600 16200 1 +0330} + {3083772600 12600 0 +0330} + {3099501000 16200 1 +0330} + {3115395000 12600 0 +0330} + {3131037000 16200 1 +0330} + {3146931000 12600 0 +0330} + {3162573000 16200 1 +0330} + {3178467000 12600 0 +0330} + {3194109000 16200 1 +0330} + {3210003000 12600 0 +0330} + {3225731400 16200 1 +0330} + {3241625400 12600 0 +0330} + {3257267400 16200 1 +0330} + {3273161400 12600 0 +0330} + {3288803400 16200 1 +0330} + {3304697400 12600 0 +0330} + {3320339400 16200 1 +0330} + {3336233400 12600 0 +0330} + {3351961800 16200 1 +0330} + {3367855800 12600 0 +0330} + {3383497800 16200 1 +0330} + {3399391800 12600 0 +0330} + {3415033800 16200 1 +0330} + {3430927800 12600 0 +0330} + {3446569800 16200 1 +0330} + {3462463800 12600 0 +0330} + {3478192200 16200 1 +0330} + {3494086200 12600 0 +0330} + {3509728200 16200 1 +0330} + {3525622200 12600 0 +0330} + {3541264200 16200 1 +0330} + {3557158200 12600 0 +0330} + {3572800200 16200 1 +0330} + {3588694200 12600 0 +0330} + {3604422600 16200 1 +0330} + {3620316600 12600 0 +0330} + {3635958600 16200 1 +0330} + {3651852600 12600 0 +0330} + {3667494600 16200 1 +0330} + {3683388600 12600 0 +0330} + {3699030600 16200 1 +0330} + {3714924600 12600 0 +0330} + {3730653000 16200 1 +0330} + {3746547000 12600 0 +0330} + {3762189000 16200 1 +0330} + {3778083000 12600 0 +0330} + {3793725000 16200 1 +0330} + {3809619000 12600 0 +0330} + {3825261000 16200 1 +0330} + {3841155000 12600 0 +0330} + {3856883400 16200 1 +0330} + {3872777400 12600 0 +0330} + {3888419400 16200 1 +0330} + {3904313400 12600 0 +0330} + {3919955400 16200 1 +0330} + {3935849400 12600 0 +0330} + {3951491400 16200 1 +0330} + {3967385400 12600 0 +0330} + {3983113800 16200 1 +0330} + {3999007800 12600 0 +0330} + {4014649800 16200 1 +0330} + {4030543800 12600 0 +0330} + {4046185800 16200 1 +0330} + {4062079800 12600 0 +0330} + {4077721800 16200 1 +0330} + {4093615800 12600 0 +0330} } diff --git a/library/tzdata/Asia/Tokyo b/library/tzdata/Asia/Tokyo index 10add1c..790df0a 100644 --- a/library/tzdata/Asia/Tokyo +++ b/library/tzdata/Asia/Tokyo @@ -3,12 +3,12 @@ set TZData(:Asia/Tokyo) { {-9223372036854775808 33539 0 LMT} {-2587712400 32400 0 JST} - {-683794800 36000 1 JDT} - {-672393600 32400 0 JST} - {-654764400 36000 1 JDT} - {-640944000 32400 0 JST} - {-620290800 36000 1 JDT} - {-609494400 32400 0 JST} - {-588841200 36000 1 JDT} - {-578044800 32400 0 JST} + {-683802000 36000 1 JDT} + {-672314400 32400 0 JST} + {-654771600 36000 1 JDT} + {-640864800 32400 0 JST} + {-620298000 36000 1 JDT} + {-609415200 32400 0 JST} + {-588848400 36000 1 JDT} + {-577965600 32400 0 JST} } diff --git a/library/tzdata/Asia/Ulaanbaatar b/library/tzdata/Asia/Ulaanbaatar index e0ba7ab..3a33ef9 100644 --- a/library/tzdata/Asia/Ulaanbaatar +++ b/library/tzdata/Asia/Ulaanbaatar @@ -4,52 +4,52 @@ set TZData(:Asia/Ulaanbaatar) { {-9223372036854775808 25652 0 LMT} {-2032931252 25200 0 +07} {252435600 28800 0 +08} - {417974400 32400 1 +09} + {417974400 32400 1 +08} {433782000 28800 0 +08} - {449596800 32400 1 +09} + {449596800 32400 1 +08} {465318000 28800 0 +08} - {481046400 32400 1 +09} + {481046400 32400 1 +08} {496767600 28800 0 +08} - {512496000 32400 1 +09} + {512496000 32400 1 +08} {528217200 28800 0 +08} - {543945600 32400 1 +09} + {543945600 32400 1 +08} {559666800 28800 0 +08} - {575395200 32400 1 +09} + {575395200 32400 1 +08} {591116400 28800 0 +08} - {606844800 32400 1 +09} + {606844800 32400 1 +08} {622566000 28800 0 +08} - {638294400 32400 1 +09} + {638294400 32400 1 +08} {654620400 28800 0 +08} - {670348800 32400 1 +09} + {670348800 32400 1 +08} {686070000 28800 0 +08} - {701798400 32400 1 +09} + {701798400 32400 1 +08} {717519600 28800 0 +08} - {733248000 32400 1 +09} + {733248000 32400 1 +08} {748969200 28800 0 +08} - {764697600 32400 1 +09} + {764697600 32400 1 +08} {780418800 28800 0 +08} - {796147200 32400 1 +09} + {796147200 32400 1 +08} {811868400 28800 0 +08} - {828201600 32400 1 +09} + {828201600 32400 1 +08} {843922800 28800 0 +08} - {859651200 32400 1 +09} + {859651200 32400 1 +08} {875372400 28800 0 +08} - {891100800 32400 1 +09} + {891100800 32400 1 +08} {906822000 28800 0 +08} - {988394400 32400 1 +09} + {988394400 32400 1 +08} {1001696400 28800 0 +08} - {1017424800 32400 1 +09} + {1017424800 32400 1 +08} {1033146000 28800 0 +08} - {1048874400 32400 1 +09} + {1048874400 32400 1 +08} {1064595600 28800 0 +08} - {1080324000 32400 1 +09} + {1080324000 32400 1 +08} {1096045200 28800 0 +08} - {1111773600 32400 1 +09} + {1111773600 32400 1 +08} {1127494800 28800 0 +08} - {1143223200 32400 1 +09} + {1143223200 32400 1 +08} {1159549200 28800 0 +08} - {1427479200 32400 1 +09} + {1427479200 32400 1 +08} {1443193200 28800 0 +08} - {1458928800 32400 1 +09} + {1458928800 32400 1 +08} {1474642800 28800 0 +08} } diff --git a/library/tzdata/Asia/Yerevan b/library/tzdata/Asia/Yerevan index 25a349a..463bed0 100644 --- a/library/tzdata/Asia/Yerevan +++ b/library/tzdata/Asia/Yerevan @@ -4,67 +4,67 @@ set TZData(:Asia/Yerevan) { {-9223372036854775808 10680 0 LMT} {-1441162680 10800 0 +03} {-405140400 14400 0 +04} - {354916800 18000 1 +05} + {354916800 18000 1 +04} {370724400 14400 0 +04} - {386452800 18000 1 +05} + {386452800 18000 1 +04} {402260400 14400 0 +04} - {417988800 18000 1 +05} + {417988800 18000 1 +04} {433796400 14400 0 +04} - {449611200 18000 1 +05} + {449611200 18000 1 +04} {465343200 14400 0 +04} - {481068000 18000 1 +05} + {481068000 18000 1 +04} {496792800 14400 0 +04} - {512517600 18000 1 +05} + {512517600 18000 1 +04} {528242400 14400 0 +04} - {543967200 18000 1 +05} + {543967200 18000 1 +04} {559692000 14400 0 +04} - {575416800 18000 1 +05} + {575416800 18000 1 +04} {591141600 14400 0 +04} - {606866400 18000 1 +05} + {606866400 18000 1 +04} {622591200 14400 0 +04} - {638316000 18000 1 +05} + {638316000 18000 1 +04} {654645600 14400 0 +04} {670370400 10800 0 +03} - {670374000 14400 1 +04} + {670374000 14400 1 +03} {686098800 10800 0 +03} - {701823600 14400 1 +04} + {701823600 14400 1 +03} {717548400 10800 0 +03} - {733273200 14400 1 +04} + {733273200 14400 1 +03} {748998000 10800 0 +03} - {764722800 14400 1 +04} + {764722800 14400 1 +03} {780447600 10800 0 +03} - {796172400 14400 1 +04} + {796172400 14400 1 +03} {811897200 14400 0 +04} {852062400 14400 0 +04} - {859672800 18000 1 +05} + {859672800 18000 1 +04} {877816800 14400 0 +04} - {891122400 18000 1 +05} + {891122400 18000 1 +04} {909266400 14400 0 +04} - {922572000 18000 1 +05} + {922572000 18000 1 +04} {941320800 14400 0 +04} - {954021600 18000 1 +05} + {954021600 18000 1 +04} {972770400 14400 0 +04} - {985471200 18000 1 +05} + {985471200 18000 1 +04} {1004220000 14400 0 +04} - {1017525600 18000 1 +05} + {1017525600 18000 1 +04} {1035669600 14400 0 +04} - {1048975200 18000 1 +05} + {1048975200 18000 1 +04} {1067119200 14400 0 +04} - {1080424800 18000 1 +05} + {1080424800 18000 1 +04} {1099173600 14400 0 +04} - {1111874400 18000 1 +05} + {1111874400 18000 1 +04} {1130623200 14400 0 +04} - {1143324000 18000 1 +05} + {1143324000 18000 1 +04} {1162072800 14400 0 +04} - {1174773600 18000 1 +05} + {1174773600 18000 1 +04} {1193522400 14400 0 +04} - {1206828000 18000 1 +05} + {1206828000 18000 1 +04} {1224972000 14400 0 +04} - {1238277600 18000 1 +05} + {1238277600 18000 1 +04} {1256421600 14400 0 +04} - {1269727200 18000 1 +05} + {1269727200 18000 1 +04} {1288476000 14400 0 +04} {1293825600 14400 0 +04} - {1301176800 18000 1 +05} + {1301176800 18000 1 +04} {1319925600 14400 0 +04} } diff --git a/library/tzdata/Atlantic/Azores b/library/tzdata/Atlantic/Azores index a9bec94..088dd9a 100644 --- a/library/tzdata/Atlantic/Azores +++ b/library/tzdata/Atlantic/Azores @@ -3,7 +3,7 @@ set TZData(:Atlantic/Azores) { {-9223372036854775808 -6160 0 LMT} {-2713904240 -6872 0 HMT} - {-1830377128 -7200 0 -02} + {-1830376800 -7200 0 -02} {-1689548400 -3600 1 -01} {-1677794400 -7200 0 -02} {-1667430000 -3600 1 -01} diff --git a/library/tzdata/Atlantic/Cape_Verde b/library/tzdata/Atlantic/Cape_Verde index 6fc94eb..595db0b 100644 --- a/library/tzdata/Atlantic/Cape_Verde +++ b/library/tzdata/Atlantic/Cape_Verde @@ -2,7 +2,7 @@ set TZData(:Atlantic/Cape_Verde) { {-9223372036854775808 -5644 0 LMT} - {-1988144756 -7200 0 -02} + {-1830376800 -7200 0 -02} {-862610400 -3600 1 -01} {-764118000 -7200 0 -02} {186120000 -3600 0 -01} diff --git a/library/tzdata/Atlantic/Madeira b/library/tzdata/Atlantic/Madeira index cc5e5f8..fed9c19 100644 --- a/library/tzdata/Atlantic/Madeira +++ b/library/tzdata/Atlantic/Madeira @@ -3,7 +3,7 @@ set TZData(:Atlantic/Madeira) { {-9223372036854775808 -4056 0 LMT} {-2713906344 -4056 0 FMT} - {-1830379944 -3600 0 -01} + {-1830380400 -3600 0 -01} {-1689552000 0 1 +00} {-1677798000 -3600 0 -01} {-1667433600 0 1 +00} diff --git a/library/tzdata/Atlantic/Reykjavik b/library/tzdata/Atlantic/Reykjavik index 5555460..6270572 100644 --- a/library/tzdata/Atlantic/Reykjavik +++ b/library/tzdata/Atlantic/Reykjavik @@ -3,71 +3,71 @@ set TZData(:Atlantic/Reykjavik) { {-9223372036854775808 -5280 0 LMT} {-1956609120 -3600 0 -01} - {-1668211200 0 1 +00} + {-1668211200 0 1 -01} {-1647212400 -3600 0 -01} - {-1636675200 0 1 +00} + {-1636675200 0 1 -01} {-1613430000 -3600 0 -01} - {-1605139200 0 1 +00} + {-1605139200 0 1 -01} {-1581894000 -3600 0 -01} - {-1539561600 0 1 +00} + {-1539561600 0 1 -01} {-1531350000 -3600 0 -01} - {-968025600 0 1 +00} + {-968025600 0 1 -01} {-952293600 -3600 0 -01} - {-942008400 0 1 +00} + {-942008400 0 1 -01} {-920239200 -3600 0 -01} - {-909957600 0 1 +00} + {-909957600 0 1 -01} {-888789600 -3600 0 -01} - {-877903200 0 1 +00} + {-877903200 0 1 -01} {-857944800 -3600 0 -01} - {-846453600 0 1 +00} + {-846453600 0 1 -01} {-826495200 -3600 0 -01} - {-815004000 0 1 +00} + {-815004000 0 1 -01} {-795045600 -3600 0 -01} - {-783554400 0 1 +00} + {-783554400 0 1 -01} {-762991200 -3600 0 -01} - {-752104800 0 1 +00} + {-752104800 0 1 -01} {-731541600 -3600 0 -01} - {-717631200 0 1 +00} + {-717631200 0 1 -01} {-700092000 -3600 0 -01} - {-686181600 0 1 +00} + {-686181600 0 1 -01} {-668642400 -3600 0 -01} - {-654732000 0 1 +00} + {-654732000 0 1 -01} {-636588000 -3600 0 -01} - {-623282400 0 1 +00} + {-623282400 0 1 -01} {-605743200 -3600 0 -01} - {-591832800 0 1 +00} + {-591832800 0 1 -01} {-573688800 -3600 0 -01} - {-559778400 0 1 +00} + {-559778400 0 1 -01} {-542239200 -3600 0 -01} - {-528328800 0 1 +00} + {-528328800 0 1 -01} {-510789600 -3600 0 -01} - {-496879200 0 1 +00} + {-496879200 0 1 -01} {-479340000 -3600 0 -01} - {-465429600 0 1 +00} + {-465429600 0 1 -01} {-447890400 -3600 0 -01} - {-433980000 0 1 +00} + {-433980000 0 1 -01} {-415836000 -3600 0 -01} - {-401925600 0 1 +00} + {-401925600 0 1 -01} {-384386400 -3600 0 -01} - {-370476000 0 1 +00} + {-370476000 0 1 -01} {-352936800 -3600 0 -01} - {-339026400 0 1 +00} + {-339026400 0 1 -01} {-321487200 -3600 0 -01} - {-307576800 0 1 +00} + {-307576800 0 1 -01} {-290037600 -3600 0 -01} - {-276127200 0 1 +00} + {-276127200 0 1 -01} {-258588000 -3600 0 -01} - {-244677600 0 1 +00} + {-244677600 0 1 -01} {-226533600 -3600 0 -01} - {-212623200 0 1 +00} + {-212623200 0 1 -01} {-195084000 -3600 0 -01} - {-181173600 0 1 +00} + {-181173600 0 1 -01} {-163634400 -3600 0 -01} - {-149724000 0 1 +00} + {-149724000 0 1 -01} {-132184800 -3600 0 -01} - {-118274400 0 1 +00} + {-118274400 0 1 -01} {-100735200 -3600 0 -01} - {-86824800 0 1 +00} + {-86824800 0 1 -01} {-68680800 -3600 0 -01} {-54770400 0 0 GMT} } diff --git a/library/tzdata/Atlantic/Stanley b/library/tzdata/Atlantic/Stanley index 5210832..48473ca 100644 --- a/library/tzdata/Atlantic/Stanley +++ b/library/tzdata/Atlantic/Stanley @@ -4,72 +4,72 @@ set TZData(:Atlantic/Stanley) { {-9223372036854775808 -13884 0 LMT} {-2524507716 -13884 0 SMT} {-1824235716 -14400 0 -04} - {-1018209600 -10800 1 -03} + {-1018209600 -10800 1 -04} {-1003093200 -14400 0 -04} - {-986760000 -10800 1 -03} + {-986760000 -10800 1 -04} {-971643600 -14400 0 -04} - {-954705600 -10800 1 -03} + {-954705600 -10800 1 -04} {-939589200 -14400 0 -04} - {-923256000 -10800 1 -03} + {-923256000 -10800 1 -04} {-908139600 -14400 0 -04} - {-891806400 -10800 1 -03} + {-891806400 -10800 1 -04} {-876690000 -14400 0 -04} - {-860356800 -10800 1 -03} + {-860356800 -10800 1 -04} {420606000 -7200 0 -03} - {433303200 -7200 1 -02} + {433303200 -7200 1 -03} {452052000 -10800 0 -03} - {464151600 -7200 1 -02} + {464151600 -7200 1 -03} {483501600 -10800 0 -03} {495597600 -14400 0 -04} - {495604800 -10800 1 -03} + {495604800 -10800 1 -04} {514350000 -14400 0 -04} - {527054400 -10800 1 -03} + {527054400 -10800 1 -04} {545799600 -14400 0 -04} - {558504000 -10800 1 -03} + {558504000 -10800 1 -04} {577249200 -14400 0 -04} - {589953600 -10800 1 -03} + {589953600 -10800 1 -04} {608698800 -14400 0 -04} - {621403200 -10800 1 -03} + {621403200 -10800 1 -04} {640753200 -14400 0 -04} - {652852800 -10800 1 -03} + {652852800 -10800 1 -04} {672202800 -14400 0 -04} - {684907200 -10800 1 -03} + {684907200 -10800 1 -04} {703652400 -14400 0 -04} - {716356800 -10800 1 -03} + {716356800 -10800 1 -04} {735102000 -14400 0 -04} - {747806400 -10800 1 -03} + {747806400 -10800 1 -04} {766551600 -14400 0 -04} - {779256000 -10800 1 -03} + {779256000 -10800 1 -04} {798001200 -14400 0 -04} - {810705600 -10800 1 -03} + {810705600 -10800 1 -04} {830055600 -14400 0 -04} - {842760000 -10800 1 -03} + {842760000 -10800 1 -04} {861505200 -14400 0 -04} - {874209600 -10800 1 -03} + {874209600 -10800 1 -04} {892954800 -14400 0 -04} - {905659200 -10800 1 -03} + {905659200 -10800 1 -04} {924404400 -14400 0 -04} - {937108800 -10800 1 -03} + {937108800 -10800 1 -04} {955854000 -14400 0 -04} - {968558400 -10800 1 -03} + {968558400 -10800 1 -04} {987310800 -14400 0 -04} - {999410400 -10800 1 -03} + {999410400 -10800 1 -04} {1019365200 -14400 0 -04} - {1030860000 -10800 1 -03} + {1030860000 -10800 1 -04} {1050814800 -14400 0 -04} - {1062914400 -10800 1 -03} + {1062914400 -10800 1 -04} {1082264400 -14400 0 -04} - {1094364000 -10800 1 -03} + {1094364000 -10800 1 -04} {1113714000 -14400 0 -04} - {1125813600 -10800 1 -03} + {1125813600 -10800 1 -04} {1145163600 -14400 0 -04} - {1157263200 -10800 1 -03} + {1157263200 -10800 1 -04} {1176613200 -14400 0 -04} - {1188712800 -10800 1 -03} + {1188712800 -10800 1 -04} {1208667600 -14400 0 -04} - {1220767200 -10800 1 -03} + {1220767200 -10800 1 -04} {1240117200 -14400 0 -04} - {1252216800 -10800 1 -03} + {1252216800 -10800 1 -04} {1271566800 -14400 0 -04} {1283662800 -10800 0 -03} } diff --git a/library/tzdata/Australia/Lord_Howe b/library/tzdata/Australia/Lord_Howe index 0e2405e..c595967 100644 --- a/library/tzdata/Australia/Lord_Howe +++ b/library/tzdata/Australia/Lord_Howe @@ -3,243 +3,243 @@ set TZData(:Australia/Lord_Howe) { {-9223372036854775808 38180 0 LMT} {-2364114980 36000 0 AEST} - {352216800 37800 0 +1130} - {372785400 41400 1 +1130} - {384273000 37800 0 +1130} - {404839800 41400 1 +1130} - {415722600 37800 0 +1130} - {436289400 41400 1 +1130} - {447172200 37800 0 +1130} - {467739000 41400 1 +1130} - {478621800 37800 0 +1130} - {488984400 37800 0 +11} - {499188600 39600 1 +11} - {511282800 37800 0 +11} - {530033400 39600 1 +11} - {542732400 37800 0 +11} - {562087800 39600 1 +11} - {574786800 37800 0 +11} - {594142200 39600 1 +11} - {606236400 37800 0 +11} - {625591800 39600 1 +11} - {636476400 37800 0 +11} - {657041400 39600 1 +11} - {667926000 37800 0 +11} - {688491000 39600 1 +11} - {699375600 37800 0 +11} - {719940600 39600 1 +11} - {731430000 37800 0 +11} - {751995000 39600 1 +11} - {762879600 37800 0 +11} - {783444600 39600 1 +11} - {794329200 37800 0 +11} - {814894200 39600 1 +11} - {828198000 37800 0 +11} - {846343800 39600 1 +11} - {859647600 37800 0 +11} - {877793400 39600 1 +11} - {891097200 37800 0 +11} - {909243000 39600 1 +11} - {922546800 37800 0 +11} - {941297400 39600 1 +11} - {953996400 37800 0 +11} - {967303800 39600 1 +11} - {985446000 37800 0 +11} - {1004196600 39600 1 +11} - {1017500400 37800 0 +11} - {1035646200 39600 1 +11} - {1048950000 37800 0 +11} - {1067095800 39600 1 +11} - {1080399600 37800 0 +11} - {1099150200 39600 1 +11} - {1111849200 37800 0 +11} - {1130599800 39600 1 +11} - {1143903600 37800 0 +11} - {1162049400 39600 1 +11} - {1174748400 37800 0 +11} - {1193499000 39600 1 +11} - {1207407600 37800 0 +11} - {1223134200 39600 1 +11} - {1238857200 37800 0 +11} - {1254583800 39600 1 +11} - {1270306800 37800 0 +11} - {1286033400 39600 1 +11} - {1301756400 37800 0 +11} - {1317483000 39600 1 +11} - {1333206000 37800 0 +11} - {1349537400 39600 1 +11} - {1365260400 37800 0 +11} - {1380987000 39600 1 +11} - {1396710000 37800 0 +11} - {1412436600 39600 1 +11} - {1428159600 37800 0 +11} - {1443886200 39600 1 +11} - {1459609200 37800 0 +11} - {1475335800 39600 1 +11} - {1491058800 37800 0 +11} - {1506785400 39600 1 +11} - {1522508400 37800 0 +11} - {1538839800 39600 1 +11} - {1554562800 37800 0 +11} - {1570289400 39600 1 +11} - {1586012400 37800 0 +11} - {1601739000 39600 1 +11} - {1617462000 37800 0 +11} - {1633188600 39600 1 +11} - {1648911600 37800 0 +11} - {1664638200 39600 1 +11} - {1680361200 37800 0 +11} - {1696087800 39600 1 +11} - {1712415600 37800 0 +11} - {1728142200 39600 1 +11} - {1743865200 37800 0 +11} - {1759591800 39600 1 +11} - {1775314800 37800 0 +11} - {1791041400 39600 1 +11} - {1806764400 37800 0 +11} - {1822491000 39600 1 +11} - {1838214000 37800 0 +11} - {1853940600 39600 1 +11} - {1869663600 37800 0 +11} - {1885995000 39600 1 +11} - {1901718000 37800 0 +11} - {1917444600 39600 1 +11} - {1933167600 37800 0 +11} - {1948894200 39600 1 +11} - {1964617200 37800 0 +11} - {1980343800 39600 1 +11} - {1996066800 37800 0 +11} - {2011793400 39600 1 +11} - {2027516400 37800 0 +11} - {2043243000 39600 1 +11} - {2058966000 37800 0 +11} - {2075297400 39600 1 +11} - {2091020400 37800 0 +11} - {2106747000 39600 1 +11} - {2122470000 37800 0 +11} - {2138196600 39600 1 +11} - {2153919600 37800 0 +11} - {2169646200 39600 1 +11} - {2185369200 37800 0 +11} - {2201095800 39600 1 +11} - {2216818800 37800 0 +11} - {2233150200 39600 1 +11} - {2248873200 37800 0 +11} - {2264599800 39600 1 +11} - {2280322800 37800 0 +11} - {2296049400 39600 1 +11} - {2311772400 37800 0 +11} - {2327499000 39600 1 +11} - {2343222000 37800 0 +11} - {2358948600 39600 1 +11} - {2374671600 37800 0 +11} - {2390398200 39600 1 +11} - {2406121200 37800 0 +11} - {2422452600 39600 1 +11} - {2438175600 37800 0 +11} - {2453902200 39600 1 +11} - {2469625200 37800 0 +11} - {2485351800 39600 1 +11} - {2501074800 37800 0 +11} - {2516801400 39600 1 +11} - {2532524400 37800 0 +11} - {2548251000 39600 1 +11} - {2563974000 37800 0 +11} - {2579700600 39600 1 +11} - {2596028400 37800 0 +11} - {2611755000 39600 1 +11} - {2627478000 37800 0 +11} - {2643204600 39600 1 +11} - {2658927600 37800 0 +11} - {2674654200 39600 1 +11} - {2690377200 37800 0 +11} - {2706103800 39600 1 +11} - {2721826800 37800 0 +11} - {2737553400 39600 1 +11} - {2753276400 37800 0 +11} - {2769607800 39600 1 +11} - {2785330800 37800 0 +11} - {2801057400 39600 1 +11} - {2816780400 37800 0 +11} - {2832507000 39600 1 +11} - {2848230000 37800 0 +11} - {2863956600 39600 1 +11} - {2879679600 37800 0 +11} - {2895406200 39600 1 +11} - {2911129200 37800 0 +11} - {2926855800 39600 1 +11} - {2942578800 37800 0 +11} - {2958910200 39600 1 +11} - {2974633200 37800 0 +11} - {2990359800 39600 1 +11} - {3006082800 37800 0 +11} - {3021809400 39600 1 +11} - {3037532400 37800 0 +11} - {3053259000 39600 1 +11} - {3068982000 37800 0 +11} - {3084708600 39600 1 +11} - {3100431600 37800 0 +11} - {3116763000 39600 1 +11} - {3132486000 37800 0 +11} - {3148212600 39600 1 +11} - {3163935600 37800 0 +11} - {3179662200 39600 1 +11} - {3195385200 37800 0 +11} - {3211111800 39600 1 +11} - {3226834800 37800 0 +11} - {3242561400 39600 1 +11} - {3258284400 37800 0 +11} - {3274011000 39600 1 +11} - {3289734000 37800 0 +11} - {3306065400 39600 1 +11} - {3321788400 37800 0 +11} - {3337515000 39600 1 +11} - {3353238000 37800 0 +11} - {3368964600 39600 1 +11} - {3384687600 37800 0 +11} - {3400414200 39600 1 +11} - {3416137200 37800 0 +11} - {3431863800 39600 1 +11} - {3447586800 37800 0 +11} - {3463313400 39600 1 +11} - {3479641200 37800 0 +11} - {3495367800 39600 1 +11} - {3511090800 37800 0 +11} - {3526817400 39600 1 +11} - {3542540400 37800 0 +11} - {3558267000 39600 1 +11} - {3573990000 37800 0 +11} - {3589716600 39600 1 +11} - {3605439600 37800 0 +11} - {3621166200 39600 1 +11} - {3636889200 37800 0 +11} - {3653220600 39600 1 +11} - {3668943600 37800 0 +11} - {3684670200 39600 1 +11} - {3700393200 37800 0 +11} - {3716119800 39600 1 +11} - {3731842800 37800 0 +11} - {3747569400 39600 1 +11} - {3763292400 37800 0 +11} - {3779019000 39600 1 +11} - {3794742000 37800 0 +11} - {3810468600 39600 1 +11} - {3826191600 37800 0 +11} - {3842523000 39600 1 +11} - {3858246000 37800 0 +11} - {3873972600 39600 1 +11} - {3889695600 37800 0 +11} - {3905422200 39600 1 +11} - {3921145200 37800 0 +11} - {3936871800 39600 1 +11} - {3952594800 37800 0 +11} - {3968321400 39600 1 +11} - {3984044400 37800 0 +11} - {4000375800 39600 1 +11} - {4016098800 37800 0 +11} - {4031825400 39600 1 +11} - {4047548400 37800 0 +11} - {4063275000 39600 1 +11} - {4078998000 37800 0 +11} - {4094724600 39600 1 +11} + {352216800 37800 0 +1030} + {372785400 41400 1 +1030} + {384273000 37800 0 +1030} + {404839800 41400 1 +1030} + {415722600 37800 0 +1030} + {436289400 41400 1 +1030} + {447172200 37800 0 +1030} + {467739000 41400 1 +1030} + {478621800 37800 0 +1030} + {488984400 37800 0 +1030} + {499188600 39600 1 +1030} + {511282800 37800 0 +1030} + {530033400 39600 1 +1030} + {542732400 37800 0 +1030} + {562087800 39600 1 +1030} + {574786800 37800 0 +1030} + {594142200 39600 1 +1030} + {606236400 37800 0 +1030} + {625591800 39600 1 +1030} + {636476400 37800 0 +1030} + {657041400 39600 1 +1030} + {667926000 37800 0 +1030} + {688491000 39600 1 +1030} + {699375600 37800 0 +1030} + {719940600 39600 1 +1030} + {731430000 37800 0 +1030} + {751995000 39600 1 +1030} + {762879600 37800 0 +1030} + {783444600 39600 1 +1030} + {794329200 37800 0 +1030} + {814894200 39600 1 +1030} + {828198000 37800 0 +1030} + {846343800 39600 1 +1030} + {859647600 37800 0 +1030} + {877793400 39600 1 +1030} + {891097200 37800 0 +1030} + {909243000 39600 1 +1030} + {922546800 37800 0 +1030} + {941297400 39600 1 +1030} + {953996400 37800 0 +1030} + {967303800 39600 1 +1030} + {985446000 37800 0 +1030} + {1004196600 39600 1 +1030} + {1017500400 37800 0 +1030} + {1035646200 39600 1 +1030} + {1048950000 37800 0 +1030} + {1067095800 39600 1 +1030} + {1080399600 37800 0 +1030} + {1099150200 39600 1 +1030} + {1111849200 37800 0 +1030} + {1130599800 39600 1 +1030} + {1143903600 37800 0 +1030} + {1162049400 39600 1 +1030} + {1174748400 37800 0 +1030} + {1193499000 39600 1 +1030} + {1207407600 37800 0 +1030} + {1223134200 39600 1 +1030} + {1238857200 37800 0 +1030} + {1254583800 39600 1 +1030} + {1270306800 37800 0 +1030} + {1286033400 39600 1 +1030} + {1301756400 37800 0 +1030} + {1317483000 39600 1 +1030} + {1333206000 37800 0 +1030} + {1349537400 39600 1 +1030} + {1365260400 37800 0 +1030} + {1380987000 39600 1 +1030} + {1396710000 37800 0 +1030} + {1412436600 39600 1 +1030} + {1428159600 37800 0 +1030} + {1443886200 39600 1 +1030} + {1459609200 37800 0 +1030} + {1475335800 39600 1 +1030} + {1491058800 37800 0 +1030} + {1506785400 39600 1 +1030} + {1522508400 37800 0 +1030} + {1538839800 39600 1 +1030} + {1554562800 37800 0 +1030} + {1570289400 39600 1 +1030} + {1586012400 37800 0 +1030} + {1601739000 39600 1 +1030} + {1617462000 37800 0 +1030} + {1633188600 39600 1 +1030} + {1648911600 37800 0 +1030} + {1664638200 39600 1 +1030} + {1680361200 37800 0 +1030} + {1696087800 39600 1 +1030} + {1712415600 37800 0 +1030} + {1728142200 39600 1 +1030} + {1743865200 37800 0 +1030} + {1759591800 39600 1 +1030} + {1775314800 37800 0 +1030} + {1791041400 39600 1 +1030} + {1806764400 37800 0 +1030} + {1822491000 39600 1 +1030} + {1838214000 37800 0 +1030} + {1853940600 39600 1 +1030} + {1869663600 37800 0 +1030} + {1885995000 39600 1 +1030} + {1901718000 37800 0 +1030} + {1917444600 39600 1 +1030} + {1933167600 37800 0 +1030} + {1948894200 39600 1 +1030} + {1964617200 37800 0 +1030} + {1980343800 39600 1 +1030} + {1996066800 37800 0 +1030} + {2011793400 39600 1 +1030} + {2027516400 37800 0 +1030} + {2043243000 39600 1 +1030} + {2058966000 37800 0 +1030} + {2075297400 39600 1 +1030} + {2091020400 37800 0 +1030} + {2106747000 39600 1 +1030} + {2122470000 37800 0 +1030} + {2138196600 39600 1 +1030} + {2153919600 37800 0 +1030} + {2169646200 39600 1 +1030} + {2185369200 37800 0 +1030} + {2201095800 39600 1 +1030} + {2216818800 37800 0 +1030} + {2233150200 39600 1 +1030} + {2248873200 37800 0 +1030} + {2264599800 39600 1 +1030} + {2280322800 37800 0 +1030} + {2296049400 39600 1 +1030} + {2311772400 37800 0 +1030} + {2327499000 39600 1 +1030} + {2343222000 37800 0 +1030} + {2358948600 39600 1 +1030} + {2374671600 37800 0 +1030} + {2390398200 39600 1 +1030} + {2406121200 37800 0 +1030} + {2422452600 39600 1 +1030} + {2438175600 37800 0 +1030} + {2453902200 39600 1 +1030} + {2469625200 37800 0 +1030} + {2485351800 39600 1 +1030} + {2501074800 37800 0 +1030} + {2516801400 39600 1 +1030} + {2532524400 37800 0 +1030} + {2548251000 39600 1 +1030} + {2563974000 37800 0 +1030} + {2579700600 39600 1 +1030} + {2596028400 37800 0 +1030} + {2611755000 39600 1 +1030} + {2627478000 37800 0 +1030} + {2643204600 39600 1 +1030} + {2658927600 37800 0 +1030} + {2674654200 39600 1 +1030} + {2690377200 37800 0 +1030} + {2706103800 39600 1 +1030} + {2721826800 37800 0 +1030} + {2737553400 39600 1 +1030} + {2753276400 37800 0 +1030} + {2769607800 39600 1 +1030} + {2785330800 37800 0 +1030} + {2801057400 39600 1 +1030} + {2816780400 37800 0 +1030} + {2832507000 39600 1 +1030} + {2848230000 37800 0 +1030} + {2863956600 39600 1 +1030} + {2879679600 37800 0 +1030} + {2895406200 39600 1 +1030} + {2911129200 37800 0 +1030} + {2926855800 39600 1 +1030} + {2942578800 37800 0 +1030} + {2958910200 39600 1 +1030} + {2974633200 37800 0 +1030} + {2990359800 39600 1 +1030} + {3006082800 37800 0 +1030} + {3021809400 39600 1 +1030} + {3037532400 37800 0 +1030} + {3053259000 39600 1 +1030} + {3068982000 37800 0 +1030} + {3084708600 39600 1 +1030} + {3100431600 37800 0 +1030} + {3116763000 39600 1 +1030} + {3132486000 37800 0 +1030} + {3148212600 39600 1 +1030} + {3163935600 37800 0 +1030} + {3179662200 39600 1 +1030} + {3195385200 37800 0 +1030} + {3211111800 39600 1 +1030} + {3226834800 37800 0 +1030} + {3242561400 39600 1 +1030} + {3258284400 37800 0 +1030} + {3274011000 39600 1 +1030} + {3289734000 37800 0 +1030} + {3306065400 39600 1 +1030} + {3321788400 37800 0 +1030} + {3337515000 39600 1 +1030} + {3353238000 37800 0 +1030} + {3368964600 39600 1 +1030} + {3384687600 37800 0 +1030} + {3400414200 39600 1 +1030} + {3416137200 37800 0 +1030} + {3431863800 39600 1 +1030} + {3447586800 37800 0 +1030} + {3463313400 39600 1 +1030} + {3479641200 37800 0 +1030} + {3495367800 39600 1 +1030} + {3511090800 37800 0 +1030} + {3526817400 39600 1 +1030} + {3542540400 37800 0 +1030} + {3558267000 39600 1 +1030} + {3573990000 37800 0 +1030} + {3589716600 39600 1 +1030} + {3605439600 37800 0 +1030} + {3621166200 39600 1 +1030} + {3636889200 37800 0 +1030} + {3653220600 39600 1 +1030} + {3668943600 37800 0 +1030} + {3684670200 39600 1 +1030} + {3700393200 37800 0 +1030} + {3716119800 39600 1 +1030} + {3731842800 37800 0 +1030} + {3747569400 39600 1 +1030} + {3763292400 37800 0 +1030} + {3779019000 39600 1 +1030} + {3794742000 37800 0 +1030} + {3810468600 39600 1 +1030} + {3826191600 37800 0 +1030} + {3842523000 39600 1 +1030} + {3858246000 37800 0 +1030} + {3873972600 39600 1 +1030} + {3889695600 37800 0 +1030} + {3905422200 39600 1 +1030} + {3921145200 37800 0 +1030} + {3936871800 39600 1 +1030} + {3952594800 37800 0 +1030} + {3968321400 39600 1 +1030} + {3984044400 37800 0 +1030} + {4000375800 39600 1 +1030} + {4016098800 37800 0 +1030} + {4031825400 39600 1 +1030} + {4047548400 37800 0 +1030} + {4063275000 39600 1 +1030} + {4078998000 37800 0 +1030} + {4094724600 39600 1 +1030} } diff --git a/library/tzdata/Europe/Dublin b/library/tzdata/Europe/Dublin index c3a5c0e..56afc93 100644 --- a/library/tzdata/Europe/Dublin +++ b/library/tzdata/Europe/Dublin @@ -98,262 +98,261 @@ set TZData(:Europe/Dublin) { {-68680800 0 0 IST} {-59004000 3600 1 IST} {-37238400 3600 0 IST} - {57722400 0 0 IST} - {69818400 3600 1 IST} - {89172000 0 0 IST} - {101268000 3600 1 IST} - {120621600 0 0 IST} - {132717600 3600 1 IST} - {152071200 0 0 IST} - {164167200 3600 1 IST} - {183520800 0 0 IST} - {196221600 3600 1 IST} - {214970400 0 0 IST} - {227671200 3600 1 IST} - {246420000 0 0 IST} - {259120800 3600 1 IST} - {278474400 0 0 IST} - {290570400 3600 1 IST} - {309924000 0 0 IST} - {322020000 3600 1 IST} - {341373600 0 0 IST} - {354675600 3600 1 IST} - {372819600 0 0 IST} - {386125200 3600 1 IST} - {404269200 0 0 IST} - {417574800 3600 1 IST} - {435718800 0 0 IST} - {449024400 3600 1 IST} - {467773200 0 0 IST} - {481078800 3600 1 IST} - {499222800 0 0 IST} - {512528400 3600 1 IST} - {530672400 0 0 IST} - {543978000 3600 1 IST} - {562122000 0 0 IST} - {575427600 3600 1 IST} - {593571600 0 0 IST} - {606877200 3600 1 IST} - {625626000 0 0 IST} - {638326800 3600 1 IST} - {657075600 0 0 IST} - {670381200 3600 1 IST} - {688525200 0 0 IST} - {701830800 3600 1 IST} - {719974800 0 0 IST} - {733280400 3600 1 IST} - {751424400 0 0 IST} - {764730000 3600 1 IST} - {782874000 0 0 IST} - {796179600 3600 1 IST} - {814323600 0 0 IST} - {820454400 0 0 GMT} - {828234000 3600 1 IST} - {846378000 0 0 GMT} - {859683600 3600 1 IST} - {877827600 0 0 GMT} - {891133200 3600 1 IST} - {909277200 0 0 GMT} - {922582800 3600 1 IST} - {941331600 0 0 GMT} - {954032400 3600 1 IST} - {972781200 0 0 GMT} - {985482000 3600 1 IST} - {1004230800 0 0 GMT} - {1017536400 3600 1 IST} - {1035680400 0 0 GMT} - {1048986000 3600 1 IST} - {1067130000 0 0 GMT} - {1080435600 3600 1 IST} - {1099184400 0 0 GMT} - {1111885200 3600 1 IST} - {1130634000 0 0 GMT} - {1143334800 3600 1 IST} - {1162083600 0 0 GMT} - {1174784400 3600 1 IST} - {1193533200 0 0 GMT} - {1206838800 3600 1 IST} - {1224982800 0 0 GMT} - {1238288400 3600 1 IST} - {1256432400 0 0 GMT} - {1269738000 3600 1 IST} - {1288486800 0 0 GMT} - {1301187600 3600 1 IST} - {1319936400 0 0 GMT} - {1332637200 3600 1 IST} - {1351386000 0 0 GMT} - {1364691600 3600 1 IST} - {1382835600 0 0 GMT} - {1396141200 3600 1 IST} - {1414285200 0 0 GMT} - {1427590800 3600 1 IST} - {1445734800 0 0 GMT} - {1459040400 3600 1 IST} - {1477789200 0 0 GMT} - {1490490000 3600 1 IST} - {1509238800 0 0 GMT} - {1521939600 3600 1 IST} - {1540688400 0 0 GMT} - {1553994000 3600 1 IST} - {1572138000 0 0 GMT} - {1585443600 3600 1 IST} - {1603587600 0 0 GMT} - {1616893200 3600 1 IST} - {1635642000 0 0 GMT} - {1648342800 3600 1 IST} - {1667091600 0 0 GMT} - {1679792400 3600 1 IST} - {1698541200 0 0 GMT} - {1711846800 3600 1 IST} - {1729990800 0 0 GMT} - {1743296400 3600 1 IST} - {1761440400 0 0 GMT} - {1774746000 3600 1 IST} - {1792890000 0 0 GMT} - {1806195600 3600 1 IST} - {1824944400 0 0 GMT} - {1837645200 3600 1 IST} - {1856394000 0 0 GMT} - {1869094800 3600 1 IST} - {1887843600 0 0 GMT} - {1901149200 3600 1 IST} - {1919293200 0 0 GMT} - {1932598800 3600 1 IST} - {1950742800 0 0 GMT} - {1964048400 3600 1 IST} - {1982797200 0 0 GMT} - {1995498000 3600 1 IST} - {2014246800 0 0 GMT} - {2026947600 3600 1 IST} - {2045696400 0 0 GMT} - {2058397200 3600 1 IST} - {2077146000 0 0 GMT} - {2090451600 3600 1 IST} - {2108595600 0 0 GMT} - {2121901200 3600 1 IST} - {2140045200 0 0 GMT} - {2153350800 3600 1 IST} - {2172099600 0 0 GMT} - {2184800400 3600 1 IST} - {2203549200 0 0 GMT} - {2216250000 3600 1 IST} - {2234998800 0 0 GMT} - {2248304400 3600 1 IST} - {2266448400 0 0 GMT} - {2279754000 3600 1 IST} - {2297898000 0 0 GMT} - {2311203600 3600 1 IST} - {2329347600 0 0 GMT} - {2342653200 3600 1 IST} - {2361402000 0 0 GMT} - {2374102800 3600 1 IST} - {2392851600 0 0 GMT} - {2405552400 3600 1 IST} - {2424301200 0 0 GMT} - {2437606800 3600 1 IST} - {2455750800 0 0 GMT} - {2469056400 3600 1 IST} - {2487200400 0 0 GMT} - {2500506000 3600 1 IST} - {2519254800 0 0 GMT} - {2531955600 3600 1 IST} - {2550704400 0 0 GMT} - {2563405200 3600 1 IST} - {2582154000 0 0 GMT} - {2595459600 3600 1 IST} - {2613603600 0 0 GMT} - {2626909200 3600 1 IST} - {2645053200 0 0 GMT} - {2658358800 3600 1 IST} - {2676502800 0 0 GMT} - {2689808400 3600 1 IST} - {2708557200 0 0 GMT} - {2721258000 3600 1 IST} - {2740006800 0 0 GMT} - {2752707600 3600 1 IST} - {2771456400 0 0 GMT} - {2784762000 3600 1 IST} - {2802906000 0 0 GMT} - {2816211600 3600 1 IST} - {2834355600 0 0 GMT} - {2847661200 3600 1 IST} - {2866410000 0 0 GMT} - {2879110800 3600 1 IST} - {2897859600 0 0 GMT} - {2910560400 3600 1 IST} - {2929309200 0 0 GMT} - {2942010000 3600 1 IST} - {2960758800 0 0 GMT} - {2974064400 3600 1 IST} - {2992208400 0 0 GMT} - {3005514000 3600 1 IST} - {3023658000 0 0 GMT} - {3036963600 3600 1 IST} - {3055712400 0 0 GMT} - {3068413200 3600 1 IST} - {3087162000 0 0 GMT} - {3099862800 3600 1 IST} - {3118611600 0 0 GMT} - {3131917200 3600 1 IST} - {3150061200 0 0 GMT} - {3163366800 3600 1 IST} - {3181510800 0 0 GMT} - {3194816400 3600 1 IST} - {3212960400 0 0 GMT} - {3226266000 3600 1 IST} - {3245014800 0 0 GMT} - {3257715600 3600 1 IST} - {3276464400 0 0 GMT} - {3289165200 3600 1 IST} - {3307914000 0 0 GMT} - {3321219600 3600 1 IST} - {3339363600 0 0 GMT} - {3352669200 3600 1 IST} - {3370813200 0 0 GMT} - {3384118800 3600 1 IST} - {3402867600 0 0 GMT} - {3415568400 3600 1 IST} - {3434317200 0 0 GMT} - {3447018000 3600 1 IST} - {3465766800 0 0 GMT} - {3479072400 3600 1 IST} - {3497216400 0 0 GMT} - {3510522000 3600 1 IST} - {3528666000 0 0 GMT} - {3541971600 3600 1 IST} - {3560115600 0 0 GMT} - {3573421200 3600 1 IST} - {3592170000 0 0 GMT} - {3604870800 3600 1 IST} - {3623619600 0 0 GMT} - {3636320400 3600 1 IST} - {3655069200 0 0 GMT} - {3668374800 3600 1 IST} - {3686518800 0 0 GMT} - {3699824400 3600 1 IST} - {3717968400 0 0 GMT} - {3731274000 3600 1 IST} - {3750022800 0 0 GMT} - {3762723600 3600 1 IST} - {3781472400 0 0 GMT} - {3794173200 3600 1 IST} - {3812922000 0 0 GMT} - {3825622800 3600 1 IST} - {3844371600 0 0 GMT} - {3857677200 3600 1 IST} - {3875821200 0 0 GMT} - {3889126800 3600 1 IST} - {3907270800 0 0 GMT} - {3920576400 3600 1 IST} - {3939325200 0 0 GMT} - {3952026000 3600 1 IST} - {3970774800 0 0 GMT} - {3983475600 3600 1 IST} - {4002224400 0 0 GMT} - {4015530000 3600 1 IST} - {4033674000 0 0 GMT} - {4046979600 3600 1 IST} - {4065123600 0 0 GMT} - {4078429200 3600 1 IST} - {4096573200 0 0 GMT} + {57722400 0 1 IST} + {69818400 3600 0 IST} + {89172000 0 1 IST} + {101268000 3600 0 IST} + {120621600 0 1 IST} + {132717600 3600 0 IST} + {152071200 0 1 IST} + {164167200 3600 0 IST} + {183520800 0 1 IST} + {196221600 3600 0 IST} + {214970400 0 1 IST} + {227671200 3600 0 IST} + {246420000 0 1 IST} + {259120800 3600 0 IST} + {278474400 0 1 IST} + {290570400 3600 0 IST} + {309924000 0 1 IST} + {322020000 3600 0 IST} + {341373600 0 1 IST} + {354675600 3600 0 IST} + {372819600 0 1 IST} + {386125200 3600 0 IST} + {404269200 0 1 IST} + {417574800 3600 0 IST} + {435718800 0 1 IST} + {449024400 3600 0 IST} + {467773200 0 1 IST} + {481078800 3600 0 IST} + {499222800 0 1 IST} + {512528400 3600 0 IST} + {530672400 0 1 IST} + {543978000 3600 0 IST} + {562122000 0 1 IST} + {575427600 3600 0 IST} + {593571600 0 1 IST} + {606877200 3600 0 IST} + {625626000 0 1 IST} + {638326800 3600 0 IST} + {657075600 0 1 IST} + {670381200 3600 0 IST} + {688525200 0 1 IST} + {701830800 3600 0 IST} + {719974800 0 1 IST} + {733280400 3600 0 IST} + {751424400 0 1 IST} + {764730000 3600 0 IST} + {782874000 0 1 IST} + {796179600 3600 0 IST} + {814323600 0 1 IST} + {828234000 3600 0 IST} + {846378000 0 1 IST} + {859683600 3600 0 IST} + {877827600 0 1 IST} + {891133200 3600 0 IST} + {909277200 0 1 IST} + {922582800 3600 0 IST} + {941331600 0 1 IST} + {954032400 3600 0 IST} + {972781200 0 1 IST} + {985482000 3600 0 IST} + {1004230800 0 1 IST} + {1017536400 3600 0 IST} + {1035680400 0 1 IST} + {1048986000 3600 0 IST} + {1067130000 0 1 IST} + {1080435600 3600 0 IST} + {1099184400 0 1 IST} + {1111885200 3600 0 IST} + {1130634000 0 1 IST} + {1143334800 3600 0 IST} + {1162083600 0 1 IST} + {1174784400 3600 0 IST} + {1193533200 0 1 IST} + {1206838800 3600 0 IST} + {1224982800 0 1 IST} + {1238288400 3600 0 IST} + {1256432400 0 1 IST} + {1269738000 3600 0 IST} + {1288486800 0 1 IST} + {1301187600 3600 0 IST} + {1319936400 0 1 IST} + {1332637200 3600 0 IST} + {1351386000 0 1 IST} + {1364691600 3600 0 IST} + {1382835600 0 1 IST} + {1396141200 3600 0 IST} + {1414285200 0 1 IST} + {1427590800 3600 0 IST} + {1445734800 0 1 IST} + {1459040400 3600 0 IST} + {1477789200 0 1 IST} + {1490490000 3600 0 IST} + {1509238800 0 1 IST} + {1521939600 3600 0 IST} + {1540688400 0 1 IST} + {1553994000 3600 0 IST} + {1572138000 0 1 IST} + {1585443600 3600 0 IST} + {1603587600 0 1 IST} + {1616893200 3600 0 IST} + {1635642000 0 1 IST} + {1648342800 3600 0 IST} + {1667091600 0 1 IST} + {1679792400 3600 0 IST} + {1698541200 0 1 IST} + {1711846800 3600 0 IST} + {1729990800 0 1 IST} + {1743296400 3600 0 IST} + {1761440400 0 1 IST} + {1774746000 3600 0 IST} + {1792890000 0 1 IST} + {1806195600 3600 0 IST} + {1824944400 0 1 IST} + {1837645200 3600 0 IST} + {1856394000 0 1 IST} + {1869094800 3600 0 IST} + {1887843600 0 1 IST} + {1901149200 3600 0 IST} + {1919293200 0 1 IST} + {1932598800 3600 0 IST} + {1950742800 0 1 IST} + {1964048400 3600 0 IST} + {1982797200 0 1 IST} + {1995498000 3600 0 IST} + {2014246800 0 1 IST} + {2026947600 3600 0 IST} + {2045696400 0 1 IST} + {2058397200 3600 0 IST} + {2077146000 0 1 IST} + {2090451600 3600 0 IST} + {2108595600 0 1 IST} + {2121901200 3600 0 IST} + {2140045200 0 1 IST} + {2153350800 3600 0 IST} + {2172099600 0 1 IST} + {2184800400 3600 0 IST} + {2203549200 0 1 IST} + {2216250000 3600 0 IST} + {2234998800 0 1 IST} + {2248304400 3600 0 IST} + {2266448400 0 1 IST} + {2279754000 3600 0 IST} + {2297898000 0 1 IST} + {2311203600 3600 0 IST} + {2329347600 0 1 IST} + {2342653200 3600 0 IST} + {2361402000 0 1 IST} + {2374102800 3600 0 IST} + {2392851600 0 1 IST} + {2405552400 3600 0 IST} + {2424301200 0 1 IST} + {2437606800 3600 0 IST} + {2455750800 0 1 IST} + {2469056400 3600 0 IST} + {2487200400 0 1 IST} + {2500506000 3600 0 IST} + {2519254800 0 1 IST} + {2531955600 3600 0 IST} + {2550704400 0 1 IST} + {2563405200 3600 0 IST} + {2582154000 0 1 IST} + {2595459600 3600 0 IST} + {2613603600 0 1 IST} + {2626909200 3600 0 IST} + {2645053200 0 1 IST} + {2658358800 3600 0 IST} + {2676502800 0 1 IST} + {2689808400 3600 0 IST} + {2708557200 0 1 IST} + {2721258000 3600 0 IST} + {2740006800 0 1 IST} + {2752707600 3600 0 IST} + {2771456400 0 1 IST} + {2784762000 3600 0 IST} + {2802906000 0 1 IST} + {2816211600 3600 0 IST} + {2834355600 0 1 IST} + {2847661200 3600 0 IST} + {2866410000 0 1 IST} + {2879110800 3600 0 IST} + {2897859600 0 1 IST} + {2910560400 3600 0 IST} + {2929309200 0 1 IST} + {2942010000 3600 0 IST} + {2960758800 0 1 IST} + {2974064400 3600 0 IST} + {2992208400 0 1 IST} + {3005514000 3600 0 IST} + {3023658000 0 1 IST} + {3036963600 3600 0 IST} + {3055712400 0 1 IST} + {3068413200 3600 0 IST} + {3087162000 0 1 IST} + {3099862800 3600 0 IST} + {3118611600 0 1 IST} + {3131917200 3600 0 IST} + {3150061200 0 1 IST} + {3163366800 3600 0 IST} + {3181510800 0 1 IST} + {3194816400 3600 0 IST} + {3212960400 0 1 IST} + {3226266000 3600 0 IST} + {3245014800 0 1 IST} + {3257715600 3600 0 IST} + {3276464400 0 1 IST} + {3289165200 3600 0 IST} + {3307914000 0 1 IST} + {3321219600 3600 0 IST} + {3339363600 0 1 IST} + {3352669200 3600 0 IST} + {3370813200 0 1 IST} + {3384118800 3600 0 IST} + {3402867600 0 1 IST} + {3415568400 3600 0 IST} + {3434317200 0 1 IST} + {3447018000 3600 0 IST} + {3465766800 0 1 IST} + {3479072400 3600 0 IST} + {3497216400 0 1 IST} + {3510522000 3600 0 IST} + {3528666000 0 1 IST} + {3541971600 3600 0 IST} + {3560115600 0 1 IST} + {3573421200 3600 0 IST} + {3592170000 0 1 IST} + {3604870800 3600 0 IST} + {3623619600 0 1 IST} + {3636320400 3600 0 IST} + {3655069200 0 1 IST} + {3668374800 3600 0 IST} + {3686518800 0 1 IST} + {3699824400 3600 0 IST} + {3717968400 0 1 IST} + {3731274000 3600 0 IST} + {3750022800 0 1 IST} + {3762723600 3600 0 IST} + {3781472400 0 1 IST} + {3794173200 3600 0 IST} + {3812922000 0 1 IST} + {3825622800 3600 0 IST} + {3844371600 0 1 IST} + {3857677200 3600 0 IST} + {3875821200 0 1 IST} + {3889126800 3600 0 IST} + {3907270800 0 1 IST} + {3920576400 3600 0 IST} + {3939325200 0 1 IST} + {3952026000 3600 0 IST} + {3970774800 0 1 IST} + {3983475600 3600 0 IST} + {4002224400 0 1 IST} + {4015530000 3600 0 IST} + {4033674000 0 1 IST} + {4046979600 3600 0 IST} + {4065123600 0 1 IST} + {4078429200 3600 0 IST} + {4096573200 0 1 IST} } diff --git a/library/tzdata/Europe/Lisbon b/library/tzdata/Europe/Lisbon index 7168f96..b566b51 100644 --- a/library/tzdata/Europe/Lisbon +++ b/library/tzdata/Europe/Lisbon @@ -3,7 +3,7 @@ set TZData(:Europe/Lisbon) { {-9223372036854775808 -2205 0 LMT} {-2713908195 -2205 0 LMT} - {-1830381795 0 0 WET} + {-1830384000 0 0 WET} {-1689555600 3600 1 WEST} {-1677801600 0 0 WET} {-1667437200 3600 1 WEST} diff --git a/library/tzdata/Europe/Prague b/library/tzdata/Europe/Prague index 222b1ae..34df8ed 100644 --- a/library/tzdata/Europe/Prague +++ b/library/tzdata/Europe/Prague @@ -15,11 +15,14 @@ set TZData(:Europe/Prague) { {-844556400 7200 1 CEST} {-828226800 3600 0 CET} {-812502000 7200 1 CEST} - {-798073200 3600 0 CET} - {-780534000 7200 1 CEST} - {-761180400 3600 0 CET} + {-796777200 3600 0 CET} + {-781052400 7200 1 CEST} + {-777862800 7200 0 CEST} + {-765327600 3600 0 CET} {-746578800 7200 1 CEST} {-733359600 3600 0 CET} + {-728517600 0 1 GMT} + {-721260000 0 0 CET} {-716425200 7200 1 CEST} {-701910000 3600 0 CET} {-684975600 7200 1 CEST} diff --git a/library/tzdata/Indian/Mauritius b/library/tzdata/Indian/Mauritius index 2a7a0b1..4c9a051 100644 --- a/library/tzdata/Indian/Mauritius +++ b/library/tzdata/Indian/Mauritius @@ -3,8 +3,8 @@ set TZData(:Indian/Mauritius) { {-9223372036854775808 13800 0 LMT} {-1988164200 14400 0 +04} - {403041600 18000 1 +05} + {403041600 18000 1 +04} {417034800 14400 0 +04} - {1224972000 18000 1 +05} + {1224972000 18000 1 +04} {1238274000 14400 0 +04} } diff --git a/library/tzdata/Pacific/Apia b/library/tzdata/Pacific/Apia index 4c0d84a..4fc91f4 100644 --- a/library/tzdata/Pacific/Apia +++ b/library/tzdata/Pacific/Apia @@ -4,185 +4,185 @@ set TZData(:Pacific/Apia) { {-9223372036854775808 45184 0 LMT} {-2445424384 -41216 0 LMT} {-1861878784 -41400 0 -1130} - {-631110600 -39600 0 -10} - {1285498800 -36000 1 -10} - {1301752800 -39600 0 -10} - {1316872800 -36000 1 -10} - {1325239200 50400 0 +14} - {1333202400 46800 0 +14} - {1348927200 50400 1 +14} - {1365256800 46800 0 +14} - {1380376800 50400 1 +14} - {1396706400 46800 0 +14} - {1411826400 50400 1 +14} - {1428156000 46800 0 +14} - {1443276000 50400 1 +14} - {1459605600 46800 0 +14} - {1474725600 50400 1 +14} - {1491055200 46800 0 +14} - {1506175200 50400 1 +14} - {1522504800 46800 0 +14} - {1538229600 50400 1 +14} - {1554559200 46800 0 +14} - {1569679200 50400 1 +14} - {1586008800 46800 0 +14} - {1601128800 50400 1 +14} - {1617458400 46800 0 +14} - {1632578400 50400 1 +14} - {1648908000 46800 0 +14} - {1664028000 50400 1 +14} - {1680357600 46800 0 +14} - {1695477600 50400 1 +14} - {1712412000 46800 0 +14} - {1727532000 50400 1 +14} - {1743861600 46800 0 +14} - {1758981600 50400 1 +14} - {1775311200 46800 0 +14} - {1790431200 50400 1 +14} - {1806760800 46800 0 +14} - {1821880800 50400 1 +14} - {1838210400 46800 0 +14} - {1853330400 50400 1 +14} - {1869660000 46800 0 +14} - {1885384800 50400 1 +14} - {1901714400 46800 0 +14} - {1916834400 50400 1 +14} - {1933164000 46800 0 +14} - {1948284000 50400 1 +14} - {1964613600 46800 0 +14} - {1979733600 50400 1 +14} - {1996063200 46800 0 +14} - {2011183200 50400 1 +14} - {2027512800 46800 0 +14} - {2042632800 50400 1 +14} - {2058962400 46800 0 +14} - {2074687200 50400 1 +14} - {2091016800 46800 0 +14} - {2106136800 50400 1 +14} - {2122466400 46800 0 +14} - {2137586400 50400 1 +14} - {2153916000 46800 0 +14} - {2169036000 50400 1 +14} - {2185365600 46800 0 +14} - {2200485600 50400 1 +14} - {2216815200 46800 0 +14} - {2232540000 50400 1 +14} - {2248869600 46800 0 +14} - {2263989600 50400 1 +14} - {2280319200 46800 0 +14} - {2295439200 50400 1 +14} - {2311768800 46800 0 +14} - {2326888800 50400 1 +14} - {2343218400 46800 0 +14} - {2358338400 50400 1 +14} - {2374668000 46800 0 +14} - {2389788000 50400 1 +14} - {2406117600 46800 0 +14} - {2421842400 50400 1 +14} - {2438172000 46800 0 +14} - {2453292000 50400 1 +14} - {2469621600 46800 0 +14} - {2484741600 50400 1 +14} - {2501071200 46800 0 +14} - {2516191200 50400 1 +14} - {2532520800 46800 0 +14} - {2547640800 50400 1 +14} - {2563970400 46800 0 +14} - {2579090400 50400 1 +14} - {2596024800 46800 0 +14} - {2611144800 50400 1 +14} - {2627474400 46800 0 +14} - {2642594400 50400 1 +14} - {2658924000 46800 0 +14} - {2674044000 50400 1 +14} - {2690373600 46800 0 +14} - {2705493600 50400 1 +14} - {2721823200 46800 0 +14} - {2736943200 50400 1 +14} - {2753272800 46800 0 +14} - {2768997600 50400 1 +14} - {2785327200 46800 0 +14} - {2800447200 50400 1 +14} - {2816776800 46800 0 +14} - {2831896800 50400 1 +14} - {2848226400 46800 0 +14} - {2863346400 50400 1 +14} - {2879676000 46800 0 +14} - {2894796000 50400 1 +14} - {2911125600 46800 0 +14} - {2926245600 50400 1 +14} - {2942575200 46800 0 +14} - {2958300000 50400 1 +14} - {2974629600 46800 0 +14} - {2989749600 50400 1 +14} - {3006079200 46800 0 +14} - {3021199200 50400 1 +14} - {3037528800 46800 0 +14} - {3052648800 50400 1 +14} - {3068978400 46800 0 +14} - {3084098400 50400 1 +14} - {3100428000 46800 0 +14} - {3116152800 50400 1 +14} - {3132482400 46800 0 +14} - {3147602400 50400 1 +14} - {3163932000 46800 0 +14} - {3179052000 50400 1 +14} - {3195381600 46800 0 +14} - {3210501600 50400 1 +14} - {3226831200 46800 0 +14} - {3241951200 50400 1 +14} - {3258280800 46800 0 +14} - {3273400800 50400 1 +14} - {3289730400 46800 0 +14} - {3305455200 50400 1 +14} - {3321784800 46800 0 +14} - {3336904800 50400 1 +14} - {3353234400 46800 0 +14} - {3368354400 50400 1 +14} - {3384684000 46800 0 +14} - {3399804000 50400 1 +14} - {3416133600 46800 0 +14} - {3431253600 50400 1 +14} - {3447583200 46800 0 +14} - {3462703200 50400 1 +14} - {3479637600 46800 0 +14} - {3494757600 50400 1 +14} - {3511087200 46800 0 +14} - {3526207200 50400 1 +14} - {3542536800 46800 0 +14} - {3557656800 50400 1 +14} - {3573986400 46800 0 +14} - {3589106400 50400 1 +14} - {3605436000 46800 0 +14} - {3620556000 50400 1 +14} - {3636885600 46800 0 +14} - {3652610400 50400 1 +14} - {3668940000 46800 0 +14} - {3684060000 50400 1 +14} - {3700389600 46800 0 +14} - {3715509600 50400 1 +14} - {3731839200 46800 0 +14} - {3746959200 50400 1 +14} - {3763288800 46800 0 +14} - {3778408800 50400 1 +14} - {3794738400 46800 0 +14} - {3809858400 50400 1 +14} - {3826188000 46800 0 +14} - {3841912800 50400 1 +14} - {3858242400 46800 0 +14} - {3873362400 50400 1 +14} - {3889692000 46800 0 +14} - {3904812000 50400 1 +14} - {3921141600 46800 0 +14} - {3936261600 50400 1 +14} - {3952591200 46800 0 +14} - {3967711200 50400 1 +14} - {3984040800 46800 0 +14} - {3999765600 50400 1 +14} - {4016095200 46800 0 +14} - {4031215200 50400 1 +14} - {4047544800 46800 0 +14} - {4062664800 50400 1 +14} - {4078994400 46800 0 +14} - {4094114400 50400 1 +14} + {-631110600 -39600 0 -11} + {1285498800 -36000 1 -11} + {1301752800 -39600 0 -11} + {1316872800 -36000 1 -11} + {1325239200 50400 0 +13} + {1333202400 46800 0 +13} + {1348927200 50400 1 +13} + {1365256800 46800 0 +13} + {1380376800 50400 1 +13} + {1396706400 46800 0 +13} + {1411826400 50400 1 +13} + {1428156000 46800 0 +13} + {1443276000 50400 1 +13} + {1459605600 46800 0 +13} + {1474725600 50400 1 +13} + {1491055200 46800 0 +13} + {1506175200 50400 1 +13} + {1522504800 46800 0 +13} + {1538229600 50400 1 +13} + {1554559200 46800 0 +13} + {1569679200 50400 1 +13} + {1586008800 46800 0 +13} + {1601128800 50400 1 +13} + {1617458400 46800 0 +13} + {1632578400 50400 1 +13} + {1648908000 46800 0 +13} + {1664028000 50400 1 +13} + {1680357600 46800 0 +13} + {1695477600 50400 1 +13} + {1712412000 46800 0 +13} + {1727532000 50400 1 +13} + {1743861600 46800 0 +13} + {1758981600 50400 1 +13} + {1775311200 46800 0 +13} + {1790431200 50400 1 +13} + {1806760800 46800 0 +13} + {1821880800 50400 1 +13} + {1838210400 46800 0 +13} + {1853330400 50400 1 +13} + {1869660000 46800 0 +13} + {1885384800 50400 1 +13} + {1901714400 46800 0 +13} + {1916834400 50400 1 +13} + {1933164000 46800 0 +13} + {1948284000 50400 1 +13} + {1964613600 46800 0 +13} + {1979733600 50400 1 +13} + {1996063200 46800 0 +13} + {2011183200 50400 1 +13} + {2027512800 46800 0 +13} + {2042632800 50400 1 +13} + {2058962400 46800 0 +13} + {2074687200 50400 1 +13} + {2091016800 46800 0 +13} + {2106136800 50400 1 +13} + {2122466400 46800 0 +13} + {2137586400 50400 1 +13} + {2153916000 46800 0 +13} + {2169036000 50400 1 +13} + {2185365600 46800 0 +13} + {2200485600 50400 1 +13} + {2216815200 46800 0 +13} + {2232540000 50400 1 +13} + {2248869600 46800 0 +13} + {2263989600 50400 1 +13} + {2280319200 46800 0 +13} + {2295439200 50400 1 +13} + {2311768800 46800 0 +13} + {2326888800 50400 1 +13} + {2343218400 46800 0 +13} + {2358338400 50400 1 +13} + {2374668000 46800 0 +13} + {2389788000 50400 1 +13} + {2406117600 46800 0 +13} + {2421842400 50400 1 +13} + {2438172000 46800 0 +13} + {2453292000 50400 1 +13} + {2469621600 46800 0 +13} + {2484741600 50400 1 +13} + {2501071200 46800 0 +13} + {2516191200 50400 1 +13} + {2532520800 46800 0 +13} + {2547640800 50400 1 +13} + {2563970400 46800 0 +13} + {2579090400 50400 1 +13} + {2596024800 46800 0 +13} + {2611144800 50400 1 +13} + {2627474400 46800 0 +13} + {2642594400 50400 1 +13} + {2658924000 46800 0 +13} + {2674044000 50400 1 +13} + {2690373600 46800 0 +13} + {2705493600 50400 1 +13} + {2721823200 46800 0 +13} + {2736943200 50400 1 +13} + {2753272800 46800 0 +13} + {2768997600 50400 1 +13} + {2785327200 46800 0 +13} + {2800447200 50400 1 +13} + {2816776800 46800 0 +13} + {2831896800 50400 1 +13} + {2848226400 46800 0 +13} + {2863346400 50400 1 +13} + {2879676000 46800 0 +13} + {2894796000 50400 1 +13} + {2911125600 46800 0 +13} + {2926245600 50400 1 +13} + {2942575200 46800 0 +13} + {2958300000 50400 1 +13} + {2974629600 46800 0 +13} + {2989749600 50400 1 +13} + {3006079200 46800 0 +13} + {3021199200 50400 1 +13} + {3037528800 46800 0 +13} + {3052648800 50400 1 +13} + {3068978400 46800 0 +13} + {3084098400 50400 1 +13} + {3100428000 46800 0 +13} + {3116152800 50400 1 +13} + {3132482400 46800 0 +13} + {3147602400 50400 1 +13} + {3163932000 46800 0 +13} + {3179052000 50400 1 +13} + {3195381600 46800 0 +13} + {3210501600 50400 1 +13} + {3226831200 46800 0 +13} + {3241951200 50400 1 +13} + {3258280800 46800 0 +13} + {3273400800 50400 1 +13} + {3289730400 46800 0 +13} + {3305455200 50400 1 +13} + {3321784800 46800 0 +13} + {3336904800 50400 1 +13} + {3353234400 46800 0 +13} + {3368354400 50400 1 +13} + {3384684000 46800 0 +13} + {3399804000 50400 1 +13} + {3416133600 46800 0 +13} + {3431253600 50400 1 +13} + {3447583200 46800 0 +13} + {3462703200 50400 1 +13} + {3479637600 46800 0 +13} + {3494757600 50400 1 +13} + {3511087200 46800 0 +13} + {3526207200 50400 1 +13} + {3542536800 46800 0 +13} + {3557656800 50400 1 +13} + {3573986400 46800 0 +13} + {3589106400 50400 1 +13} + {3605436000 46800 0 +13} + {3620556000 50400 1 +13} + {3636885600 46800 0 +13} + {3652610400 50400 1 +13} + {3668940000 46800 0 +13} + {3684060000 50400 1 +13} + {3700389600 46800 0 +13} + {3715509600 50400 1 +13} + {3731839200 46800 0 +13} + {3746959200 50400 1 +13} + {3763288800 46800 0 +13} + {3778408800 50400 1 +13} + {3794738400 46800 0 +13} + {3809858400 50400 1 +13} + {3826188000 46800 0 +13} + {3841912800 50400 1 +13} + {3858242400 46800 0 +13} + {3873362400 50400 1 +13} + {3889692000 46800 0 +13} + {3904812000 50400 1 +13} + {3921141600 46800 0 +13} + {3936261600 50400 1 +13} + {3952591200 46800 0 +13} + {3967711200 50400 1 +13} + {3984040800 46800 0 +13} + {3999765600 50400 1 +13} + {4016095200 46800 0 +13} + {4031215200 50400 1 +13} + {4047544800 46800 0 +13} + {4062664800 50400 1 +13} + {4078994400 46800 0 +13} + {4094114400 50400 1 +13} } diff --git a/library/tzdata/Pacific/Chatham b/library/tzdata/Pacific/Chatham index 5d39879..6c1ab19 100644 --- a/library/tzdata/Pacific/Chatham +++ b/library/tzdata/Pacific/Chatham @@ -3,256 +3,256 @@ set TZData(:Pacific/Chatham) { {-9223372036854775808 44028 0 LMT} {-3192437628 44100 0 +1215} - {-757426500 45900 0 +1345} - {152632800 49500 1 +1345} - {162309600 45900 0 +1345} - {183477600 49500 1 +1345} - {194968800 45900 0 +1345} - {215532000 49500 1 +1345} - {226418400 45900 0 +1345} - {246981600 49500 1 +1345} - {257868000 45900 0 +1345} - {278431200 49500 1 +1345} - {289317600 45900 0 +1345} - {309880800 49500 1 +1345} - {320767200 45900 0 +1345} - {341330400 49500 1 +1345} - {352216800 45900 0 +1345} - {372780000 49500 1 +1345} - {384271200 45900 0 +1345} - {404834400 49500 1 +1345} - {415720800 45900 0 +1345} - {436284000 49500 1 +1345} - {447170400 45900 0 +1345} - {467733600 49500 1 +1345} - {478620000 45900 0 +1345} - {499183200 49500 1 +1345} - {510069600 45900 0 +1345} - {530632800 49500 1 +1345} - {541519200 45900 0 +1345} - {562082400 49500 1 +1345} - {573573600 45900 0 +1345} - {594136800 49500 1 +1345} - {605023200 45900 0 +1345} - {623772000 49500 1 +1345} - {637682400 45900 0 +1345} - {655221600 49500 1 +1345} - {669132000 45900 0 +1345} - {686671200 49500 1 +1345} - {700581600 45900 0 +1345} - {718120800 49500 1 +1345} - {732636000 45900 0 +1345} - {749570400 49500 1 +1345} - {764085600 45900 0 +1345} - {781020000 49500 1 +1345} - {795535200 45900 0 +1345} - {812469600 49500 1 +1345} - {826984800 45900 0 +1345} - {844524000 49500 1 +1345} - {858434400 45900 0 +1345} - {875973600 49500 1 +1345} - {889884000 45900 0 +1345} - {907423200 49500 1 +1345} - {921938400 45900 0 +1345} - {938872800 49500 1 +1345} - {953388000 45900 0 +1345} - {970322400 49500 1 +1345} - {984837600 45900 0 +1345} - {1002376800 49500 1 +1345} - {1016287200 45900 0 +1345} - {1033826400 49500 1 +1345} - {1047736800 45900 0 +1345} - {1065276000 49500 1 +1345} - {1079791200 45900 0 +1345} - {1096725600 49500 1 +1345} - {1111240800 45900 0 +1345} - {1128175200 49500 1 +1345} - {1142690400 45900 0 +1345} - {1159624800 49500 1 +1345} - {1174140000 45900 0 +1345} - {1191074400 49500 1 +1345} - {1207404000 45900 0 +1345} - {1222524000 49500 1 +1345} - {1238853600 45900 0 +1345} - {1253973600 49500 1 +1345} - {1270303200 45900 0 +1345} - {1285423200 49500 1 +1345} - {1301752800 45900 0 +1345} - {1316872800 49500 1 +1345} - {1333202400 45900 0 +1345} - {1348927200 49500 1 +1345} - {1365256800 45900 0 +1345} - {1380376800 49500 1 +1345} - {1396706400 45900 0 +1345} - {1411826400 49500 1 +1345} - {1428156000 45900 0 +1345} - {1443276000 49500 1 +1345} - {1459605600 45900 0 +1345} - {1474725600 49500 1 +1345} - {1491055200 45900 0 +1345} - {1506175200 49500 1 +1345} - {1522504800 45900 0 +1345} - {1538229600 49500 1 +1345} - {1554559200 45900 0 +1345} - {1569679200 49500 1 +1345} - {1586008800 45900 0 +1345} - {1601128800 49500 1 +1345} - {1617458400 45900 0 +1345} - {1632578400 49500 1 +1345} - {1648908000 45900 0 +1345} - {1664028000 49500 1 +1345} - {1680357600 45900 0 +1345} - {1695477600 49500 1 +1345} - {1712412000 45900 0 +1345} - {1727532000 49500 1 +1345} - {1743861600 45900 0 +1345} - {1758981600 49500 1 +1345} - {1775311200 45900 0 +1345} - {1790431200 49500 1 +1345} - {1806760800 45900 0 +1345} - {1821880800 49500 1 +1345} - {1838210400 45900 0 +1345} - {1853330400 49500 1 +1345} - {1869660000 45900 0 +1345} - {1885384800 49500 1 +1345} - {1901714400 45900 0 +1345} - {1916834400 49500 1 +1345} - {1933164000 45900 0 +1345} - {1948284000 49500 1 +1345} - {1964613600 45900 0 +1345} - {1979733600 49500 1 +1345} - {1996063200 45900 0 +1345} - {2011183200 49500 1 +1345} - {2027512800 45900 0 +1345} - {2042632800 49500 1 +1345} - {2058962400 45900 0 +1345} - {2074687200 49500 1 +1345} - {2091016800 45900 0 +1345} - {2106136800 49500 1 +1345} - {2122466400 45900 0 +1345} - {2137586400 49500 1 +1345} - {2153916000 45900 0 +1345} - {2169036000 49500 1 +1345} - {2185365600 45900 0 +1345} - {2200485600 49500 1 +1345} - {2216815200 45900 0 +1345} - {2232540000 49500 1 +1345} - {2248869600 45900 0 +1345} - {2263989600 49500 1 +1345} - {2280319200 45900 0 +1345} - {2295439200 49500 1 +1345} - {2311768800 45900 0 +1345} - {2326888800 49500 1 +1345} - {2343218400 45900 0 +1345} - {2358338400 49500 1 +1345} - {2374668000 45900 0 +1345} - {2389788000 49500 1 +1345} - {2406117600 45900 0 +1345} - {2421842400 49500 1 +1345} - {2438172000 45900 0 +1345} - {2453292000 49500 1 +1345} - {2469621600 45900 0 +1345} - {2484741600 49500 1 +1345} - {2501071200 45900 0 +1345} - {2516191200 49500 1 +1345} - {2532520800 45900 0 +1345} - {2547640800 49500 1 +1345} - {2563970400 45900 0 +1345} - {2579090400 49500 1 +1345} - {2596024800 45900 0 +1345} - {2611144800 49500 1 +1345} - {2627474400 45900 0 +1345} - {2642594400 49500 1 +1345} - {2658924000 45900 0 +1345} - {2674044000 49500 1 +1345} - {2690373600 45900 0 +1345} - {2705493600 49500 1 +1345} - {2721823200 45900 0 +1345} - {2736943200 49500 1 +1345} - {2753272800 45900 0 +1345} - {2768997600 49500 1 +1345} - {2785327200 45900 0 +1345} - {2800447200 49500 1 +1345} - {2816776800 45900 0 +1345} - {2831896800 49500 1 +1345} - {2848226400 45900 0 +1345} - {2863346400 49500 1 +1345} - {2879676000 45900 0 +1345} - {2894796000 49500 1 +1345} - {2911125600 45900 0 +1345} - {2926245600 49500 1 +1345} - {2942575200 45900 0 +1345} - {2958300000 49500 1 +1345} - {2974629600 45900 0 +1345} - {2989749600 49500 1 +1345} - {3006079200 45900 0 +1345} - {3021199200 49500 1 +1345} - {3037528800 45900 0 +1345} - {3052648800 49500 1 +1345} - {3068978400 45900 0 +1345} - {3084098400 49500 1 +1345} - {3100428000 45900 0 +1345} - {3116152800 49500 1 +1345} - {3132482400 45900 0 +1345} - {3147602400 49500 1 +1345} - {3163932000 45900 0 +1345} - {3179052000 49500 1 +1345} - {3195381600 45900 0 +1345} - {3210501600 49500 1 +1345} - {3226831200 45900 0 +1345} - {3241951200 49500 1 +1345} - {3258280800 45900 0 +1345} - {3273400800 49500 1 +1345} - {3289730400 45900 0 +1345} - {3305455200 49500 1 +1345} - {3321784800 45900 0 +1345} - {3336904800 49500 1 +1345} - {3353234400 45900 0 +1345} - {3368354400 49500 1 +1345} - {3384684000 45900 0 +1345} - {3399804000 49500 1 +1345} - {3416133600 45900 0 +1345} - {3431253600 49500 1 +1345} - {3447583200 45900 0 +1345} - {3462703200 49500 1 +1345} - {3479637600 45900 0 +1345} - {3494757600 49500 1 +1345} - {3511087200 45900 0 +1345} - {3526207200 49500 1 +1345} - {3542536800 45900 0 +1345} - {3557656800 49500 1 +1345} - {3573986400 45900 0 +1345} - {3589106400 49500 1 +1345} - {3605436000 45900 0 +1345} - {3620556000 49500 1 +1345} - {3636885600 45900 0 +1345} - {3652610400 49500 1 +1345} - {3668940000 45900 0 +1345} - {3684060000 49500 1 +1345} - {3700389600 45900 0 +1345} - {3715509600 49500 1 +1345} - {3731839200 45900 0 +1345} - {3746959200 49500 1 +1345} - {3763288800 45900 0 +1345} - {3778408800 49500 1 +1345} - {3794738400 45900 0 +1345} - {3809858400 49500 1 +1345} - {3826188000 45900 0 +1345} - {3841912800 49500 1 +1345} - {3858242400 45900 0 +1345} - {3873362400 49500 1 +1345} - {3889692000 45900 0 +1345} - {3904812000 49500 1 +1345} - {3921141600 45900 0 +1345} - {3936261600 49500 1 +1345} - {3952591200 45900 0 +1345} - {3967711200 49500 1 +1345} - {3984040800 45900 0 +1345} - {3999765600 49500 1 +1345} - {4016095200 45900 0 +1345} - {4031215200 49500 1 +1345} - {4047544800 45900 0 +1345} - {4062664800 49500 1 +1345} - {4078994400 45900 0 +1345} - {4094114400 49500 1 +1345} + {-757426500 45900 0 +1245} + {152632800 49500 1 +1245} + {162309600 45900 0 +1245} + {183477600 49500 1 +1245} + {194968800 45900 0 +1245} + {215532000 49500 1 +1245} + {226418400 45900 0 +1245} + {246981600 49500 1 +1245} + {257868000 45900 0 +1245} + {278431200 49500 1 +1245} + {289317600 45900 0 +1245} + {309880800 49500 1 +1245} + {320767200 45900 0 +1245} + {341330400 49500 1 +1245} + {352216800 45900 0 +1245} + {372780000 49500 1 +1245} + {384271200 45900 0 +1245} + {404834400 49500 1 +1245} + {415720800 45900 0 +1245} + {436284000 49500 1 +1245} + {447170400 45900 0 +1245} + {467733600 49500 1 +1245} + {478620000 45900 0 +1245} + {499183200 49500 1 +1245} + {510069600 45900 0 +1245} + {530632800 49500 1 +1245} + {541519200 45900 0 +1245} + {562082400 49500 1 +1245} + {573573600 45900 0 +1245} + {594136800 49500 1 +1245} + {605023200 45900 0 +1245} + {623772000 49500 1 +1245} + {637682400 45900 0 +1245} + {655221600 49500 1 +1245} + {669132000 45900 0 +1245} + {686671200 49500 1 +1245} + {700581600 45900 0 +1245} + {718120800 49500 1 +1245} + {732636000 45900 0 +1245} + {749570400 49500 1 +1245} + {764085600 45900 0 +1245} + {781020000 49500 1 +1245} + {795535200 45900 0 +1245} + {812469600 49500 1 +1245} + {826984800 45900 0 +1245} + {844524000 49500 1 +1245} + {858434400 45900 0 +1245} + {875973600 49500 1 +1245} + {889884000 45900 0 +1245} + {907423200 49500 1 +1245} + {921938400 45900 0 +1245} + {938872800 49500 1 +1245} + {953388000 45900 0 +1245} + {970322400 49500 1 +1245} + {984837600 45900 0 +1245} + {1002376800 49500 1 +1245} + {1016287200 45900 0 +1245} + {1033826400 49500 1 +1245} + {1047736800 45900 0 +1245} + {1065276000 49500 1 +1245} + {1079791200 45900 0 +1245} + {1096725600 49500 1 +1245} + {1111240800 45900 0 +1245} + {1128175200 49500 1 +1245} + {1142690400 45900 0 +1245} + {1159624800 49500 1 +1245} + {1174140000 45900 0 +1245} + {1191074400 49500 1 +1245} + {1207404000 45900 0 +1245} + {1222524000 49500 1 +1245} + {1238853600 45900 0 +1245} + {1253973600 49500 1 +1245} + {1270303200 45900 0 +1245} + {1285423200 49500 1 +1245} + {1301752800 45900 0 +1245} + {1316872800 49500 1 +1245} + {1333202400 45900 0 +1245} + {1348927200 49500 1 +1245} + {1365256800 45900 0 +1245} + {1380376800 49500 1 +1245} + {1396706400 45900 0 +1245} + {1411826400 49500 1 +1245} + {1428156000 45900 0 +1245} + {1443276000 49500 1 +1245} + {1459605600 45900 0 +1245} + {1474725600 49500 1 +1245} + {1491055200 45900 0 +1245} + {1506175200 49500 1 +1245} + {1522504800 45900 0 +1245} + {1538229600 49500 1 +1245} + {1554559200 45900 0 +1245} + {1569679200 49500 1 +1245} + {1586008800 45900 0 +1245} + {1601128800 49500 1 +1245} + {1617458400 45900 0 +1245} + {1632578400 49500 1 +1245} + {1648908000 45900 0 +1245} + {1664028000 49500 1 +1245} + {1680357600 45900 0 +1245} + {1695477600 49500 1 +1245} + {1712412000 45900 0 +1245} + {1727532000 49500 1 +1245} + {1743861600 45900 0 +1245} + {1758981600 49500 1 +1245} + {1775311200 45900 0 +1245} + {1790431200 49500 1 +1245} + {1806760800 45900 0 +1245} + {1821880800 49500 1 +1245} + {1838210400 45900 0 +1245} + {1853330400 49500 1 +1245} + {1869660000 45900 0 +1245} + {1885384800 49500 1 +1245} + {1901714400 45900 0 +1245} + {1916834400 49500 1 +1245} + {1933164000 45900 0 +1245} + {1948284000 49500 1 +1245} + {1964613600 45900 0 +1245} + {1979733600 49500 1 +1245} + {1996063200 45900 0 +1245} + {2011183200 49500 1 +1245} + {2027512800 45900 0 +1245} + {2042632800 49500 1 +1245} + {2058962400 45900 0 +1245} + {2074687200 49500 1 +1245} + {2091016800 45900 0 +1245} + {2106136800 49500 1 +1245} + {2122466400 45900 0 +1245} + {2137586400 49500 1 +1245} + {2153916000 45900 0 +1245} + {2169036000 49500 1 +1245} + {2185365600 45900 0 +1245} + {2200485600 49500 1 +1245} + {2216815200 45900 0 +1245} + {2232540000 49500 1 +1245} + {2248869600 45900 0 +1245} + {2263989600 49500 1 +1245} + {2280319200 45900 0 +1245} + {2295439200 49500 1 +1245} + {2311768800 45900 0 +1245} + {2326888800 49500 1 +1245} + {2343218400 45900 0 +1245} + {2358338400 49500 1 +1245} + {2374668000 45900 0 +1245} + {2389788000 49500 1 +1245} + {2406117600 45900 0 +1245} + {2421842400 49500 1 +1245} + {2438172000 45900 0 +1245} + {2453292000 49500 1 +1245} + {2469621600 45900 0 +1245} + {2484741600 49500 1 +1245} + {2501071200 45900 0 +1245} + {2516191200 49500 1 +1245} + {2532520800 45900 0 +1245} + {2547640800 49500 1 +1245} + {2563970400 45900 0 +1245} + {2579090400 49500 1 +1245} + {2596024800 45900 0 +1245} + {2611144800 49500 1 +1245} + {2627474400 45900 0 +1245} + {2642594400 49500 1 +1245} + {2658924000 45900 0 +1245} + {2674044000 49500 1 +1245} + {2690373600 45900 0 +1245} + {2705493600 49500 1 +1245} + {2721823200 45900 0 +1245} + {2736943200 49500 1 +1245} + {2753272800 45900 0 +1245} + {2768997600 49500 1 +1245} + {2785327200 45900 0 +1245} + {2800447200 49500 1 +1245} + {2816776800 45900 0 +1245} + {2831896800 49500 1 +1245} + {2848226400 45900 0 +1245} + {2863346400 49500 1 +1245} + {2879676000 45900 0 +1245} + {2894796000 49500 1 +1245} + {2911125600 45900 0 +1245} + {2926245600 49500 1 +1245} + {2942575200 45900 0 +1245} + {2958300000 49500 1 +1245} + {2974629600 45900 0 +1245} + {2989749600 49500 1 +1245} + {3006079200 45900 0 +1245} + {3021199200 49500 1 +1245} + {3037528800 45900 0 +1245} + {3052648800 49500 1 +1245} + {3068978400 45900 0 +1245} + {3084098400 49500 1 +1245} + {3100428000 45900 0 +1245} + {3116152800 49500 1 +1245} + {3132482400 45900 0 +1245} + {3147602400 49500 1 +1245} + {3163932000 45900 0 +1245} + {3179052000 49500 1 +1245} + {3195381600 45900 0 +1245} + {3210501600 49500 1 +1245} + {3226831200 45900 0 +1245} + {3241951200 49500 1 +1245} + {3258280800 45900 0 +1245} + {3273400800 49500 1 +1245} + {3289730400 45900 0 +1245} + {3305455200 49500 1 +1245} + {3321784800 45900 0 +1245} + {3336904800 49500 1 +1245} + {3353234400 45900 0 +1245} + {3368354400 49500 1 +1245} + {3384684000 45900 0 +1245} + {3399804000 49500 1 +1245} + {3416133600 45900 0 +1245} + {3431253600 49500 1 +1245} + {3447583200 45900 0 +1245} + {3462703200 49500 1 +1245} + {3479637600 45900 0 +1245} + {3494757600 49500 1 +1245} + {3511087200 45900 0 +1245} + {3526207200 49500 1 +1245} + {3542536800 45900 0 +1245} + {3557656800 49500 1 +1245} + {3573986400 45900 0 +1245} + {3589106400 49500 1 +1245} + {3605436000 45900 0 +1245} + {3620556000 49500 1 +1245} + {3636885600 45900 0 +1245} + {3652610400 49500 1 +1245} + {3668940000 45900 0 +1245} + {3684060000 49500 1 +1245} + {3700389600 45900 0 +1245} + {3715509600 49500 1 +1245} + {3731839200 45900 0 +1245} + {3746959200 49500 1 +1245} + {3763288800 45900 0 +1245} + {3778408800 49500 1 +1245} + {3794738400 45900 0 +1245} + {3809858400 49500 1 +1245} + {3826188000 45900 0 +1245} + {3841912800 49500 1 +1245} + {3858242400 45900 0 +1245} + {3873362400 49500 1 +1245} + {3889692000 45900 0 +1245} + {3904812000 49500 1 +1245} + {3921141600 45900 0 +1245} + {3936261600 49500 1 +1245} + {3952591200 45900 0 +1245} + {3967711200 49500 1 +1245} + {3984040800 45900 0 +1245} + {3999765600 49500 1 +1245} + {4016095200 45900 0 +1245} + {4031215200 49500 1 +1245} + {4047544800 45900 0 +1245} + {4062664800 49500 1 +1245} + {4078994400 45900 0 +1245} + {4094114400 49500 1 +1245} } diff --git a/library/tzdata/Pacific/Easter b/library/tzdata/Pacific/Easter index 474a32b..a087cd0 100644 --- a/library/tzdata/Pacific/Easter +++ b/library/tzdata/Pacific/Easter @@ -4,265 +4,265 @@ set TZData(:Pacific/Easter) { {-9223372036854775808 -26248 0 LMT} {-2524495352 -26248 0 EMT} {-1178124152 -25200 0 -07} - {-36619200 -21600 1 -06} + {-36619200 -21600 1 -07} {-23922000 -25200 0 -07} - {-3355200 -21600 1 -06} + {-3355200 -21600 1 -07} {7527600 -25200 0 -07} - {24465600 -21600 1 -06} + {24465600 -21600 1 -07} {37767600 -25200 0 -07} - {55915200 -21600 1 -06} + {55915200 -21600 1 -07} {69217200 -25200 0 -07} - {87969600 -21600 1 -06} + {87969600 -21600 1 -07} {100666800 -25200 0 -07} - {118209600 -21600 1 -06} + {118209600 -21600 1 -07} {132116400 -25200 0 -07} - {150868800 -21600 1 -06} + {150868800 -21600 1 -07} {163566000 -25200 0 -07} - {182318400 -21600 1 -06} + {182318400 -21600 1 -07} {195620400 -25200 0 -07} - {213768000 -21600 1 -06} + {213768000 -21600 1 -07} {227070000 -25200 0 -07} - {245217600 -21600 1 -06} + {245217600 -21600 1 -07} {258519600 -25200 0 -07} - {277272000 -21600 1 -06} + {277272000 -21600 1 -07} {289969200 -25200 0 -07} - {308721600 -21600 1 -06} + {308721600 -21600 1 -07} {321418800 -25200 0 -07} - {340171200 -21600 1 -06} + {340171200 -21600 1 -07} {353473200 -25200 0 -07} - {371620800 -21600 1 -06} + {371620800 -21600 1 -07} {384922800 -21600 0 -06} - {403070400 -18000 1 -05} + {403070400 -18000 1 -06} {416372400 -21600 0 -06} - {434520000 -18000 1 -05} + {434520000 -18000 1 -06} {447822000 -21600 0 -06} - {466574400 -18000 1 -05} + {466574400 -18000 1 -06} {479271600 -21600 0 -06} - {498024000 -18000 1 -05} + {498024000 -18000 1 -06} {510721200 -21600 0 -06} - {529473600 -18000 1 -05} + {529473600 -18000 1 -06} {545194800 -21600 0 -06} - {560923200 -18000 1 -05} + {560923200 -18000 1 -06} {574225200 -21600 0 -06} - {592372800 -18000 1 -05} + {592372800 -18000 1 -06} {605674800 -21600 0 -06} - {624427200 -18000 1 -05} + {624427200 -18000 1 -06} {637124400 -21600 0 -06} - {653457600 -18000 1 -05} + {653457600 -18000 1 -06} {668574000 -21600 0 -06} - {687326400 -18000 1 -05} + {687326400 -18000 1 -06} {700628400 -21600 0 -06} - {718776000 -18000 1 -05} + {718776000 -18000 1 -06} {732078000 -21600 0 -06} - {750225600 -18000 1 -05} + {750225600 -18000 1 -06} {763527600 -21600 0 -06} - {781675200 -18000 1 -05} + {781675200 -18000 1 -06} {794977200 -21600 0 -06} - {813729600 -18000 1 -05} + {813729600 -18000 1 -06} {826426800 -21600 0 -06} - {845179200 -18000 1 -05} + {845179200 -18000 1 -06} {859690800 -21600 0 -06} - {876628800 -18000 1 -05} + {876628800 -18000 1 -06} {889930800 -21600 0 -06} - {906868800 -18000 1 -05} + {906868800 -18000 1 -06} {923194800 -21600 0 -06} - {939528000 -18000 1 -05} + {939528000 -18000 1 -06} {952830000 -21600 0 -06} - {971582400 -18000 1 -05} + {971582400 -18000 1 -06} {984279600 -21600 0 -06} - {1003032000 -18000 1 -05} + {1003032000 -18000 1 -06} {1015729200 -21600 0 -06} - {1034481600 -18000 1 -05} + {1034481600 -18000 1 -06} {1047178800 -21600 0 -06} - {1065931200 -18000 1 -05} + {1065931200 -18000 1 -06} {1079233200 -21600 0 -06} - {1097380800 -18000 1 -05} + {1097380800 -18000 1 -06} {1110682800 -21600 0 -06} - {1128830400 -18000 1 -05} + {1128830400 -18000 1 -06} {1142132400 -21600 0 -06} - {1160884800 -18000 1 -05} + {1160884800 -18000 1 -06} {1173582000 -21600 0 -06} - {1192334400 -18000 1 -05} + {1192334400 -18000 1 -06} {1206846000 -21600 0 -06} - {1223784000 -18000 1 -05} + {1223784000 -18000 1 -06} {1237086000 -21600 0 -06} - {1255233600 -18000 1 -05} + {1255233600 -18000 1 -06} {1270350000 -21600 0 -06} - {1286683200 -18000 1 -05} + {1286683200 -18000 1 -06} {1304823600 -21600 0 -06} - {1313899200 -18000 1 -05} + {1313899200 -18000 1 -06} {1335668400 -21600 0 -06} - {1346558400 -18000 1 -05} + {1346558400 -18000 1 -06} {1367118000 -21600 0 -06} - {1378612800 -18000 1 -05} + {1378612800 -18000 1 -06} {1398567600 -21600 0 -06} - {1410062400 -18000 1 -05} + {1410062400 -18000 1 -06} {1463281200 -21600 0 -06} - {1471147200 -18000 1 -05} + {1471147200 -18000 1 -06} {1494730800 -21600 0 -06} - {1502596800 -18000 1 -05} + {1502596800 -18000 1 -06} {1526180400 -21600 0 -06} - {1534046400 -18000 1 -05} + {1534046400 -18000 1 -06} {1557630000 -21600 0 -06} - {1565496000 -18000 1 -05} + {1565496000 -18000 1 -06} {1589079600 -21600 0 -06} - {1596945600 -18000 1 -05} + {1596945600 -18000 1 -06} {1620529200 -21600 0 -06} - {1629000000 -18000 1 -05} + {1629000000 -18000 1 -06} {1652583600 -21600 0 -06} - {1660449600 -18000 1 -05} + {1660449600 -18000 1 -06} {1684033200 -21600 0 -06} - {1691899200 -18000 1 -05} + {1691899200 -18000 1 -06} {1715482800 -21600 0 -06} - {1723348800 -18000 1 -05} + {1723348800 -18000 1 -06} {1746932400 -21600 0 -06} - {1754798400 -18000 1 -05} + {1754798400 -18000 1 -06} {1778382000 -21600 0 -06} - {1786248000 -18000 1 -05} + {1786248000 -18000 1 -06} {1809831600 -21600 0 -06} - {1818302400 -18000 1 -05} + {1818302400 -18000 1 -06} {1841886000 -21600 0 -06} - {1849752000 -18000 1 -05} + {1849752000 -18000 1 -06} {1873335600 -21600 0 -06} - {1881201600 -18000 1 -05} + {1881201600 -18000 1 -06} {1904785200 -21600 0 -06} - {1912651200 -18000 1 -05} + {1912651200 -18000 1 -06} {1936234800 -21600 0 -06} - {1944100800 -18000 1 -05} + {1944100800 -18000 1 -06} {1967684400 -21600 0 -06} - {1976155200 -18000 1 -05} + {1976155200 -18000 1 -06} {1999738800 -21600 0 -06} - {2007604800 -18000 1 -05} + {2007604800 -18000 1 -06} {2031188400 -21600 0 -06} - {2039054400 -18000 1 -05} + {2039054400 -18000 1 -06} {2062638000 -21600 0 -06} - {2070504000 -18000 1 -05} + {2070504000 -18000 1 -06} {2094087600 -21600 0 -06} - {2101953600 -18000 1 -05} + {2101953600 -18000 1 -06} {2125537200 -21600 0 -06} - {2133403200 -18000 1 -05} + {2133403200 -18000 1 -06} {2156986800 -21600 0 -06} - {2165457600 -18000 1 -05} + {2165457600 -18000 1 -06} {2189041200 -21600 0 -06} - {2196907200 -18000 1 -05} + {2196907200 -18000 1 -06} {2220490800 -21600 0 -06} - {2228356800 -18000 1 -05} + {2228356800 -18000 1 -06} {2251940400 -21600 0 -06} - {2259806400 -18000 1 -05} + {2259806400 -18000 1 -06} {2283390000 -21600 0 -06} - {2291256000 -18000 1 -05} + {2291256000 -18000 1 -06} {2314839600 -21600 0 -06} - {2322705600 -18000 1 -05} + {2322705600 -18000 1 -06} {2346894000 -21600 0 -06} - {2354760000 -18000 1 -05} + {2354760000 -18000 1 -06} {2378343600 -21600 0 -06} - {2386209600 -18000 1 -05} + {2386209600 -18000 1 -06} {2409793200 -21600 0 -06} - {2417659200 -18000 1 -05} + {2417659200 -18000 1 -06} {2441242800 -21600 0 -06} - {2449108800 -18000 1 -05} + {2449108800 -18000 1 -06} {2472692400 -21600 0 -06} - {2480558400 -18000 1 -05} + {2480558400 -18000 1 -06} {2504142000 -21600 0 -06} - {2512612800 -18000 1 -05} + {2512612800 -18000 1 -06} {2536196400 -21600 0 -06} - {2544062400 -18000 1 -05} + {2544062400 -18000 1 -06} {2567646000 -21600 0 -06} - {2575512000 -18000 1 -05} + {2575512000 -18000 1 -06} {2599095600 -21600 0 -06} - {2606961600 -18000 1 -05} + {2606961600 -18000 1 -06} {2630545200 -21600 0 -06} - {2638411200 -18000 1 -05} + {2638411200 -18000 1 -06} {2661994800 -21600 0 -06} - {2669860800 -18000 1 -05} + {2669860800 -18000 1 -06} {2693444400 -21600 0 -06} - {2701915200 -18000 1 -05} + {2701915200 -18000 1 -06} {2725498800 -21600 0 -06} - {2733364800 -18000 1 -05} + {2733364800 -18000 1 -06} {2756948400 -21600 0 -06} - {2764814400 -18000 1 -05} + {2764814400 -18000 1 -06} {2788398000 -21600 0 -06} - {2796264000 -18000 1 -05} + {2796264000 -18000 1 -06} {2819847600 -21600 0 -06} - {2827713600 -18000 1 -05} + {2827713600 -18000 1 -06} {2851297200 -21600 0 -06} - {2859768000 -18000 1 -05} + {2859768000 -18000 1 -06} {2883351600 -21600 0 -06} - {2891217600 -18000 1 -05} + {2891217600 -18000 1 -06} {2914801200 -21600 0 -06} - {2922667200 -18000 1 -05} + {2922667200 -18000 1 -06} {2946250800 -21600 0 -06} - {2954116800 -18000 1 -05} + {2954116800 -18000 1 -06} {2977700400 -21600 0 -06} - {2985566400 -18000 1 -05} + {2985566400 -18000 1 -06} {3009150000 -21600 0 -06} - {3017016000 -18000 1 -05} + {3017016000 -18000 1 -06} {3040599600 -21600 0 -06} - {3049070400 -18000 1 -05} + {3049070400 -18000 1 -06} {3072654000 -21600 0 -06} - {3080520000 -18000 1 -05} + {3080520000 -18000 1 -06} {3104103600 -21600 0 -06} - {3111969600 -18000 1 -05} + {3111969600 -18000 1 -06} {3135553200 -21600 0 -06} - {3143419200 -18000 1 -05} + {3143419200 -18000 1 -06} {3167002800 -21600 0 -06} - {3174868800 -18000 1 -05} + {3174868800 -18000 1 -06} {3198452400 -21600 0 -06} - {3206318400 -18000 1 -05} + {3206318400 -18000 1 -06} {3230506800 -21600 0 -06} - {3238372800 -18000 1 -05} + {3238372800 -18000 1 -06} {3261956400 -21600 0 -06} - {3269822400 -18000 1 -05} + {3269822400 -18000 1 -06} {3293406000 -21600 0 -06} - {3301272000 -18000 1 -05} + {3301272000 -18000 1 -06} {3324855600 -21600 0 -06} - {3332721600 -18000 1 -05} + {3332721600 -18000 1 -06} {3356305200 -21600 0 -06} - {3364171200 -18000 1 -05} + {3364171200 -18000 1 -06} {3387754800 -21600 0 -06} - {3396225600 -18000 1 -05} + {3396225600 -18000 1 -06} {3419809200 -21600 0 -06} - {3427675200 -18000 1 -05} + {3427675200 -18000 1 -06} {3451258800 -21600 0 -06} - {3459124800 -18000 1 -05} + {3459124800 -18000 1 -06} {3482708400 -21600 0 -06} - {3490574400 -18000 1 -05} + {3490574400 -18000 1 -06} {3514158000 -21600 0 -06} - {3522024000 -18000 1 -05} + {3522024000 -18000 1 -06} {3545607600 -21600 0 -06} - {3553473600 -18000 1 -05} + {3553473600 -18000 1 -06} {3577057200 -21600 0 -06} - {3585528000 -18000 1 -05} + {3585528000 -18000 1 -06} {3609111600 -21600 0 -06} - {3616977600 -18000 1 -05} + {3616977600 -18000 1 -06} {3640561200 -21600 0 -06} - {3648427200 -18000 1 -05} + {3648427200 -18000 1 -06} {3672010800 -21600 0 -06} - {3679876800 -18000 1 -05} + {3679876800 -18000 1 -06} {3703460400 -21600 0 -06} - {3711326400 -18000 1 -05} + {3711326400 -18000 1 -06} {3734910000 -21600 0 -06} - {3743380800 -18000 1 -05} + {3743380800 -18000 1 -06} {3766964400 -21600 0 -06} - {3774830400 -18000 1 -05} + {3774830400 -18000 1 -06} {3798414000 -21600 0 -06} - {3806280000 -18000 1 -05} + {3806280000 -18000 1 -06} {3829863600 -21600 0 -06} - {3837729600 -18000 1 -05} + {3837729600 -18000 1 -06} {3861313200 -21600 0 -06} - {3869179200 -18000 1 -05} + {3869179200 -18000 1 -06} {3892762800 -21600 0 -06} - {3900628800 -18000 1 -05} + {3900628800 -18000 1 -06} {3924212400 -21600 0 -06} - {3932683200 -18000 1 -05} + {3932683200 -18000 1 -06} {3956266800 -21600 0 -06} - {3964132800 -18000 1 -05} + {3964132800 -18000 1 -06} {3987716400 -21600 0 -06} - {3995582400 -18000 1 -05} + {3995582400 -18000 1 -06} {4019166000 -21600 0 -06} - {4027032000 -18000 1 -05} + {4027032000 -18000 1 -06} {4050615600 -21600 0 -06} - {4058481600 -18000 1 -05} + {4058481600 -18000 1 -06} {4082065200 -21600 0 -06} - {4089931200 -18000 1 -05} + {4089931200 -18000 1 -06} } diff --git a/library/tzdata/Pacific/Efate b/library/tzdata/Pacific/Efate index a43852e..a026ee1 100644 --- a/library/tzdata/Pacific/Efate +++ b/library/tzdata/Pacific/Efate @@ -3,24 +3,24 @@ set TZData(:Pacific/Efate) { {-9223372036854775808 40396 0 LMT} {-1829387596 39600 0 +11} - {433256400 43200 1 +12} + {433256400 43200 1 +11} {448977600 39600 0 +11} - {467298000 43200 1 +12} + {467298000 43200 1 +11} {480427200 39600 0 +11} - {496760400 43200 1 +12} + {496760400 43200 1 +11} {511876800 39600 0 +11} - {528210000 43200 1 +12} + {528210000 43200 1 +11} {543931200 39600 0 +11} - {559659600 43200 1 +12} + {559659600 43200 1 +11} {575380800 39600 0 +11} - {591109200 43200 1 +12} + {591109200 43200 1 +11} {606830400 39600 0 +11} - {622558800 43200 1 +12} + {622558800 43200 1 +11} {638280000 39600 0 +11} - {654008400 43200 1 +12} + {654008400 43200 1 +11} {669729600 39600 0 +11} - {686062800 43200 1 +12} + {686062800 43200 1 +11} {696340800 39600 0 +11} - {719931600 43200 1 +12} + {719931600 43200 1 +11} {727790400 39600 0 +11} } diff --git a/library/tzdata/Pacific/Enderbury b/library/tzdata/Pacific/Enderbury index 6abd57e..48eaafe 100644 --- a/library/tzdata/Pacific/Enderbury +++ b/library/tzdata/Pacific/Enderbury @@ -4,5 +4,5 @@ set TZData(:Pacific/Enderbury) { {-9223372036854775808 -41060 0 LMT} {-2177411740 -43200 0 -12} {307627200 -39600 0 -11} - {788958000 46800 0 +13} + {788871600 46800 0 +13} } diff --git a/library/tzdata/Pacific/Fiji b/library/tzdata/Pacific/Fiji index f9d393c..610c191 100644 --- a/library/tzdata/Pacific/Fiji +++ b/library/tzdata/Pacific/Fiji @@ -3,189 +3,189 @@ set TZData(:Pacific/Fiji) { {-9223372036854775808 42944 0 LMT} {-1709985344 43200 0 +12} - {909842400 46800 1 +13} + {909842400 46800 1 +12} {920124000 43200 0 +12} - {941896800 46800 1 +13} + {941896800 46800 1 +12} {951573600 43200 0 +12} - {1259416800 46800 1 +13} + {1259416800 46800 1 +12} {1269698400 43200 0 +12} - {1287842400 46800 1 +13} + {1287842400 46800 1 +12} {1299333600 43200 0 +12} - {1319292000 46800 1 +13} + {1319292000 46800 1 +12} {1327154400 43200 0 +12} - {1350741600 46800 1 +13} + {1350741600 46800 1 +12} {1358604000 43200 0 +12} - {1382796000 46800 1 +13} + {1382796000 46800 1 +12} {1390050000 43200 0 +12} - {1414850400 46800 1 +13} + {1414850400 46800 1 +12} {1421503200 43200 0 +12} - {1446300000 46800 1 +13} + {1446300000 46800 1 +12} {1452952800 43200 0 +12} - {1478354400 46800 1 +13} + {1478354400 46800 1 +12} {1484402400 43200 0 +12} - {1509804000 46800 1 +13} + {1509804000 46800 1 +12} {1515852000 43200 0 +12} - {1541253600 46800 1 +13} + {1541253600 46800 1 +12} {1547906400 43200 0 +12} - {1572703200 46800 1 +13} + {1572703200 46800 1 +12} {1579356000 43200 0 +12} - {1604152800 46800 1 +13} + {1604152800 46800 1 +12} {1610805600 43200 0 +12} - {1636207200 46800 1 +13} + {1636207200 46800 1 +12} {1642255200 43200 0 +12} - {1667656800 46800 1 +13} + {1667656800 46800 1 +12} {1673704800 43200 0 +12} - {1699106400 46800 1 +13} + {1699106400 46800 1 +12} {1705154400 43200 0 +12} - {1730556000 46800 1 +13} + {1730556000 46800 1 +12} {1737208800 43200 0 +12} - {1762005600 46800 1 +13} + {1762005600 46800 1 +12} {1768658400 43200 0 +12} - {1793455200 46800 1 +13} + {1793455200 46800 1 +12} {1800108000 43200 0 +12} - {1825509600 46800 1 +13} + {1825509600 46800 1 +12} {1831557600 43200 0 +12} - {1856959200 46800 1 +13} + {1856959200 46800 1 +12} {1863007200 43200 0 +12} - {1888408800 46800 1 +13} + {1888408800 46800 1 +12} {1895061600 43200 0 +12} - {1919858400 46800 1 +13} + {1919858400 46800 1 +12} {1926511200 43200 0 +12} - {1951308000 46800 1 +13} + {1951308000 46800 1 +12} {1957960800 43200 0 +12} - {1983362400 46800 1 +13} + {1983362400 46800 1 +12} {1989410400 43200 0 +12} - {2014812000 46800 1 +13} + {2014812000 46800 1 +12} {2020860000 43200 0 +12} - {2046261600 46800 1 +13} + {2046261600 46800 1 +12} {2052309600 43200 0 +12} - {2077711200 46800 1 +13} + {2077711200 46800 1 +12} {2084364000 43200 0 +12} - {2109160800 46800 1 +13} + {2109160800 46800 1 +12} {2115813600 43200 0 +12} - {2140610400 46800 1 +13} + {2140610400 46800 1 +12} {2147263200 43200 0 +12} - {2172664800 46800 1 +13} + {2172664800 46800 1 +12} {2178712800 43200 0 +12} - {2204114400 46800 1 +13} + {2204114400 46800 1 +12} {2210162400 43200 0 +12} - {2235564000 46800 1 +13} + {2235564000 46800 1 +12} {2242216800 43200 0 +12} - {2267013600 46800 1 +13} + {2267013600 46800 1 +12} {2273666400 43200 0 +12} - {2298463200 46800 1 +13} + {2298463200 46800 1 +12} {2305116000 43200 0 +12} - {2329912800 46800 1 +13} + {2329912800 46800 1 +12} {2336565600 43200 0 +12} - {2361967200 46800 1 +13} + {2361967200 46800 1 +12} {2368015200 43200 0 +12} - {2393416800 46800 1 +13} + {2393416800 46800 1 +12} {2399464800 43200 0 +12} - {2424866400 46800 1 +13} + {2424866400 46800 1 +12} {2431519200 43200 0 +12} - {2456316000 46800 1 +13} + {2456316000 46800 1 +12} {2462968800 43200 0 +12} - {2487765600 46800 1 +13} + {2487765600 46800 1 +12} {2494418400 43200 0 +12} - {2519820000 46800 1 +13} + {2519820000 46800 1 +12} {2525868000 43200 0 +12} - {2551269600 46800 1 +13} + {2551269600 46800 1 +12} {2557317600 43200 0 +12} - {2582719200 46800 1 +13} + {2582719200 46800 1 +12} {2588767200 43200 0 +12} - {2614168800 46800 1 +13} + {2614168800 46800 1 +12} {2620821600 43200 0 +12} - {2645618400 46800 1 +13} + {2645618400 46800 1 +12} {2652271200 43200 0 +12} - {2677068000 46800 1 +13} + {2677068000 46800 1 +12} {2683720800 43200 0 +12} - {2709122400 46800 1 +13} + {2709122400 46800 1 +12} {2715170400 43200 0 +12} - {2740572000 46800 1 +13} + {2740572000 46800 1 +12} {2746620000 43200 0 +12} - {2772021600 46800 1 +13} + {2772021600 46800 1 +12} {2778674400 43200 0 +12} - {2803471200 46800 1 +13} + {2803471200 46800 1 +12} {2810124000 43200 0 +12} - {2834920800 46800 1 +13} + {2834920800 46800 1 +12} {2841573600 43200 0 +12} - {2866975200 46800 1 +13} + {2866975200 46800 1 +12} {2873023200 43200 0 +12} - {2898424800 46800 1 +13} + {2898424800 46800 1 +12} {2904472800 43200 0 +12} - {2929874400 46800 1 +13} + {2929874400 46800 1 +12} {2935922400 43200 0 +12} - {2961324000 46800 1 +13} + {2961324000 46800 1 +12} {2967976800 43200 0 +12} - {2992773600 46800 1 +13} + {2992773600 46800 1 +12} {2999426400 43200 0 +12} - {3024223200 46800 1 +13} + {3024223200 46800 1 +12} {3030876000 43200 0 +12} - {3056277600 46800 1 +13} + {3056277600 46800 1 +12} {3062325600 43200 0 +12} - {3087727200 46800 1 +13} + {3087727200 46800 1 +12} {3093775200 43200 0 +12} - {3119176800 46800 1 +13} + {3119176800 46800 1 +12} {3125829600 43200 0 +12} - {3150626400 46800 1 +13} + {3150626400 46800 1 +12} {3157279200 43200 0 +12} - {3182076000 46800 1 +13} + {3182076000 46800 1 +12} {3188728800 43200 0 +12} - {3213525600 46800 1 +13} + {3213525600 46800 1 +12} {3220178400 43200 0 +12} - {3245580000 46800 1 +13} + {3245580000 46800 1 +12} {3251628000 43200 0 +12} - {3277029600 46800 1 +13} + {3277029600 46800 1 +12} {3283077600 43200 0 +12} - {3308479200 46800 1 +13} + {3308479200 46800 1 +12} {3315132000 43200 0 +12} - {3339928800 46800 1 +13} + {3339928800 46800 1 +12} {3346581600 43200 0 +12} - {3371378400 46800 1 +13} + {3371378400 46800 1 +12} {3378031200 43200 0 +12} - {3403432800 46800 1 +13} + {3403432800 46800 1 +12} {3409480800 43200 0 +12} - {3434882400 46800 1 +13} + {3434882400 46800 1 +12} {3440930400 43200 0 +12} - {3466332000 46800 1 +13} + {3466332000 46800 1 +12} {3472380000 43200 0 +12} - {3497781600 46800 1 +13} + {3497781600 46800 1 +12} {3504434400 43200 0 +12} - {3529231200 46800 1 +13} + {3529231200 46800 1 +12} {3535884000 43200 0 +12} - {3560680800 46800 1 +13} + {3560680800 46800 1 +12} {3567333600 43200 0 +12} - {3592735200 46800 1 +13} + {3592735200 46800 1 +12} {3598783200 43200 0 +12} - {3624184800 46800 1 +13} + {3624184800 46800 1 +12} {3630232800 43200 0 +12} - {3655634400 46800 1 +13} + {3655634400 46800 1 +12} {3662287200 43200 0 +12} - {3687084000 46800 1 +13} + {3687084000 46800 1 +12} {3693736800 43200 0 +12} - {3718533600 46800 1 +13} + {3718533600 46800 1 +12} {3725186400 43200 0 +12} - {3750588000 46800 1 +13} + {3750588000 46800 1 +12} {3756636000 43200 0 +12} - {3782037600 46800 1 +13} + {3782037600 46800 1 +12} {3788085600 43200 0 +12} - {3813487200 46800 1 +13} + {3813487200 46800 1 +12} {3819535200 43200 0 +12} - {3844936800 46800 1 +13} + {3844936800 46800 1 +12} {3851589600 43200 0 +12} - {3876386400 46800 1 +13} + {3876386400 46800 1 +12} {3883039200 43200 0 +12} - {3907836000 46800 1 +13} + {3907836000 46800 1 +12} {3914488800 43200 0 +12} - {3939890400 46800 1 +13} + {3939890400 46800 1 +12} {3945938400 43200 0 +12} - {3971340000 46800 1 +13} + {3971340000 46800 1 +12} {3977388000 43200 0 +12} - {4002789600 46800 1 +13} + {4002789600 46800 1 +12} {4009442400 43200 0 +12} - {4034239200 46800 1 +13} + {4034239200 46800 1 +12} {4040892000 43200 0 +12} - {4065688800 46800 1 +13} + {4065688800 46800 1 +12} {4072341600 43200 0 +12} - {4097138400 46800 1 +13} + {4097138400 46800 1 +12} } diff --git a/library/tzdata/Pacific/Galapagos b/library/tzdata/Pacific/Galapagos index f276f73..180ce6a 100644 --- a/library/tzdata/Pacific/Galapagos +++ b/library/tzdata/Pacific/Galapagos @@ -4,6 +4,6 @@ set TZData(:Pacific/Galapagos) { {-9223372036854775808 -21504 0 LMT} {-1230746496 -18000 0 -05} {504939600 -21600 0 -06} - {722930400 -18000 1 -05} + {722930400 -18000 1 -06} {728888400 -21600 0 -06} } diff --git a/library/tzdata/Pacific/Kiritimati b/library/tzdata/Pacific/Kiritimati index b703f19..7d600f3 100644 --- a/library/tzdata/Pacific/Kiritimati +++ b/library/tzdata/Pacific/Kiritimati @@ -4,5 +4,5 @@ set TZData(:Pacific/Kiritimati) { {-9223372036854775808 -37760 0 LMT} {-2177415040 -38400 0 -1040} {307622400 -36000 0 -10} - {788954400 50400 0 +14} + {788868000 50400 0 +14} } diff --git a/library/tzdata/Pacific/Noumea b/library/tzdata/Pacific/Noumea index 36b570d..c9da825 100644 --- a/library/tzdata/Pacific/Noumea +++ b/library/tzdata/Pacific/Noumea @@ -3,10 +3,10 @@ set TZData(:Pacific/Noumea) { {-9223372036854775808 39948 0 LMT} {-1829387148 39600 0 +11} - {250002000 43200 1 +12} + {250002000 43200 1 +11} {257342400 39600 0 +11} - {281451600 43200 1 +12} + {281451600 43200 1 +11} {288878400 39600 0 +11} - {849366000 43200 1 +12} + {849366000 43200 1 +11} {857228400 39600 0 +11} } diff --git a/library/tzdata/Pacific/Rarotonga b/library/tzdata/Pacific/Rarotonga index 9a70318..2913d68 100644 --- a/library/tzdata/Pacific/Rarotonga +++ b/library/tzdata/Pacific/Rarotonga @@ -3,30 +3,30 @@ set TZData(:Pacific/Rarotonga) { {-9223372036854775808 -38344 0 LMT} {-2177414456 -37800 0 -1030} - {279714600 -34200 0 -0930} + {279714600 -34200 0 -10} {289387800 -36000 0 -10} - {309952800 -34200 1 -0930} + {309952800 -34200 1 -10} {320837400 -36000 0 -10} - {341402400 -34200 1 -0930} + {341402400 -34200 1 -10} {352287000 -36000 0 -10} - {372852000 -34200 1 -0930} + {372852000 -34200 1 -10} {384341400 -36000 0 -10} - {404906400 -34200 1 -0930} + {404906400 -34200 1 -10} {415791000 -36000 0 -10} - {436356000 -34200 1 -0930} + {436356000 -34200 1 -10} {447240600 -36000 0 -10} - {467805600 -34200 1 -0930} + {467805600 -34200 1 -10} {478690200 -36000 0 -10} - {499255200 -34200 1 -0930} + {499255200 -34200 1 -10} {510139800 -36000 0 -10} - {530704800 -34200 1 -0930} + {530704800 -34200 1 -10} {541589400 -36000 0 -10} - {562154400 -34200 1 -0930} + {562154400 -34200 1 -10} {573643800 -36000 0 -10} - {594208800 -34200 1 -0930} + {594208800 -34200 1 -10} {605093400 -36000 0 -10} - {625658400 -34200 1 -0930} + {625658400 -34200 1 -10} {636543000 -36000 0 -10} - {657108000 -34200 1 -0930} + {657108000 -34200 1 -10} {667992600 -36000 0 -10} } diff --git a/library/tzdata/Pacific/Tongatapu b/library/tzdata/Pacific/Tongatapu index 3cfaaaa..104888a 100644 --- a/library/tzdata/Pacific/Tongatapu +++ b/library/tzdata/Pacific/Tongatapu @@ -5,12 +5,12 @@ set TZData(:Pacific/Tongatapu) { {-2177497160 44400 0 +1220} {-915193200 46800 0 +13} {915102000 46800 0 +13} - {939214800 50400 1 +14} + {939214800 50400 1 +13} {953384400 46800 0 +13} - {973342800 50400 1 +14} + {973342800 50400 1 +13} {980596800 46800 0 +13} - {1004792400 50400 1 +14} + {1004792400 50400 1 +13} {1012046400 46800 0 +13} - {1478350800 50400 1 +14} + {1478350800 50400 1 +13} {1484398800 46800 0 +13} } -- cgit v0.12 From ac47e6953d5c9a8916296ab9f382bf914a56324b Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 9 Jun 2018 07:42:42 +0000 Subject: Update all Unicode tables to Unicode version 11.0 --- generic/regc_locale.c | 491 +++++++++-------- generic/tclUniData.c | 1447 +++++++++++++++++++++++++------------------------ 2 files changed, 984 insertions(+), 954 deletions(-) diff --git a/generic/regc_locale.c b/generic/regc_locale.c index 4435557..81aeb82 100644 --- a/generic/regc_locale.c +++ b/generic/regc_locale.c @@ -137,8 +137,8 @@ static const crange alphaRangeTable[] = { {0x41, 0x5a}, {0x61, 0x7a}, {0xc0, 0xd6}, {0xd8, 0xf6}, {0xf8, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, {0x370, 0x374}, {0x37a, 0x37d}, {0x388, 0x38a}, {0x38e, 0x3a1}, {0x3a3, 0x3f5}, - {0x3f7, 0x481}, {0x48a, 0x52f}, {0x531, 0x556}, {0x561, 0x587}, - {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x620, 0x64a}, {0x671, 0x6d3}, + {0x3f7, 0x481}, {0x48a, 0x52f}, {0x531, 0x556}, {0x560, 0x588}, + {0x5d0, 0x5ea}, {0x5ef, 0x5f2}, {0x620, 0x64a}, {0x671, 0x6d3}, {0x6fa, 0x6fc}, {0x712, 0x72f}, {0x74d, 0x7a5}, {0x7ca, 0x7ea}, {0x800, 0x815}, {0x840, 0x858}, {0x860, 0x86a}, {0x8a0, 0x8b4}, {0x8b6, 0x8bd}, {0x904, 0x939}, {0x958, 0x961}, {0x971, 0x980}, @@ -165,40 +165,41 @@ static const crange alphaRangeTable[] = { {0x1401, 0x166c}, {0x166f, 0x167f}, {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x16f1, 0x16f8}, {0x1700, 0x170c}, {0x170e, 0x1711}, {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17b3}, - {0x1820, 0x1877}, {0x1880, 0x1884}, {0x1887, 0x18a8}, {0x18b0, 0x18f5}, + {0x1820, 0x1878}, {0x1880, 0x1884}, {0x1887, 0x18a8}, {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1950, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, {0x1a00, 0x1a16}, {0x1a20, 0x1a54}, {0x1b05, 0x1b33}, {0x1b45, 0x1b4b}, {0x1b83, 0x1ba0}, {0x1bba, 0x1be5}, {0x1c00, 0x1c23}, - {0x1c4d, 0x1c4f}, {0x1c5a, 0x1c7d}, {0x1c80, 0x1c88}, {0x1ce9, 0x1cec}, - {0x1cee, 0x1cf1}, {0x1d00, 0x1dbf}, {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, - {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, - {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, - {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, - {0x1ff6, 0x1ffc}, {0x2090, 0x209c}, {0x210a, 0x2113}, {0x2119, 0x211d}, - {0x212a, 0x212d}, {0x212f, 0x2139}, {0x213c, 0x213f}, {0x2145, 0x2149}, - {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2ce4}, {0x2ceb, 0x2cee}, - {0x2d00, 0x2d25}, {0x2d30, 0x2d67}, {0x2d80, 0x2d96}, {0x2da0, 0x2da6}, - {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, - {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x3031, 0x3035}, - {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, - {0x3105, 0x312e}, {0x3131, 0x318e}, {0x31a0, 0x31ba}, {0x31f0, 0x31ff}, - {0x3400, 0x4db5}, {0x4e00, 0x9fea}, {0xa000, 0xa48c}, {0xa4d0, 0xa4fd}, - {0xa500, 0xa60c}, {0xa610, 0xa61f}, {0xa640, 0xa66e}, {0xa67f, 0xa69d}, - {0xa6a0, 0xa6e5}, {0xa717, 0xa71f}, {0xa722, 0xa788}, {0xa78b, 0xa7ae}, - {0xa7b0, 0xa7b7}, {0xa7f7, 0xa801}, {0xa803, 0xa805}, {0xa807, 0xa80a}, - {0xa80c, 0xa822}, {0xa840, 0xa873}, {0xa882, 0xa8b3}, {0xa8f2, 0xa8f7}, - {0xa90a, 0xa925}, {0xa930, 0xa946}, {0xa960, 0xa97c}, {0xa984, 0xa9b2}, - {0xa9e0, 0xa9e4}, {0xa9e6, 0xa9ef}, {0xa9fa, 0xa9fe}, {0xaa00, 0xaa28}, - {0xaa40, 0xaa42}, {0xaa44, 0xaa4b}, {0xaa60, 0xaa76}, {0xaa7e, 0xaaaf}, - {0xaab9, 0xaabd}, {0xaadb, 0xaadd}, {0xaae0, 0xaaea}, {0xaaf2, 0xaaf4}, - {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, - {0xab28, 0xab2e}, {0xab30, 0xab5a}, {0xab5c, 0xab65}, {0xab70, 0xabe2}, - {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, - {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1f, 0xfb28}, - {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, - {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, - {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, - {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} + {0x1c4d, 0x1c4f}, {0x1c5a, 0x1c7d}, {0x1c80, 0x1c88}, {0x1c90, 0x1cba}, + {0x1cbd, 0x1cbf}, {0x1ce9, 0x1cec}, {0x1cee, 0x1cf1}, {0x1d00, 0x1dbf}, + {0x1e00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, + {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, + {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, + {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2090, 0x209c}, + {0x210a, 0x2113}, {0x2119, 0x211d}, {0x212a, 0x212d}, {0x212f, 0x2139}, + {0x213c, 0x213f}, {0x2145, 0x2149}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, + {0x2c60, 0x2ce4}, {0x2ceb, 0x2cee}, {0x2d00, 0x2d25}, {0x2d30, 0x2d67}, + {0x2d80, 0x2d96}, {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, + {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, + {0x2dd8, 0x2dde}, {0x3031, 0x3035}, {0x3041, 0x3096}, {0x309d, 0x309f}, + {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, {0x3105, 0x312f}, {0x3131, 0x318e}, + {0x31a0, 0x31ba}, {0x31f0, 0x31ff}, {0x3400, 0x4db5}, {0x4e00, 0x9fef}, + {0xa000, 0xa48c}, {0xa4d0, 0xa4fd}, {0xa500, 0xa60c}, {0xa610, 0xa61f}, + {0xa640, 0xa66e}, {0xa67f, 0xa69d}, {0xa6a0, 0xa6e5}, {0xa717, 0xa71f}, + {0xa722, 0xa788}, {0xa78b, 0xa7b9}, {0xa7f7, 0xa801}, {0xa803, 0xa805}, + {0xa807, 0xa80a}, {0xa80c, 0xa822}, {0xa840, 0xa873}, {0xa882, 0xa8b3}, + {0xa8f2, 0xa8f7}, {0xa90a, 0xa925}, {0xa930, 0xa946}, {0xa960, 0xa97c}, + {0xa984, 0xa9b2}, {0xa9e0, 0xa9e4}, {0xa9e6, 0xa9ef}, {0xa9fa, 0xa9fe}, + {0xaa00, 0xaa28}, {0xaa40, 0xaa42}, {0xaa44, 0xaa4b}, {0xaa60, 0xaa76}, + {0xaa7e, 0xaaaf}, {0xaab9, 0xaabd}, {0xaadb, 0xaadd}, {0xaae0, 0xaaea}, + {0xaaf2, 0xaaf4}, {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, + {0xab20, 0xab26}, {0xab28, 0xab2e}, {0xab30, 0xab5a}, {0xab5c, 0xab65}, + {0xab70, 0xabe2}, {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, + {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, + {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb46, 0xfbb1}, + {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, + {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, + {0xff66, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, + {0xffda, 0xffdc} #if CHRBITS > 16 ,{0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003f, 0x1004d}, {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10280, 0x1029c}, {0x102a0, 0x102d0}, @@ -208,23 +209,25 @@ static const crange alphaRangeTable[] = { {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10800, 0x10805}, {0x1080a, 0x10835}, {0x1083f, 0x10855}, {0x10860, 0x10876}, {0x10880, 0x1089e}, {0x108e0, 0x108f2}, {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109b7}, - {0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a33}, {0x10a60, 0x10a7c}, + {0x10a10, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a60, 0x10a7c}, {0x10a80, 0x10a9c}, {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae4}, {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, {0x10c00, 0x10c48}, - {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x11003, 0x11037}, {0x11083, 0x110af}, - {0x110d0, 0x110e8}, {0x11103, 0x11126}, {0x11150, 0x11172}, {0x11183, 0x111b2}, - {0x111c1, 0x111c4}, {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x11280, 0x11286}, - {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112de}, - {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, - {0x1135d, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x11480, 0x114af}, - {0x11580, 0x115ae}, {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11680, 0x116aa}, - {0x11700, 0x11719}, {0x118a0, 0x118df}, {0x11a0b, 0x11a32}, {0x11a5c, 0x11a83}, + {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10d00, 0x10d23}, {0x10f00, 0x10f1c}, + {0x10f30, 0x10f45}, {0x11003, 0x11037}, {0x11083, 0x110af}, {0x110d0, 0x110e8}, + {0x11103, 0x11126}, {0x11150, 0x11172}, {0x11183, 0x111b2}, {0x111c1, 0x111c4}, + {0x11200, 0x11211}, {0x11213, 0x1122b}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, + {0x1128f, 0x1129d}, {0x1129f, 0x112a8}, {0x112b0, 0x112de}, {0x11305, 0x1130c}, + {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, {0x1135d, 0x11361}, + {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x11480, 0x114af}, {0x11580, 0x115ae}, + {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11680, 0x116aa}, {0x11700, 0x1171a}, + {0x11800, 0x1182b}, {0x118a0, 0x118df}, {0x11a0b, 0x11a32}, {0x11a5c, 0x11a83}, {0x11a86, 0x11a89}, {0x11ac0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c2e}, - {0x11c72, 0x11c8f}, {0x11d00, 0x11d06}, {0x11d0b, 0x11d30}, {0x12000, 0x12399}, - {0x12480, 0x12543}, {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, - {0x16a40, 0x16a5e}, {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, - {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, {0x16f00, 0x16f44}, {0x16f93, 0x16f9f}, - {0x17000, 0x187ec}, {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, + {0x11c72, 0x11c8f}, {0x11d00, 0x11d06}, {0x11d0b, 0x11d30}, {0x11d60, 0x11d65}, + {0x11d6a, 0x11d89}, {0x11ee0, 0x11ef2}, {0x12000, 0x12399}, {0x12480, 0x12543}, + {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, + {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, {0x16b63, 0x16b77}, + {0x16b7d, 0x16b8f}, {0x16e40, 0x16e7f}, {0x16f00, 0x16f44}, {0x16f93, 0x16f9f}, + {0x17000, 0x187f1}, {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, @@ -260,17 +263,18 @@ static const chr alphaCharTable[] = { 0x1baf, 0x1cf5, 0x1cf6, 0x1f59, 0x1f5b, 0x1f5d, 0x1fbe, 0x2071, 0x207f, 0x2102, 0x2107, 0x2115, 0x2124, 0x2126, 0x2128, 0x214e, 0x2183, 0x2184, 0x2cf2, 0x2cf3, 0x2d27, 0x2d2d, 0x2d6f, 0x2e2f, 0x3005, 0x3006, 0x303b, - 0x303c, 0xa62a, 0xa62b, 0xa8fb, 0xa8fd, 0xa9cf, 0xaa7a, 0xaab1, 0xaab5, - 0xaab6, 0xaac0, 0xaac2, 0xfb1d, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44 + 0x303c, 0xa62a, 0xa62b, 0xa8fb, 0xa8fd, 0xa8fe, 0xa9cf, 0xaa7a, 0xaab1, + 0xaab5, 0xaab6, 0xaac0, 0xaac2, 0xfb1d, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, + 0xfb44 #if CHRBITS > 16 ,0x1003c, 0x1003d, 0x10808, 0x10837, 0x10838, 0x1083c, 0x108f4, 0x108f5, 0x109be, - 0x109bf, 0x10a00, 0x11176, 0x111da, 0x111dc, 0x11288, 0x1130f, 0x11310, 0x11332, - 0x11333, 0x1133d, 0x11350, 0x114c4, 0x114c5, 0x114c7, 0x11644, 0x118ff, 0x11a00, - 0x11a3a, 0x11a50, 0x11c40, 0x11d08, 0x11d09, 0x11d46, 0x16f50, 0x16fe0, 0x16fe1, - 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1ee21, 0x1ee22, - 0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, - 0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, - 0x1ee64, 0x1ee7e + 0x109bf, 0x10a00, 0x10f27, 0x11144, 0x11176, 0x111da, 0x111dc, 0x11288, 0x1130f, + 0x11310, 0x11332, 0x11333, 0x1133d, 0x11350, 0x114c4, 0x114c5, 0x114c7, 0x11644, + 0x118ff, 0x11a00, 0x11a3a, 0x11a50, 0x11a9d, 0x11c40, 0x11d08, 0x11d09, 0x11d46, + 0x11d67, 0x11d68, 0x11d98, 0x16f50, 0x16fe0, 0x16fe1, 0x1d49e, 0x1d49f, 0x1d4a2, + 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, 0x1ee39, + 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, 0x1ee57, + 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e #endif }; @@ -295,7 +299,7 @@ static const crange controlRangeTable[] = { static const chr controlCharTable[] = { 0xad, 0x61c, 0x6dd, 0x70f, 0x8e2, 0x180e, 0xfeff #if CHRBITS > 16 - ,0x110bd, 0xe0001 + ,0x110bd, 0x110cd, 0xe0001 #endif }; @@ -317,11 +321,11 @@ static const crange digitRangeTable[] = { {0xa9d0, 0xa9d9}, {0xa9f0, 0xa9f9}, {0xaa50, 0xaa59}, {0xabf0, 0xabf9}, {0xff10, 0xff19} #if CHRBITS > 16 - ,{0x104a0, 0x104a9}, {0x11066, 0x1106f}, {0x110f0, 0x110f9}, {0x11136, 0x1113f}, - {0x111d0, 0x111d9}, {0x112f0, 0x112f9}, {0x11450, 0x11459}, {0x114d0, 0x114d9}, - {0x11650, 0x11659}, {0x116c0, 0x116c9}, {0x11730, 0x11739}, {0x118e0, 0x118e9}, - {0x11c50, 0x11c59}, {0x11d50, 0x11d59}, {0x16a60, 0x16a69}, {0x16b50, 0x16b59}, - {0x1d7ce, 0x1d7ff}, {0x1e950, 0x1e959} + ,{0x104a0, 0x104a9}, {0x10d30, 0x10d39}, {0x11066, 0x1106f}, {0x110f0, 0x110f9}, + {0x11136, 0x1113f}, {0x111d0, 0x111d9}, {0x112f0, 0x112f9}, {0x11450, 0x11459}, + {0x114d0, 0x114d9}, {0x11650, 0x11659}, {0x116c0, 0x116c9}, {0x11730, 0x11739}, + {0x118e0, 0x118e9}, {0x11c50, 0x11c59}, {0x11d50, 0x11d59}, {0x11da0, 0x11da9}, + {0x16a60, 0x16a69}, {0x16b50, 0x16b59}, {0x1d7ce, 0x1d7ff}, {0x1e950, 0x1e959} #endif }; @@ -344,7 +348,7 @@ static const crange punctRangeTable[] = { {0x1b5a, 0x1b60}, {0x1bfc, 0x1bff}, {0x1c3b, 0x1c3f}, {0x1cc0, 0x1cc7}, {0x2010, 0x2027}, {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x205e}, {0x2308, 0x230b}, {0x2768, 0x2775}, {0x27e6, 0x27ef}, {0x2983, 0x2998}, - {0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e49}, + {0x29d8, 0x29db}, {0x2cf9, 0x2cfc}, {0x2e00, 0x2e2e}, {0x2e30, 0x2e4e}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, {0xa60d, 0xa60f}, {0xa6f2, 0xa6f7}, {0xa874, 0xa877}, {0xa8f8, 0xa8fa}, {0xa9c1, 0xa9cd}, {0xaa5c, 0xaa5f}, {0xfe10, 0xfe19}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, @@ -352,11 +356,12 @@ static const crange punctRangeTable[] = { {0xff5f, 0xff65} #if CHRBITS > 16 ,{0x10100, 0x10102}, {0x10a50, 0x10a58}, {0x10af0, 0x10af6}, {0x10b39, 0x10b3f}, - {0x10b99, 0x10b9c}, {0x11047, 0x1104d}, {0x110be, 0x110c1}, {0x11140, 0x11143}, - {0x111c5, 0x111c9}, {0x111dd, 0x111df}, {0x11238, 0x1123d}, {0x1144b, 0x1144f}, - {0x115c1, 0x115d7}, {0x11641, 0x11643}, {0x11660, 0x1166c}, {0x1173c, 0x1173e}, - {0x11a3f, 0x11a46}, {0x11a9a, 0x11a9c}, {0x11a9e, 0x11aa2}, {0x11c41, 0x11c45}, - {0x12470, 0x12474}, {0x16b37, 0x16b3b}, {0x1da87, 0x1da8b} + {0x10b99, 0x10b9c}, {0x10f55, 0x10f59}, {0x11047, 0x1104d}, {0x110be, 0x110c1}, + {0x11140, 0x11143}, {0x111c5, 0x111c8}, {0x111dd, 0x111df}, {0x11238, 0x1123d}, + {0x1144b, 0x1144f}, {0x115c1, 0x115d7}, {0x11641, 0x11643}, {0x11660, 0x1166c}, + {0x1173c, 0x1173e}, {0x11a3f, 0x11a46}, {0x11a9a, 0x11a9c}, {0x11a9e, 0x11aa2}, + {0x11c41, 0x11c45}, {0x12470, 0x12474}, {0x16b37, 0x16b3b}, {0x16e97, 0x16e9a}, + {0x1da87, 0x1da8b} #endif }; @@ -367,18 +372,20 @@ static const chr punctCharTable[] = { 0xab, 0xb6, 0xb7, 0xbb, 0xbf, 0x37e, 0x387, 0x589, 0x58a, 0x5be, 0x5c0, 0x5c3, 0x5c6, 0x5f3, 0x5f4, 0x609, 0x60a, 0x60c, 0x60d, 0x61b, 0x61e, 0x61f, 0x6d4, 0x85e, 0x964, 0x965, 0x970, - 0x9fd, 0xaf0, 0xdf4, 0xe4f, 0xe5a, 0xe5b, 0xf14, 0xf85, 0xfd9, - 0xfda, 0x10fb, 0x1400, 0x166d, 0x166e, 0x169b, 0x169c, 0x1735, 0x1736, - 0x1944, 0x1945, 0x1a1e, 0x1a1f, 0x1c7e, 0x1c7f, 0x1cd3, 0x207d, 0x207e, - 0x208d, 0x208e, 0x2329, 0x232a, 0x27c5, 0x27c6, 0x29fc, 0x29fd, 0x2cfe, - 0x2cff, 0x2d70, 0x3030, 0x303d, 0x30a0, 0x30fb, 0xa4fe, 0xa4ff, 0xa673, - 0xa67e, 0xa8ce, 0xa8cf, 0xa8fc, 0xa92e, 0xa92f, 0xa95f, 0xa9de, 0xa9df, - 0xaade, 0xaadf, 0xaaf0, 0xaaf1, 0xabeb, 0xfd3e, 0xfd3f, 0xfe63, 0xfe68, - 0xfe6a, 0xfe6b, 0xff1a, 0xff1b, 0xff1f, 0xff20, 0xff3f, 0xff5b, 0xff5d + 0x9fd, 0xa76, 0xaf0, 0xc84, 0xdf4, 0xe4f, 0xe5a, 0xe5b, 0xf14, + 0xf85, 0xfd9, 0xfda, 0x10fb, 0x1400, 0x166d, 0x166e, 0x169b, 0x169c, + 0x1735, 0x1736, 0x1944, 0x1945, 0x1a1e, 0x1a1f, 0x1c7e, 0x1c7f, 0x1cd3, + 0x207d, 0x207e, 0x208d, 0x208e, 0x2329, 0x232a, 0x27c5, 0x27c6, 0x29fc, + 0x29fd, 0x2cfe, 0x2cff, 0x2d70, 0x3030, 0x303d, 0x30a0, 0x30fb, 0xa4fe, + 0xa4ff, 0xa673, 0xa67e, 0xa8ce, 0xa8cf, 0xa8fc, 0xa92e, 0xa92f, 0xa95f, + 0xa9de, 0xa9df, 0xaade, 0xaadf, 0xaaf0, 0xaaf1, 0xabeb, 0xfd3e, 0xfd3f, + 0xfe63, 0xfe68, 0xfe6a, 0xfe6b, 0xff1a, 0xff1b, 0xff1f, 0xff20, 0xff3f, + 0xff5b, 0xff5d #if CHRBITS > 16 ,0x1039f, 0x103d0, 0x1056f, 0x10857, 0x1091f, 0x1093f, 0x10a7f, 0x110bb, 0x110bc, - 0x11174, 0x11175, 0x111cd, 0x111db, 0x112a9, 0x1145b, 0x1145d, 0x114c6, 0x11c70, - 0x11c71, 0x16a6e, 0x16a6f, 0x16af5, 0x16b44, 0x1bc9f, 0x1e95e, 0x1e95f + 0x11174, 0x11175, 0x111cd, 0x111db, 0x112a9, 0x1145b, 0x1145d, 0x114c6, 0x1183b, + 0x11c70, 0x11c71, 0x11ef7, 0x11ef8, 0x16a6e, 0x16a6f, 0x16af5, 0x16b44, 0x1bc9f, + 0x1e95e, 0x1e95f #endif }; @@ -409,25 +416,25 @@ static const crange lowerRangeTable[] = { {0x61, 0x7a}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x17e, 0x180}, {0x199, 0x19b}, {0x1bd, 0x1bf}, {0x233, 0x239}, {0x24f, 0x293}, {0x295, 0x2af}, {0x37b, 0x37d}, {0x3ac, 0x3ce}, {0x3d5, 0x3d7}, - {0x3ef, 0x3f3}, {0x430, 0x45f}, {0x561, 0x587}, {0x13f8, 0x13fd}, - {0x1c80, 0x1c88}, {0x1d00, 0x1d2b}, {0x1d6b, 0x1d77}, {0x1d79, 0x1d9a}, - {0x1e95, 0x1e9d}, {0x1eff, 0x1f07}, {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, - {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, - {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, - {0x1fb0, 0x1fb4}, {0x1fc2, 0x1fc4}, {0x1fd0, 0x1fd3}, {0x1fe0, 0x1fe7}, - {0x1ff2, 0x1ff4}, {0x2146, 0x2149}, {0x2c30, 0x2c5e}, {0x2c76, 0x2c7b}, - {0x2d00, 0x2d25}, {0xa72f, 0xa731}, {0xa771, 0xa778}, {0xa793, 0xa795}, - {0xab30, 0xab5a}, {0xab60, 0xab65}, {0xab70, 0xabbf}, {0xfb00, 0xfb06}, - {0xfb13, 0xfb17}, {0xff41, 0xff5a} + {0x3ef, 0x3f3}, {0x430, 0x45f}, {0x560, 0x588}, {0x10d0, 0x10fa}, + {0x10fd, 0x10ff}, {0x13f8, 0x13fd}, {0x1c80, 0x1c88}, {0x1d00, 0x1d2b}, + {0x1d6b, 0x1d77}, {0x1d79, 0x1d9a}, {0x1e95, 0x1e9d}, {0x1eff, 0x1f07}, + {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, + {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, + {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fc2, 0x1fc4}, + {0x1fd0, 0x1fd3}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x2146, 0x2149}, + {0x2c30, 0x2c5e}, {0x2c76, 0x2c7b}, {0x2d00, 0x2d25}, {0xa72f, 0xa731}, + {0xa771, 0xa778}, {0xa793, 0xa795}, {0xab30, 0xab5a}, {0xab60, 0xab65}, + {0xab70, 0xabbf}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xff41, 0xff5a} #if CHRBITS > 16 ,{0x10428, 0x1044f}, {0x104d8, 0x104fb}, {0x10cc0, 0x10cf2}, {0x118c0, 0x118df}, - {0x1d41a, 0x1d433}, {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b}, - {0x1d4b6, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, - {0x1d51e, 0x1d537}, {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3}, - {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, {0x1d68a, 0x1d6a5}, - {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, - {0x1d736, 0x1d74e}, {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f}, - {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, {0x1e922, 0x1e943} + {0x16e60, 0x16e7f}, {0x1d41a, 0x1d433}, {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, + {0x1d482, 0x1d49b}, {0x1d4b6, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d4cf}, + {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537}, {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, + {0x1d5ba, 0x1d5d3}, {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, + {0x1d68a, 0x1d6a5}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, {0x1d6fc, 0x1d714}, + {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e}, {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, + {0x1d78a, 0x1d78f}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, {0x1e922, 0x1e943} #endif }; @@ -497,7 +504,7 @@ static const chr lowerCharTable[] = { 0xa763, 0xa765, 0xa767, 0xa769, 0xa76b, 0xa76d, 0xa76f, 0xa77a, 0xa77c, 0xa77f, 0xa781, 0xa783, 0xa785, 0xa787, 0xa78c, 0xa78e, 0xa791, 0xa797, 0xa799, 0xa79b, 0xa79d, 0xa79f, 0xa7a1, 0xa7a3, 0xa7a5, 0xa7a7, 0xa7a9, - 0xa7b5, 0xa7b7, 0xa7fa + 0xa7af, 0xa7b5, 0xa7b7, 0xa7b9, 0xa7fa #if CHRBITS > 16 ,0x1d4bb, 0x1d7cb #endif @@ -514,20 +521,22 @@ static const crange upperRangeTable[] = { {0x18e, 0x191}, {0x196, 0x198}, {0x1b1, 0x1b3}, {0x1f6, 0x1f8}, {0x243, 0x246}, {0x388, 0x38a}, {0x391, 0x3a1}, {0x3a3, 0x3ab}, {0x3d2, 0x3d4}, {0x3fd, 0x42f}, {0x531, 0x556}, {0x10a0, 0x10c5}, - {0x13a0, 0x13f5}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d}, {0x1f28, 0x1f2f}, - {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f68, 0x1f6f}, {0x1fb8, 0x1fbb}, - {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, {0x1ff8, 0x1ffb}, - {0x210b, 0x210d}, {0x2110, 0x2112}, {0x2119, 0x211d}, {0x212a, 0x212d}, - {0x2130, 0x2133}, {0x2c00, 0x2c2e}, {0x2c62, 0x2c64}, {0x2c6d, 0x2c70}, - {0x2c7e, 0x2c80}, {0xa7aa, 0xa7ae}, {0xa7b0, 0xa7b4}, {0xff21, 0xff3a} + {0x13a0, 0x13f5}, {0x1c90, 0x1cba}, {0x1cbd, 0x1cbf}, {0x1f08, 0x1f0f}, + {0x1f18, 0x1f1d}, {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, + {0x1f68, 0x1f6f}, {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, + {0x1fe8, 0x1fec}, {0x1ff8, 0x1ffb}, {0x210b, 0x210d}, {0x2110, 0x2112}, + {0x2119, 0x211d}, {0x212a, 0x212d}, {0x2130, 0x2133}, {0x2c00, 0x2c2e}, + {0x2c62, 0x2c64}, {0x2c6d, 0x2c70}, {0x2c7e, 0x2c80}, {0xa7aa, 0xa7ae}, + {0xa7b0, 0xa7b4}, {0xff21, 0xff3a} #if CHRBITS > 16 ,{0x10400, 0x10427}, {0x104b0, 0x104d3}, {0x10c80, 0x10cb2}, {0x118a0, 0x118bf}, - {0x1d400, 0x1d419}, {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d4a9, 0x1d4ac}, - {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, - {0x1d516, 0x1d51c}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, - {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, {0x1d608, 0x1d621}, - {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, - {0x1d71c, 0x1d734}, {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8}, {0x1e900, 0x1e921} + {0x16e40, 0x16e5f}, {0x1d400, 0x1d419}, {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, + {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, {0x1d507, 0x1d50a}, + {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, + {0x1d54a, 0x1d550}, {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, + {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, {0x1d6a8, 0x1d6c0}, + {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734}, {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8}, + {0x1e900, 0x1e921} #endif }; @@ -596,7 +605,8 @@ static const chr upperCharTable[] = { 0xa756, 0xa758, 0xa75a, 0xa75c, 0xa75e, 0xa760, 0xa762, 0xa764, 0xa766, 0xa768, 0xa76a, 0xa76c, 0xa76e, 0xa779, 0xa77b, 0xa77d, 0xa77e, 0xa780, 0xa782, 0xa784, 0xa786, 0xa78b, 0xa78d, 0xa790, 0xa792, 0xa796, 0xa798, - 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b6 + 0xa79a, 0xa79c, 0xa79e, 0xa7a0, 0xa7a2, 0xa7a4, 0xa7a6, 0xa7a8, 0xa7b6, + 0xa7b8 #if CHRBITS > 16 ,0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d504, 0x1d505, 0x1d538, 0x1d539, 0x1d546, 0x1d7ca @@ -612,80 +622,79 @@ static const chr upperCharTable[] = { static const crange graphRangeTable[] = { {0x21, 0x7e}, {0xa1, 0xac}, {0xae, 0x377}, {0x37a, 0x37f}, {0x384, 0x38a}, {0x38e, 0x3a1}, {0x3a3, 0x52f}, {0x531, 0x556}, - {0x559, 0x55f}, {0x561, 0x587}, {0x58d, 0x58f}, {0x591, 0x5c7}, - {0x5d0, 0x5ea}, {0x5f0, 0x5f4}, {0x606, 0x61b}, {0x61e, 0x6dc}, - {0x6de, 0x70d}, {0x710, 0x74a}, {0x74d, 0x7b1}, {0x7c0, 0x7fa}, - {0x800, 0x82d}, {0x830, 0x83e}, {0x840, 0x85b}, {0x860, 0x86a}, - {0x8a0, 0x8b4}, {0x8b6, 0x8bd}, {0x8d4, 0x8e1}, {0x8e3, 0x983}, - {0x985, 0x98c}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b6, 0x9b9}, - {0x9bc, 0x9c4}, {0x9cb, 0x9ce}, {0x9df, 0x9e3}, {0x9e6, 0x9fd}, - {0xa01, 0xa03}, {0xa05, 0xa0a}, {0xa13, 0xa28}, {0xa2a, 0xa30}, - {0xa3e, 0xa42}, {0xa4b, 0xa4d}, {0xa59, 0xa5c}, {0xa66, 0xa75}, - {0xa81, 0xa83}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, - {0xaaa, 0xab0}, {0xab5, 0xab9}, {0xabc, 0xac5}, {0xac7, 0xac9}, - {0xacb, 0xacd}, {0xae0, 0xae3}, {0xae6, 0xaf1}, {0xaf9, 0xaff}, - {0xb01, 0xb03}, {0xb05, 0xb0c}, {0xb13, 0xb28}, {0xb2a, 0xb30}, - {0xb35, 0xb39}, {0xb3c, 0xb44}, {0xb4b, 0xb4d}, {0xb5f, 0xb63}, - {0xb66, 0xb77}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, - {0xba8, 0xbaa}, {0xbae, 0xbb9}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, - {0xbca, 0xbcd}, {0xbe6, 0xbfa}, {0xc00, 0xc03}, {0xc05, 0xc0c}, - {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc39}, {0xc3d, 0xc44}, - {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc58, 0xc5a}, {0xc60, 0xc63}, - {0xc66, 0xc6f}, {0xc78, 0xc83}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, - {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbc, 0xcc4}, - {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xce0, 0xce3}, {0xce6, 0xcef}, - {0xd00, 0xd03}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd44}, - {0xd46, 0xd48}, {0xd4a, 0xd4f}, {0xd54, 0xd63}, {0xd66, 0xd7f}, - {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdc0, 0xdc6}, - {0xdcf, 0xdd4}, {0xdd8, 0xddf}, {0xde6, 0xdef}, {0xdf2, 0xdf4}, - {0xe01, 0xe3a}, {0xe3f, 0xe5b}, {0xe94, 0xe97}, {0xe99, 0xe9f}, - {0xea1, 0xea3}, {0xead, 0xeb9}, {0xebb, 0xebd}, {0xec0, 0xec4}, - {0xec8, 0xecd}, {0xed0, 0xed9}, {0xedc, 0xedf}, {0xf00, 0xf47}, - {0xf49, 0xf6c}, {0xf71, 0xf97}, {0xf99, 0xfbc}, {0xfbe, 0xfcc}, - {0xfce, 0xfda}, {0x1000, 0x10c5}, {0x10d0, 0x1248}, {0x124a, 0x124d}, - {0x1250, 0x1256}, {0x125a, 0x125d}, {0x1260, 0x1288}, {0x128a, 0x128d}, - {0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c2, 0x12c5}, - {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135a}, - {0x135d, 0x137c}, {0x1380, 0x1399}, {0x13a0, 0x13f5}, {0x13f8, 0x13fd}, - {0x1400, 0x167f}, {0x1681, 0x169c}, {0x16a0, 0x16f8}, {0x1700, 0x170c}, - {0x170e, 0x1714}, {0x1720, 0x1736}, {0x1740, 0x1753}, {0x1760, 0x176c}, - {0x176e, 0x1770}, {0x1780, 0x17dd}, {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, - {0x1800, 0x180d}, {0x1810, 0x1819}, {0x1820, 0x1877}, {0x1880, 0x18aa}, - {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1920, 0x192b}, {0x1930, 0x193b}, - {0x1944, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, {0x19b0, 0x19c9}, - {0x19d0, 0x19da}, {0x19de, 0x1a1b}, {0x1a1e, 0x1a5e}, {0x1a60, 0x1a7c}, - {0x1a7f, 0x1a89}, {0x1a90, 0x1a99}, {0x1aa0, 0x1aad}, {0x1ab0, 0x1abe}, - {0x1b00, 0x1b4b}, {0x1b50, 0x1b7c}, {0x1b80, 0x1bf3}, {0x1bfc, 0x1c37}, - {0x1c3b, 0x1c49}, {0x1c4d, 0x1c88}, {0x1cc0, 0x1cc7}, {0x1cd0, 0x1cf9}, - {0x1d00, 0x1df9}, {0x1dfb, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, - {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, - {0x1fb6, 0x1fc4}, {0x1fc6, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fdd, 0x1fef}, - {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffe}, {0x2010, 0x2027}, {0x2030, 0x205e}, - {0x2074, 0x208e}, {0x2090, 0x209c}, {0x20a0, 0x20bf}, {0x20d0, 0x20f0}, - {0x2100, 0x218b}, {0x2190, 0x2426}, {0x2440, 0x244a}, {0x2460, 0x2b73}, - {0x2b76, 0x2b95}, {0x2b98, 0x2bb9}, {0x2bbd, 0x2bc8}, {0x2bca, 0x2bd2}, - {0x2bec, 0x2bef}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2cf3}, + {0x559, 0x58a}, {0x58d, 0x58f}, {0x591, 0x5c7}, {0x5d0, 0x5ea}, + {0x5ef, 0x5f4}, {0x606, 0x61b}, {0x61e, 0x6dc}, {0x6de, 0x70d}, + {0x710, 0x74a}, {0x74d, 0x7b1}, {0x7c0, 0x7fa}, {0x7fd, 0x82d}, + {0x830, 0x83e}, {0x840, 0x85b}, {0x860, 0x86a}, {0x8a0, 0x8b4}, + {0x8b6, 0x8bd}, {0x8d3, 0x8e1}, {0x8e3, 0x983}, {0x985, 0x98c}, + {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b6, 0x9b9}, {0x9bc, 0x9c4}, + {0x9cb, 0x9ce}, {0x9df, 0x9e3}, {0x9e6, 0x9fe}, {0xa01, 0xa03}, + {0xa05, 0xa0a}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa3e, 0xa42}, + {0xa4b, 0xa4d}, {0xa59, 0xa5c}, {0xa66, 0xa76}, {0xa81, 0xa83}, + {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, + {0xab5, 0xab9}, {0xabc, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, + {0xae0, 0xae3}, {0xae6, 0xaf1}, {0xaf9, 0xaff}, {0xb01, 0xb03}, + {0xb05, 0xb0c}, {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb35, 0xb39}, + {0xb3c, 0xb44}, {0xb4b, 0xb4d}, {0xb5f, 0xb63}, {0xb66, 0xb77}, + {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xba8, 0xbaa}, + {0xbae, 0xbb9}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd}, + {0xbe6, 0xbfa}, {0xc00, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, + {0xc2a, 0xc39}, {0xc3d, 0xc44}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, + {0xc58, 0xc5a}, {0xc60, 0xc63}, {0xc66, 0xc6f}, {0xc78, 0xc8c}, + {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, + {0xcbc, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xce0, 0xce3}, + {0xce6, 0xcef}, {0xd00, 0xd03}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, + {0xd12, 0xd44}, {0xd46, 0xd48}, {0xd4a, 0xd4f}, {0xd54, 0xd63}, + {0xd66, 0xd7f}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, + {0xdc0, 0xdc6}, {0xdcf, 0xdd4}, {0xdd8, 0xddf}, {0xde6, 0xdef}, + {0xdf2, 0xdf4}, {0xe01, 0xe3a}, {0xe3f, 0xe5b}, {0xe94, 0xe97}, + {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xead, 0xeb9}, {0xebb, 0xebd}, + {0xec0, 0xec4}, {0xec8, 0xecd}, {0xed0, 0xed9}, {0xedc, 0xedf}, + {0xf00, 0xf47}, {0xf49, 0xf6c}, {0xf71, 0xf97}, {0xf99, 0xfbc}, + {0xfbe, 0xfcc}, {0xfce, 0xfda}, {0x1000, 0x10c5}, {0x10d0, 0x1248}, + {0x124a, 0x124d}, {0x1250, 0x1256}, {0x125a, 0x125d}, {0x1260, 0x1288}, + {0x128a, 0x128d}, {0x1290, 0x12b0}, {0x12b2, 0x12b5}, {0x12b8, 0x12be}, + {0x12c2, 0x12c5}, {0x12c8, 0x12d6}, {0x12d8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135a}, {0x135d, 0x137c}, {0x1380, 0x1399}, {0x13a0, 0x13f5}, + {0x13f8, 0x13fd}, {0x1400, 0x167f}, {0x1681, 0x169c}, {0x16a0, 0x16f8}, + {0x1700, 0x170c}, {0x170e, 0x1714}, {0x1720, 0x1736}, {0x1740, 0x1753}, + {0x1760, 0x176c}, {0x176e, 0x1770}, {0x1780, 0x17dd}, {0x17e0, 0x17e9}, + {0x17f0, 0x17f9}, {0x1800, 0x180d}, {0x1810, 0x1819}, {0x1820, 0x1878}, + {0x1880, 0x18aa}, {0x18b0, 0x18f5}, {0x1900, 0x191e}, {0x1920, 0x192b}, + {0x1930, 0x193b}, {0x1944, 0x196d}, {0x1970, 0x1974}, {0x1980, 0x19ab}, + {0x19b0, 0x19c9}, {0x19d0, 0x19da}, {0x19de, 0x1a1b}, {0x1a1e, 0x1a5e}, + {0x1a60, 0x1a7c}, {0x1a7f, 0x1a89}, {0x1a90, 0x1a99}, {0x1aa0, 0x1aad}, + {0x1ab0, 0x1abe}, {0x1b00, 0x1b4b}, {0x1b50, 0x1b7c}, {0x1b80, 0x1bf3}, + {0x1bfc, 0x1c37}, {0x1c3b, 0x1c49}, {0x1c4d, 0x1c88}, {0x1c90, 0x1cba}, + {0x1cbd, 0x1cc7}, {0x1cd0, 0x1cf9}, {0x1d00, 0x1df9}, {0x1dfb, 0x1f15}, + {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, + {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fc4}, {0x1fc6, 0x1fd3}, + {0x1fd6, 0x1fdb}, {0x1fdd, 0x1fef}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffe}, + {0x2010, 0x2027}, {0x2030, 0x205e}, {0x2074, 0x208e}, {0x2090, 0x209c}, + {0x20a0, 0x20bf}, {0x20d0, 0x20f0}, {0x2100, 0x218b}, {0x2190, 0x2426}, + {0x2440, 0x244a}, {0x2460, 0x2b73}, {0x2b76, 0x2b95}, {0x2b98, 0x2bc8}, + {0x2bca, 0x2bfe}, {0x2c00, 0x2c2e}, {0x2c30, 0x2c5e}, {0x2c60, 0x2cf3}, {0x2cf9, 0x2d25}, {0x2d30, 0x2d67}, {0x2d7f, 0x2d96}, {0x2da0, 0x2da6}, {0x2da8, 0x2dae}, {0x2db0, 0x2db6}, {0x2db8, 0x2dbe}, {0x2dc0, 0x2dc6}, - {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2e49}, + {0x2dc8, 0x2dce}, {0x2dd0, 0x2dd6}, {0x2dd8, 0x2dde}, {0x2de0, 0x2e4e}, {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, - {0x3001, 0x303f}, {0x3041, 0x3096}, {0x3099, 0x30ff}, {0x3105, 0x312e}, + {0x3001, 0x303f}, {0x3041, 0x3096}, {0x3099, 0x30ff}, {0x3105, 0x312f}, {0x3131, 0x318e}, {0x3190, 0x31ba}, {0x31c0, 0x31e3}, {0x31f0, 0x321e}, - {0x3220, 0x32fe}, {0x3300, 0x4db5}, {0x4dc0, 0x9fea}, {0xa000, 0xa48c}, - {0xa490, 0xa4c6}, {0xa4d0, 0xa62b}, {0xa640, 0xa6f7}, {0xa700, 0xa7ae}, - {0xa7b0, 0xa7b7}, {0xa7f7, 0xa82b}, {0xa830, 0xa839}, {0xa840, 0xa877}, - {0xa880, 0xa8c5}, {0xa8ce, 0xa8d9}, {0xa8e0, 0xa8fd}, {0xa900, 0xa953}, - {0xa95f, 0xa97c}, {0xa980, 0xa9cd}, {0xa9cf, 0xa9d9}, {0xa9de, 0xa9fe}, - {0xaa00, 0xaa36}, {0xaa40, 0xaa4d}, {0xaa50, 0xaa59}, {0xaa5c, 0xaac2}, - {0xaadb, 0xaaf6}, {0xab01, 0xab06}, {0xab09, 0xab0e}, {0xab11, 0xab16}, - {0xab20, 0xab26}, {0xab28, 0xab2e}, {0xab30, 0xab65}, {0xab70, 0xabed}, - {0xabf0, 0xabf9}, {0xac00, 0xd7a3}, {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, - {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, - {0xfb1d, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb46, 0xfbc1}, {0xfbd3, 0xfd3f}, - {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfd}, {0xfe00, 0xfe19}, - {0xfe20, 0xfe52}, {0xfe54, 0xfe66}, {0xfe68, 0xfe6b}, {0xfe70, 0xfe74}, - {0xfe76, 0xfefc}, {0xff01, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, - {0xffd2, 0xffd7}, {0xffda, 0xffdc}, {0xffe0, 0xffe6}, {0xffe8, 0xffee} + {0x3220, 0x32fe}, {0x3300, 0x4db5}, {0x4dc0, 0x9fef}, {0xa000, 0xa48c}, + {0xa490, 0xa4c6}, {0xa4d0, 0xa62b}, {0xa640, 0xa6f7}, {0xa700, 0xa7b9}, + {0xa7f7, 0xa82b}, {0xa830, 0xa839}, {0xa840, 0xa877}, {0xa880, 0xa8c5}, + {0xa8ce, 0xa8d9}, {0xa8e0, 0xa953}, {0xa95f, 0xa97c}, {0xa980, 0xa9cd}, + {0xa9cf, 0xa9d9}, {0xa9de, 0xa9fe}, {0xaa00, 0xaa36}, {0xaa40, 0xaa4d}, + {0xaa50, 0xaa59}, {0xaa5c, 0xaac2}, {0xaadb, 0xaaf6}, {0xab01, 0xab06}, + {0xab09, 0xab0e}, {0xab11, 0xab16}, {0xab20, 0xab26}, {0xab28, 0xab2e}, + {0xab30, 0xab65}, {0xab70, 0xabed}, {0xabf0, 0xabf9}, {0xac00, 0xd7a3}, + {0xd7b0, 0xd7c6}, {0xd7cb, 0xd7fb}, {0xf900, 0xfa6d}, {0xfa70, 0xfad9}, + {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb36}, {0xfb38, 0xfb3c}, + {0xfb46, 0xfbc1}, {0xfbd3, 0xfd3f}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, + {0xfdf0, 0xfdfd}, {0xfe00, 0xfe19}, {0xfe20, 0xfe52}, {0xfe54, 0xfe66}, + {0xfe68, 0xfe6b}, {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff01, 0xffbe}, + {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc}, + {0xffe0, 0xffe6}, {0xffe8, 0xffee} #if CHRBITS > 16 ,{0x10000, 0x1000b}, {0x1000d, 0x10026}, {0x10028, 0x1003a}, {0x1003f, 0x1004d}, {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10100, 0x10102}, {0x10107, 0x10133}, @@ -697,81 +706,85 @@ static const crange graphRangeTable[] = { {0x10760, 0x10767}, {0x10800, 0x10805}, {0x1080a, 0x10835}, {0x1083f, 0x10855}, {0x10857, 0x1089e}, {0x108a7, 0x108af}, {0x108e0, 0x108f2}, {0x108fb, 0x1091b}, {0x1091f, 0x10939}, {0x10980, 0x109b7}, {0x109bc, 0x109cf}, {0x109d2, 0x10a03}, - {0x10a0c, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a33}, {0x10a38, 0x10a3a}, - {0x10a3f, 0x10a47}, {0x10a50, 0x10a58}, {0x10a60, 0x10a9f}, {0x10ac0, 0x10ae6}, + {0x10a0c, 0x10a13}, {0x10a15, 0x10a17}, {0x10a19, 0x10a35}, {0x10a38, 0x10a3a}, + {0x10a3f, 0x10a48}, {0x10a50, 0x10a58}, {0x10a60, 0x10a9f}, {0x10ac0, 0x10ae6}, {0x10aeb, 0x10af6}, {0x10b00, 0x10b35}, {0x10b39, 0x10b55}, {0x10b58, 0x10b72}, {0x10b78, 0x10b91}, {0x10b99, 0x10b9c}, {0x10ba9, 0x10baf}, {0x10c00, 0x10c48}, - {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10cfa, 0x10cff}, {0x10e60, 0x10e7e}, - {0x11000, 0x1104d}, {0x11052, 0x1106f}, {0x1107f, 0x110bc}, {0x110be, 0x110c1}, - {0x110d0, 0x110e8}, {0x110f0, 0x110f9}, {0x11100, 0x11134}, {0x11136, 0x11143}, - {0x11150, 0x11176}, {0x11180, 0x111cd}, {0x111d0, 0x111df}, {0x111e1, 0x111f4}, - {0x11200, 0x11211}, {0x11213, 0x1123e}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, - {0x1128f, 0x1129d}, {0x1129f, 0x112a9}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9}, - {0x11300, 0x11303}, {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, - {0x11335, 0x11339}, {0x1133c, 0x11344}, {0x1134b, 0x1134d}, {0x1135d, 0x11363}, - {0x11366, 0x1136c}, {0x11370, 0x11374}, {0x11400, 0x11459}, {0x11480, 0x114c7}, - {0x114d0, 0x114d9}, {0x11580, 0x115b5}, {0x115b8, 0x115dd}, {0x11600, 0x11644}, - {0x11650, 0x11659}, {0x11660, 0x1166c}, {0x11680, 0x116b7}, {0x116c0, 0x116c9}, - {0x11700, 0x11719}, {0x1171d, 0x1172b}, {0x11730, 0x1173f}, {0x118a0, 0x118f2}, - {0x11a00, 0x11a47}, {0x11a50, 0x11a83}, {0x11a86, 0x11a9c}, {0x11a9e, 0x11aa2}, - {0x11ac0, 0x11af8}, {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c45}, - {0x11c50, 0x11c6c}, {0x11c70, 0x11c8f}, {0x11c92, 0x11ca7}, {0x11ca9, 0x11cb6}, - {0x11d00, 0x11d06}, {0x11d0b, 0x11d36}, {0x11d3f, 0x11d47}, {0x11d50, 0x11d59}, + {0x10c80, 0x10cb2}, {0x10cc0, 0x10cf2}, {0x10cfa, 0x10d27}, {0x10d30, 0x10d39}, + {0x10e60, 0x10e7e}, {0x10f00, 0x10f27}, {0x10f30, 0x10f59}, {0x11000, 0x1104d}, + {0x11052, 0x1106f}, {0x1107f, 0x110bc}, {0x110be, 0x110c1}, {0x110d0, 0x110e8}, + {0x110f0, 0x110f9}, {0x11100, 0x11134}, {0x11136, 0x11146}, {0x11150, 0x11176}, + {0x11180, 0x111cd}, {0x111d0, 0x111df}, {0x111e1, 0x111f4}, {0x11200, 0x11211}, + {0x11213, 0x1123e}, {0x11280, 0x11286}, {0x1128a, 0x1128d}, {0x1128f, 0x1129d}, + {0x1129f, 0x112a9}, {0x112b0, 0x112ea}, {0x112f0, 0x112f9}, {0x11300, 0x11303}, + {0x11305, 0x1130c}, {0x11313, 0x11328}, {0x1132a, 0x11330}, {0x11335, 0x11339}, + {0x1133b, 0x11344}, {0x1134b, 0x1134d}, {0x1135d, 0x11363}, {0x11366, 0x1136c}, + {0x11370, 0x11374}, {0x11400, 0x11459}, {0x11480, 0x114c7}, {0x114d0, 0x114d9}, + {0x11580, 0x115b5}, {0x115b8, 0x115dd}, {0x11600, 0x11644}, {0x11650, 0x11659}, + {0x11660, 0x1166c}, {0x11680, 0x116b7}, {0x116c0, 0x116c9}, {0x11700, 0x1171a}, + {0x1171d, 0x1172b}, {0x11730, 0x1173f}, {0x11800, 0x1183b}, {0x118a0, 0x118f2}, + {0x11a00, 0x11a47}, {0x11a50, 0x11a83}, {0x11a86, 0x11aa2}, {0x11ac0, 0x11af8}, + {0x11c00, 0x11c08}, {0x11c0a, 0x11c36}, {0x11c38, 0x11c45}, {0x11c50, 0x11c6c}, + {0x11c70, 0x11c8f}, {0x11c92, 0x11ca7}, {0x11ca9, 0x11cb6}, {0x11d00, 0x11d06}, + {0x11d0b, 0x11d36}, {0x11d3f, 0x11d47}, {0x11d50, 0x11d59}, {0x11d60, 0x11d65}, + {0x11d6a, 0x11d8e}, {0x11d93, 0x11d98}, {0x11da0, 0x11da9}, {0x11ee0, 0x11ef8}, {0x12000, 0x12399}, {0x12400, 0x1246e}, {0x12470, 0x12474}, {0x12480, 0x12543}, {0x13000, 0x1342e}, {0x14400, 0x14646}, {0x16800, 0x16a38}, {0x16a40, 0x16a5e}, {0x16a60, 0x16a69}, {0x16ad0, 0x16aed}, {0x16af0, 0x16af5}, {0x16b00, 0x16b45}, {0x16b50, 0x16b59}, {0x16b5b, 0x16b61}, {0x16b63, 0x16b77}, {0x16b7d, 0x16b8f}, - {0x16f00, 0x16f44}, {0x16f50, 0x16f7e}, {0x16f8f, 0x16f9f}, {0x17000, 0x187ec}, - {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, {0x1bc00, 0x1bc6a}, - {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, {0x1bc9c, 0x1bc9f}, - {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d129, 0x1d172}, {0x1d17b, 0x1d1e8}, - {0x1d200, 0x1d245}, {0x1d300, 0x1d356}, {0x1d360, 0x1d371}, {0x1d400, 0x1d454}, - {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, - {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, - {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, - {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d7cb}, {0x1d7ce, 0x1da8b}, {0x1da9b, 0x1da9f}, - {0x1daa1, 0x1daaf}, {0x1e000, 0x1e006}, {0x1e008, 0x1e018}, {0x1e01b, 0x1e021}, - {0x1e026, 0x1e02a}, {0x1e800, 0x1e8c4}, {0x1e8c7, 0x1e8d6}, {0x1e900, 0x1e94a}, - {0x1e950, 0x1e959}, {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, - {0x1ee34, 0x1ee37}, {0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, - {0x1ee74, 0x1ee77}, {0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, - {0x1eea1, 0x1eea3}, {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x1f000, 0x1f02b}, - {0x1f030, 0x1f093}, {0x1f0a0, 0x1f0ae}, {0x1f0b1, 0x1f0bf}, {0x1f0c1, 0x1f0cf}, - {0x1f0d1, 0x1f0f5}, {0x1f100, 0x1f10c}, {0x1f110, 0x1f12e}, {0x1f130, 0x1f16b}, - {0x1f170, 0x1f1ac}, {0x1f1e6, 0x1f202}, {0x1f210, 0x1f23b}, {0x1f240, 0x1f248}, - {0x1f260, 0x1f265}, {0x1f300, 0x1f6d4}, {0x1f6e0, 0x1f6ec}, {0x1f6f0, 0x1f6f9}, - {0x1f700, 0x1f773}, {0x1f780, 0x1f7d4}, {0x1f800, 0x1f80b}, {0x1f810, 0x1f847}, - {0x1f850, 0x1f859}, {0x1f860, 0x1f887}, {0x1f890, 0x1f8ad}, {0x1f900, 0x1f90b}, - {0x1f910, 0x1f93e}, {0x1f940, 0x1f970}, {0x1f973, 0x1f976}, {0x1f97c, 0x1f9a2}, - {0x1f9b0, 0x1f9b9}, {0x1f9c0, 0x1f9c2}, {0x1f9d0, 0x1f9ff}, {0x1fa60, 0x1fa6d}, - {0x20000, 0x2a6d6}, {0x2a700, 0x2b734}, {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, - {0x2ceb0, 0x2ebe0}, {0x2f800, 0x2fa1d}, {0xe0100, 0xe01ef} + {0x16e40, 0x16e9a}, {0x16f00, 0x16f44}, {0x16f50, 0x16f7e}, {0x16f8f, 0x16f9f}, + {0x17000, 0x187f1}, {0x18800, 0x18af2}, {0x1b000, 0x1b11e}, {0x1b170, 0x1b2fb}, + {0x1bc00, 0x1bc6a}, {0x1bc70, 0x1bc7c}, {0x1bc80, 0x1bc88}, {0x1bc90, 0x1bc99}, + {0x1bc9c, 0x1bc9f}, {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d129, 0x1d172}, + {0x1d17b, 0x1d1e8}, {0x1d200, 0x1d245}, {0x1d2e0, 0x1d2f3}, {0x1d300, 0x1d356}, + {0x1d360, 0x1d378}, {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d4a9, 0x1d4ac}, + {0x1d4ae, 0x1d4b9}, {0x1d4bd, 0x1d4c3}, {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, + {0x1d50d, 0x1d514}, {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, + {0x1d540, 0x1d544}, {0x1d54a, 0x1d550}, {0x1d552, 0x1d6a5}, {0x1d6a8, 0x1d7cb}, + {0x1d7ce, 0x1da8b}, {0x1da9b, 0x1da9f}, {0x1daa1, 0x1daaf}, {0x1e000, 0x1e006}, + {0x1e008, 0x1e018}, {0x1e01b, 0x1e021}, {0x1e026, 0x1e02a}, {0x1e800, 0x1e8c4}, + {0x1e8c7, 0x1e8d6}, {0x1e900, 0x1e94a}, {0x1e950, 0x1e959}, {0x1ec71, 0x1ecb4}, + {0x1ee00, 0x1ee03}, {0x1ee05, 0x1ee1f}, {0x1ee29, 0x1ee32}, {0x1ee34, 0x1ee37}, + {0x1ee4d, 0x1ee4f}, {0x1ee67, 0x1ee6a}, {0x1ee6c, 0x1ee72}, {0x1ee74, 0x1ee77}, + {0x1ee79, 0x1ee7c}, {0x1ee80, 0x1ee89}, {0x1ee8b, 0x1ee9b}, {0x1eea1, 0x1eea3}, + {0x1eea5, 0x1eea9}, {0x1eeab, 0x1eebb}, {0x1f000, 0x1f02b}, {0x1f030, 0x1f093}, + {0x1f0a0, 0x1f0ae}, {0x1f0b1, 0x1f0bf}, {0x1f0c1, 0x1f0cf}, {0x1f0d1, 0x1f0f5}, + {0x1f100, 0x1f10c}, {0x1f110, 0x1f16b}, {0x1f170, 0x1f1ac}, {0x1f1e6, 0x1f202}, + {0x1f210, 0x1f23b}, {0x1f240, 0x1f248}, {0x1f260, 0x1f265}, {0x1f300, 0x1f6d4}, + {0x1f6e0, 0x1f6ec}, {0x1f6f0, 0x1f6f9}, {0x1f700, 0x1f773}, {0x1f780, 0x1f7d8}, + {0x1f800, 0x1f80b}, {0x1f810, 0x1f847}, {0x1f850, 0x1f859}, {0x1f860, 0x1f887}, + {0x1f890, 0x1f8ad}, {0x1f900, 0x1f90b}, {0x1f910, 0x1f93e}, {0x1f940, 0x1f970}, + {0x1f973, 0x1f976}, {0x1f97c, 0x1f9a2}, {0x1f9b0, 0x1f9b9}, {0x1f9c0, 0x1f9c2}, + {0x1f9d0, 0x1f9ff}, {0x1fa60, 0x1fa6d}, {0x20000, 0x2a6d6}, {0x2a700, 0x2b734}, + {0x2b740, 0x2b81d}, {0x2b820, 0x2cea1}, {0x2ceb0, 0x2ebe0}, {0x2f800, 0x2fa1d}, + {0xe0100, 0xe01ef} #endif }; #define NUM_GRAPH_RANGE (sizeof(graphRangeTable)/sizeof(crange)) static const chr graphCharTable[] = { - 0x38c, 0x589, 0x58a, 0x85e, 0x98f, 0x990, 0x9b2, 0x9c7, 0x9c8, - 0x9d7, 0x9dc, 0x9dd, 0xa0f, 0xa10, 0xa32, 0xa33, 0xa35, 0xa36, - 0xa38, 0xa39, 0xa3c, 0xa47, 0xa48, 0xa51, 0xa5e, 0xab2, 0xab3, - 0xad0, 0xb0f, 0xb10, 0xb32, 0xb33, 0xb47, 0xb48, 0xb56, 0xb57, - 0xb5c, 0xb5d, 0xb82, 0xb83, 0xb99, 0xb9a, 0xb9c, 0xb9e, 0xb9f, - 0xba3, 0xba4, 0xbd0, 0xbd7, 0xc55, 0xc56, 0xcd5, 0xcd6, 0xcde, - 0xcf1, 0xcf2, 0xd82, 0xd83, 0xdbd, 0xdca, 0xdd6, 0xe81, 0xe82, - 0xe84, 0xe87, 0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa, 0xeab, - 0xec6, 0x10c7, 0x10cd, 0x1258, 0x12c0, 0x1772, 0x1773, 0x1940, 0x1f59, - 0x1f5b, 0x1f5d, 0x2070, 0x2071, 0x2d27, 0x2d2d, 0x2d6f, 0x2d70, 0xfb3e, - 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfffc, 0xfffd + 0x38c, 0x85e, 0x98f, 0x990, 0x9b2, 0x9c7, 0x9c8, 0x9d7, 0x9dc, + 0x9dd, 0xa0f, 0xa10, 0xa32, 0xa33, 0xa35, 0xa36, 0xa38, 0xa39, + 0xa3c, 0xa47, 0xa48, 0xa51, 0xa5e, 0xab2, 0xab3, 0xad0, 0xb0f, + 0xb10, 0xb32, 0xb33, 0xb47, 0xb48, 0xb56, 0xb57, 0xb5c, 0xb5d, + 0xb82, 0xb83, 0xb99, 0xb9a, 0xb9c, 0xb9e, 0xb9f, 0xba3, 0xba4, + 0xbd0, 0xbd7, 0xc55, 0xc56, 0xcd5, 0xcd6, 0xcde, 0xcf1, 0xcf2, + 0xd82, 0xd83, 0xdbd, 0xdca, 0xdd6, 0xe81, 0xe82, 0xe84, 0xe87, + 0xe88, 0xe8a, 0xe8d, 0xea5, 0xea7, 0xeaa, 0xeab, 0xec6, 0x10c7, + 0x10cd, 0x1258, 0x12c0, 0x1772, 0x1773, 0x1940, 0x1f59, 0x1f5b, 0x1f5d, + 0x2070, 0x2071, 0x2d27, 0x2d2d, 0x2d6f, 0x2d70, 0xfb3e, 0xfb40, 0xfb41, + 0xfb43, 0xfb44, 0xfffc, 0xfffd #if CHRBITS > 16 ,0x1003c, 0x1003d, 0x101a0, 0x1056f, 0x10808, 0x10837, 0x10838, 0x1083c, 0x108f4, 0x108f5, 0x1093f, 0x10a05, 0x10a06, 0x11288, 0x1130f, 0x11310, 0x11332, 0x11333, - 0x11347, 0x11348, 0x11350, 0x11357, 0x1145b, 0x1145d, 0x118ff, 0x11d08, 0x11d09, - 0x11d3a, 0x11d3c, 0x11d3d, 0x16a6e, 0x16a6f, 0x16fe0, 0x16fe1, 0x1d49e, 0x1d49f, - 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, 0x1d546, 0x1e023, 0x1e024, 0x1e95e, 0x1e95f, - 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, - 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, - 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e, 0x1eef0, 0x1eef1, 0x1f250, 0x1f251, 0x1f97a + 0x11347, 0x11348, 0x11350, 0x11357, 0x1145b, 0x1145d, 0x1145e, 0x118ff, 0x11d08, + 0x11d09, 0x11d3a, 0x11d3c, 0x11d3d, 0x11d67, 0x11d68, 0x11d90, 0x11d91, 0x16a6e, + 0x16a6f, 0x16fe0, 0x16fe1, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4bb, + 0x1d546, 0x1e023, 0x1e024, 0x1e95e, 0x1e95f, 0x1ee21, 0x1ee22, 0x1ee24, 0x1ee27, + 0x1ee39, 0x1ee3b, 0x1ee42, 0x1ee47, 0x1ee49, 0x1ee4b, 0x1ee51, 0x1ee52, 0x1ee54, + 0x1ee57, 0x1ee59, 0x1ee5b, 0x1ee5d, 0x1ee5f, 0x1ee61, 0x1ee62, 0x1ee64, 0x1ee7e, + 0x1eef0, 0x1eef1, 0x1f250, 0x1f251, 0x1f97a #endif }; diff --git a/generic/tclUniData.c b/generic/tclUniData.c index 834fcc4..faca93d 100644 --- a/generic/tclUniData.c +++ b/generic/tclUniData.c @@ -42,22 +42,22 @@ static const unsigned short pageMap[] = { 4384, 4416, 1344, 4448, 4480, 4512, 4544, 1344, 4576, 4608, 4640, 4672, 1344, 4704, 4736, 4768, 4800, 4832, 1344, 4864, 4896, 4928, 4960, 1344, 4992, 5024, 5056, 5088, 1824, 1824, 5120, 5152, 5184, 5216, 5248, 5280, - 1344, 5312, 1344, 5344, 5376, 5408, 5440, 1824, 5472, 5504, 5536, 5568, - 5600, 5632, 5664, 5600, 704, 5696, 224, 224, 224, 224, 5728, 224, 224, - 224, 5760, 5792, 5824, 5856, 5888, 5920, 5952, 5984, 6016, 6048, 6080, - 6112, 6144, 6176, 6208, 6240, 6272, 6304, 6336, 6368, 6400, 6432, 6464, - 6496, 6528, 6528, 6528, 6528, 6528, 6528, 6528, 6528, 6560, 6592, 4928, - 6624, 6656, 6688, 6720, 6752, 4928, 6784, 6816, 6848, 6880, 6912, 6944, - 6976, 4928, 4928, 4928, 4928, 4928, 7008, 7040, 7072, 4928, 4928, 4928, - 7104, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 7136, 7168, 4928, 7200, - 7232, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 6528, 6528, 6528, - 6528, 7264, 6528, 7296, 7328, 6528, 6528, 6528, 6528, 6528, 6528, 6528, - 6528, 4928, 7360, 7392, 7424, 7456, 7488, 7520, 7552, 7584, 7616, 7648, + 1344, 5312, 1344, 5344, 5376, 5408, 5440, 5472, 5504, 5536, 5568, 5600, + 5632, 5664, 5696, 5632, 704, 5728, 224, 224, 224, 224, 5760, 224, 224, + 224, 5792, 5824, 5856, 5888, 5920, 5952, 5984, 6016, 6048, 6080, 6112, + 6144, 6176, 6208, 6240, 6272, 6304, 6336, 6368, 6400, 6432, 6464, 6496, + 6528, 6560, 6560, 6560, 6560, 6560, 6560, 6560, 6560, 6592, 6624, 4928, + 6656, 6688, 6720, 6752, 6784, 4928, 6816, 6848, 6880, 6912, 6944, 6976, + 7008, 4928, 4928, 4928, 4928, 4928, 7040, 7072, 7104, 4928, 4928, 4928, + 7136, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 7168, 7200, 4928, 7232, + 7264, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 6560, 6560, 6560, + 6560, 7296, 6560, 7328, 7360, 6560, 6560, 6560, 6560, 6560, 6560, 6560, + 6560, 4928, 7392, 7424, 7456, 7488, 4928, 7520, 7552, 7584, 7616, 7648, 7680, 224, 224, 224, 7712, 7744, 7776, 1344, 7808, 7840, 7872, 7872, 704, 7904, 7936, 7968, 1824, 8000, 4928, 4928, 8032, 4928, 4928, 4928, 4928, 4928, 4928, 8064, 8096, 8128, 8160, 3232, 1344, 8192, 4192, 1344, - 8224, 8256, 8288, 1344, 1344, 8320, 8352, 4928, 8384, 8416, 8448, 8480, - 4928, 8448, 8512, 4928, 8416, 4928, 4928, 4928, 4928, 4928, 4928, 4928, + 8224, 8256, 8288, 1344, 1344, 8320, 8352, 4928, 8384, 7552, 8416, 8448, + 4928, 8416, 8480, 4928, 7552, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -130,7 +130,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1792, 8544, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 8512, 8544, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 8576, 4928, 8608, 5408, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -203,37 +203,37 @@ static const unsigned short pageMap[] = { 1344, 11520, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 7840, 4704, 10272, 1824, 1824, 1824, 1824, 11552, 11584, 11616, 11648, 4736, 11680, 1824, 11712, 11744, 11776, - 1824, 1824, 1344, 11808, 11840, 6848, 11872, 11904, 11936, 11968, 12000, + 1824, 1824, 1344, 11808, 11840, 6880, 11872, 11904, 11936, 11968, 12000, 1824, 12032, 12064, 1344, 12096, 12128, 12160, 12192, 12224, 1824, - 1824, 1344, 1344, 12256, 1824, 12288, 12320, 12352, 12384, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 12416, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 12448, - 12480, 12512, 12544, 5248, 12576, 12608, 12640, 12672, 12704, 12736, - 12768, 5248, 12800, 12832, 12864, 12896, 12928, 1824, 1824, 12960, - 12992, 13024, 13056, 13088, 2368, 13120, 13152, 1824, 1824, 1824, 1824, - 1344, 13184, 13216, 1824, 1344, 13248, 13280, 1824, 1824, 1824, 1824, - 1824, 1344, 13312, 13344, 1824, 1344, 13376, 13408, 13440, 1344, 13472, - 13504, 1824, 13536, 13568, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 13600, 13632, 13664, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 13696, 13728, 13760, 1344, 13792, 13824, 1344, - 13856, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 13888, 13920, - 13952, 13984, 14016, 14048, 1824, 1824, 14080, 14112, 14144, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, + 1824, 1344, 1344, 12256, 1824, 12288, 12320, 12352, 12384, 1344, 12416, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 12448, 1824, + 1824, 1824, 1824, 12000, 12480, 12512, 1824, 1824, 1824, 1824, 1824, + 12544, 12576, 12608, 12640, 5248, 12672, 12704, 12736, 12768, 12800, + 12832, 12864, 5248, 12896, 12928, 12960, 12992, 13024, 1824, 1824, + 13056, 13088, 13120, 13152, 13184, 13216, 13248, 13280, 1824, 1824, + 1824, 1824, 1344, 13312, 13344, 1824, 1344, 13376, 13408, 1824, 1824, + 1824, 1824, 1824, 1344, 13440, 13472, 1824, 1344, 13504, 13536, 13568, + 1344, 13600, 13632, 1824, 4032, 13664, 1824, 1824, 1824, 1824, 1824, + 1824, 1344, 13696, 1824, 1824, 1824, 13728, 13760, 13792, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 13824, 13856, 13888, 1344, 13920, + 13952, 1344, 4608, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 13984, 14016, 14048, 14080, 14112, 14144, 1824, 1824, 14176, 14208, + 14240, 14272, 14304, 13632, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 14336, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 9984, 1824, 1824, 1824, 10848, 10848, 10848, 14176, 1344, 1344, 1344, - 1344, 1344, 1344, 14208, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 9984, 1824, 1824, 1824, 10848, 10848, 10848, + 14368, 1344, 1344, 1344, 1344, 1344, 1344, 14400, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 14240, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14432, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -243,10 +243,9 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 14272, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14464, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -268,12 +267,13 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 13856, 4736, 14304, 1824, 1824, 10208, - 14336, 1344, 14368, 14400, 14432, 14464, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, - 14496, 14528, 14560, 1824, 1824, 14592, 1344, 1344, 1344, 1344, 1344, + 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 4608, 4736, 14496, + 1824, 1824, 10208, 14528, 1344, 14560, 14592, 14624, 8512, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 13728, 13760, 14656, 1824, + 1824, 1824, 1344, 1344, 14688, 14720, 14752, 1824, 1824, 14784, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -289,9 +289,9 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 14624, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14816, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14656, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 14848, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -316,17 +316,16 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 4736, 1824, 1824, 10208, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 9856, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 4736, 1824, 1824, 10208, 1344, 1344, 1344, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 9856, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 14688, 14720, - 14752, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, + 14880, 14912, 14944, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -338,40 +337,42 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 4928, 4928, 4928, 4928, 4928, 4928, 4928, 8064, 4928, 14784, 4928, - 14816, 14848, 14880, 4928, 14912, 4928, 4928, 14944, 1824, 1824, 1824, - 1824, 1824, 4928, 4928, 14976, 15008, 1824, 1824, 1824, 1824, 15040, - 15072, 15104, 15136, 15168, 15200, 15232, 15264, 15296, 15328, 15360, - 15392, 15424, 15040, 15072, 15456, 15136, 15488, 15520, 15552, 15264, - 15584, 15616, 15648, 15680, 15712, 15744, 15776, 15808, 15840, 15872, - 15904, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, - 4928, 4928, 4928, 4928, 4928, 4928, 704, 15936, 704, 15968, 16000, - 16032, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 8064, 4928, 14976, + 4928, 15008, 15040, 15072, 4928, 15104, 4928, 4928, 15136, 1824, 1824, + 1824, 1824, 15168, 4928, 4928, 15200, 15232, 1824, 1824, 1824, 1824, + 15264, 15296, 15328, 15360, 15392, 15424, 15456, 15488, 15520, 15552, + 15584, 15616, 15648, 15264, 15296, 15680, 15360, 15712, 15744, 15776, + 15488, 15808, 15840, 15872, 15904, 15936, 15968, 16000, 16032, 16064, + 16096, 16128, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, + 4928, 4928, 4928, 4928, 4928, 4928, 4928, 704, 16160, 704, 16192, 16224, + 16256, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 16064, 16096, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 16288, 16320, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1344, 1344, 1344, 1344, 1344, 1344, 16128, 1824, 16160, 16192, - 16224, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1344, 1344, 1344, 1344, 1344, 1344, 16352, 1824, 16384, 16416, + 16448, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, - 1824, 1824, 1824, 16256, 16288, 16320, 16352, 16384, 16416, 1824, 16448, - 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 4928, 16480, 4928, - 4928, 8032, 16512, 16544, 8064, 16576, 16608, 4928, 16480, 4928, 16640, - 1824, 16672, 16704, 16736, 16768, 16800, 1824, 1824, 1824, 1824, 4928, - 4928, 4928, 4928, 4928, 4928, 4928, 16832, 4928, 4928, 4928, 4928, + 1824, 1824, 16480, 6880, 16512, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1824, 1824, 16544, 16576, 16608, 16640, 16672, 16704, 1824, + 16736, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 4928, 16768, + 4928, 4928, 8032, 16800, 16832, 8064, 16864, 4928, 4928, 16768, 4928, + 16896, 1824, 16928, 16960, 16992, 17024, 17056, 1824, 1824, 1824, 1824, + 4928, 4928, 4928, 4928, 4928, 4928, 4928, 17088, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, 4928, - 4928, 4928, 4928, 4928, 4928, 4928, 16864, 16896, 4928, 4928, 4928, - 8032, 4928, 4928, 16864, 1824, 16480, 4928, 16928, 4928, 16960, 16992, - 1824, 1824, 16480, 8416, 4928, 17024, 4928, 17056, 16704, 4928, 1824, - 1824, 1824, 16992, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 4928, 4928, 4928, 4928, 4928, 4928, 4928, 17120, 17152, 4928, 4928, + 4928, 8032, 4928, 4928, 17184, 1824, 16768, 4928, 17216, 4928, 17248, + 17280, 1824, 1824, 16768, 7552, 4928, 17312, 4928, 17344, 16960, 4928, + 1824, 1824, 1824, 17280, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -482,8 +483,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 7840, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + 1344, 1344, 1344, 7840, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -494,7 +494,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 17088, 1344, 1344, 1344, 1344, 1344, 1344, 11360, 1344, 1344, + 1344, 1344, 17376, 1344, 1344, 1344, 1344, 1344, 1344, 11360, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -509,7 +509,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 17120, + 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 17408, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, @@ -529,7 +529,7 @@ static const unsigned short pageMap[] = { 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, - 1344, 1344, 1344, 1344, 1344, 17152, 1824, 1824, 1824, 1824, 1824, + 1344, 1344, 1344, 1344, 1344, 17440, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, @@ -539,7 +539,6 @@ static const unsigned short pageMap[] = { 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 11360 - #endif /* TCL_UTF_MAX > 3 */ }; @@ -617,100 +616,100 @@ static const unsigned char groupMap[] = { 23, 24, 23, 24, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 0, 0, 91, 3, 3, 3, 3, 3, 3, 0, 123, 123, 123, 123, 123, 123, 123, 123, + 0, 0, 91, 3, 3, 3, 3, 3, 3, 21, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 21, 0, 3, 8, 0, 0, 14, 14, 4, 0, 92, 92, 92, 92, 92, 92, + 123, 123, 123, 21, 21, 3, 8, 0, 0, 14, 14, 4, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 8, 92, 3, 92, 92, 3, 92, 92, 3, 92, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, - 15, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, - 17, 17, 7, 7, 7, 3, 3, 4, 3, 3, 14, 14, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 3, 17, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 15, 92, + 92, 92, 92, 92, 92, 92, 8, 92, 3, 92, 92, 3, 92, 92, 3, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, + 15, 15, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, + 17, 17, 17, 7, 7, 7, 3, 3, 4, 3, 3, 14, 14, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 3, 17, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 15, + 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 3, 15, 92, 92, 92, 92, 92, 92, 92, 17, 14, 92, 92, 92, 92, 92, - 92, 91, 91, 92, 92, 14, 92, 92, 92, 92, 15, 15, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 15, 15, 15, 14, 14, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 0, 17, 15, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 3, 15, 92, 92, 92, 92, 92, 92, 92, 17, 14, 92, 92, 92, 92, + 92, 92, 91, 91, 92, 92, 14, 92, 92, 92, 92, 15, 15, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 15, 15, 15, 14, 14, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 17, 15, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, + 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 91, 91, 14, 3, 3, 3, 91, 0, 0, 0, 0, 0, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 14, 3, 3, 3, 91, 0, 0, + 92, 4, 4, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 91, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 91, 92, 92, 92, 91, 92, 92, 92, 92, 92, 0, 0, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 92, 92, 92, 92, 91, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 91, 92, 92, 92, 91, 92, 92, 92, 92, 92, 0, 0, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, - 92, 92, 0, 0, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 15, 92, 92, 92, 0, 0, 3, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 17, 92, 92, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 17, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, - 124, 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, - 124, 124, 92, 124, 124, 15, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 92, 92, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 3, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 0, 0, - 15, 15, 15, 15, 0, 0, 92, 15, 124, 124, 124, 92, 92, 92, 92, 0, 0, - 124, 124, 0, 0, 124, 124, 92, 15, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0, - 0, 0, 15, 15, 0, 15, 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 15, 15, 4, 4, 18, 18, 18, 18, 18, 18, 14, 4, 15, 3, 0, 0, 0, - 92, 92, 124, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 0, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, - 0, 15, 15, 0, 0, 92, 0, 124, 124, 124, 92, 92, 0, 0, 0, 0, 92, 92, - 0, 0, 92, 92, 92, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, 92, 15, - 15, 15, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 124, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 92, 124, 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, + 92, 124, 124, 124, 124, 92, 124, 124, 15, 92, 92, 92, 92, 92, 92, 92, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 3, 3, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 3, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, + 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, + 0, 0, 0, 15, 15, 15, 15, 0, 0, 92, 15, 124, 124, 124, 92, 92, 92, 92, + 0, 0, 124, 124, 0, 0, 124, 124, 92, 15, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 15, 15, 0, 15, 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 15, 15, 4, 4, 18, 18, 18, 18, 18, 18, 14, 4, 15, 3, 92, + 0, 0, 92, 92, 124, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 0, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, + 15, 15, 0, 15, 15, 0, 0, 92, 0, 124, 124, 124, 92, 92, 0, 0, 0, 0, + 92, 92, 0, 0, 92, 92, 92, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 15, 15, + 15, 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, + 92, 15, 15, 15, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 124, 0, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, + 0, 0, 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 0, 92, 92, 124, 0, + 124, 124, 92, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 4, 0, 0, 0, + 0, 0, 0, 0, 15, 92, 92, 92, 92, 92, 92, 0, 92, 124, 124, 0, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, - 92, 15, 124, 124, 124, 92, 92, 92, 92, 92, 0, 92, 92, 124, 0, 124, - 124, 92, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 4, 0, 0, 0, 0, 0, - 0, 0, 15, 92, 92, 92, 92, 92, 92, 0, 92, 124, 124, 0, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 92, 15, - 124, 92, 124, 92, 92, 92, 92, 0, 0, 124, 124, 0, 0, 124, 124, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 92, 124, 0, 0, 0, 0, 15, 15, 0, 15, 15, 15, 92, - 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15, 18, 18, 18, 18, 18, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 0, 15, 15, 15, 15, 15, 15, - 0, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, 15, 0, - 15, 15, 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 0, 0, 0, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 124, 124, 92, 124, + 92, 15, 124, 92, 124, 92, 92, 92, 92, 0, 0, 124, 124, 0, 0, 124, 124, + 92, 0, 0, 0, 0, 0, 0, 0, 0, 92, 124, 0, 0, 0, 0, 15, 15, 0, 15, 15, + 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15, 18, 18, 18, + 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 0, 15, 15, 15, 15, + 15, 15, 0, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 0, 15, 15, 0, + 15, 0, 15, 15, 0, 0, 0, 15, 15, 0, 0, 0, 15, 15, 15, 0, 0, 0, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 124, 124, 92, 124, 124, 0, 0, 0, 124, 124, 124, 0, 124, 124, 124, 92, 0, 0, 15, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 14, 14, 14, 14, 14, 14, 4, 14, 0, - 0, 0, 0, 0, 92, 124, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 0, 0, 92, 124, 124, 124, 92, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 92, 92, 92, 124, 124, 124, 124, 0, 92, 92, 92, 0, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 92, 92, 0, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 92, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 18, 14, 15, 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 18, 18, 14, 15, 92, 124, 124, 3, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 0, 92, 15, 124, 92, 124, @@ -765,353 +764,355 @@ static const unsigned char groupMap[] = { 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 125, 0, 0, 0, 0, 0, 125, 0, 0, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 91, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, - 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 92, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, - 0, 0, 0, 0, 0, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, 104, 104, 104, 104, 104, - 104, 0, 0, 110, 110, 110, 110, 110, 110, 0, 0, 8, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 5, - 6, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 127, - 127, 127, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, - 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 3, 3, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, - 0, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, - 124, 92, 92, 92, 92, 92, 92, 92, 124, 124, 124, 124, 124, 124, 124, - 124, 92, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, - 3, 91, 3, 3, 3, 4, 15, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, - 0, 3, 3, 3, 3, 3, 3, 8, 3, 3, 3, 3, 92, 92, 92, 17, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 91, 15, 15, 15, 15, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 3, 91, 126, 126, 126, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, + 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, + 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, + 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 15, 0, 0, 0, 0, 0, 15, + 15, 0, 0, 92, 92, 92, 3, 3, 3, 3, 3, 3, 3, 3, 3, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 104, 104, 104, 104, 104, 104, 0, 0, 110, 110, 110, 110, + 110, 110, 0, 0, 8, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 3, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 5, 6, 0, 0, 0, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 128, 128, 128, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 92, 92, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 92, 92, 92, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 92, 92, 92, 124, 124, 124, 124, 92, - 92, 124, 124, 124, 0, 0, 0, 0, 124, 124, 92, 124, 124, 124, 124, 124, - 124, 92, 92, 92, 0, 0, 0, 0, 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, - 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 0, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 124, 92, 92, 92, 92, 92, 92, + 92, 124, 124, 124, 124, 124, 124, 124, 124, 92, 124, 124, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, 3, 91, 3, 3, 3, 4, 15, 92, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 8, 3, 3, + 3, 3, 92, 92, 92, 17, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 92, 92, 124, 124, 92, 0, 0, 3, 3, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 124, 92, 124, 92, 92, 92, 92, 92, 92, 92, 0, 92, 124, 92, 124, - 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 124, 124, 124, 124, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 92, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 91, 3, 3, 3, 3, 3, 3, 0, 0, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 119, 0, 92, 92, 92, 92, - 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 92, 15, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 92, - 92, 92, 92, 92, 124, 92, 124, 124, 124, 124, 124, 92, 124, 124, 15, - 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, - 3, 3, 3, 3, 3, 3, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, - 92, 92, 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, - 92, 92, 92, 92, 124, 124, 92, 92, 124, 92, 92, 92, 15, 15, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 124, 92, 92, 124, 124, 124, 92, 124, 92, 92, 92, 124, 124, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 15, 15, 15, 15, 124, 124, 124, 124, 124, - 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 0, - 0, 0, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 15, 15, - 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 91, 91, 91, 91, 91, 91, 3, 3, 128, 129, 130, 131, 131, - 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 92, 92, 3, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 124, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, 15, 92, 15, 15, 15, 15, - 124, 124, 92, 15, 15, 124, 92, 92, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 92, 92, 92, 124, 124, 124, 124, 92, 92, 124, 124, 124, 0, 0, 0, 0, + 124, 124, 92, 124, 124, 124, 124, 124, 124, 92, 92, 92, 0, 0, 0, 0, + 14, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 92, 92, 124, 124, 92, 0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 92, 124, 92, 92, + 92, 92, 92, 92, 92, 0, 92, 124, 92, 124, 124, 92, 92, 92, 92, 92, 92, + 92, 92, 124, 124, 124, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 0, 0, 92, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 91, + 3, 3, 3, 3, 3, 3, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 119, 0, 92, 92, 92, 92, 124, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 92, 124, 92, 92, 92, 92, 92, 124, 92, 124, + 124, 124, 124, 124, 92, 124, 124, 15, 15, 15, 15, 15, 15, 15, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, 92, 92, 92, 92, 92, 92, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 92, 92, 124, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 92, 92, 92, 92, 124, 124, + 92, 92, 124, 92, 92, 92, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 92, 92, 124, 124, + 124, 92, 124, 92, 92, 92, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, + 3, 15, 15, 15, 15, 124, 124, 124, 124, 124, 124, 124, 124, 92, 92, + 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 0, 0, 0, 3, 3, 3, 3, 3, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, 91, + 91, 91, 91, 91, 3, 3, 129, 130, 131, 132, 132, 133, 134, 135, 136, + 0, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 0, 0, 137, 137, 137, 3, 3, 3, 3, 3, 3, 3, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 3, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, + 15, 92, 15, 15, 15, 15, 124, 124, 92, 15, 15, 124, 92, 92, 0, 0, 0, + 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 91, 136, 21, - 21, 21, 137, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 91, 91, - 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 92, 92, 92, 92, - 92, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, 138, 21, 21, 139, 21, 140, - 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, - 141, 140, 140, 140, 140, 140, 140, 0, 0, 141, 141, 141, 141, 141, 141, - 0, 0, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, - 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, - 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 0, 0, 141, 141, - 141, 141, 141, 141, 0, 0, 21, 140, 21, 140, 21, 140, 21, 140, 0, 141, - 0, 141, 0, 141, 0, 141, 140, 140, 140, 140, 140, 140, 140, 140, 141, - 141, 141, 141, 141, 141, 141, 141, 142, 142, 143, 143, 143, 143, 144, - 144, 145, 145, 146, 146, 147, 147, 0, 0, 140, 140, 140, 140, 140, 140, - 140, 140, 148, 148, 148, 148, 148, 148, 148, 148, 140, 140, 140, 140, - 140, 140, 140, 140, 148, 148, 148, 148, 148, 148, 148, 148, 140, 140, - 140, 140, 140, 140, 140, 140, 148, 148, 148, 148, 148, 148, 148, 148, - 140, 140, 21, 149, 21, 0, 21, 21, 141, 141, 150, 150, 151, 11, 152, - 11, 11, 11, 21, 149, 21, 0, 21, 21, 153, 153, 153, 153, 151, 11, 11, - 11, 140, 140, 21, 21, 0, 0, 21, 21, 141, 141, 154, 154, 0, 11, 11, - 11, 140, 140, 21, 21, 21, 113, 21, 21, 141, 141, 155, 155, 117, 11, - 11, 11, 0, 0, 21, 149, 21, 0, 21, 21, 156, 156, 157, 157, 151, 11, - 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 17, 17, 17, 17, 17, 8, 8, 8, - 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, 5, 16, 3, 3, 3, 3, 3, 3, 3, 3, - 158, 159, 17, 17, 17, 17, 17, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 16, 20, - 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 17, 17, 17, 17, 17, 0, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 91, 0, 0, 18, 18, 18, 18, - 18, 18, 7, 7, 7, 5, 6, 91, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 7, 7, 7, 5, 6, 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 119, 119, 119, 119, 92, 119, 119, 119, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, - 14, 107, 14, 14, 14, 14, 107, 14, 14, 21, 107, 107, 107, 21, 21, 107, - 107, 107, 21, 14, 107, 14, 14, 7, 107, 107, 107, 107, 107, 14, 14, - 14, 14, 14, 14, 107, 14, 160, 14, 107, 14, 161, 162, 107, 107, 14, - 21, 107, 107, 163, 107, 21, 15, 15, 15, 15, 21, 14, 14, 21, 21, 107, - 107, 7, 7, 7, 7, 7, 107, 21, 21, 21, 21, 14, 7, 14, 14, 164, 14, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 127, 127, 127, 23, 24, 127, 127, 127, 127, 18, 14, 14, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14, 7, - 14, 14, 7, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, + 91, 91, 91, 91, 91, 91, 91, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 91, 138, 21, 21, 21, 139, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 0, 92, 92, 92, 92, 92, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 21, 21, 21, + 140, 21, 21, 141, 21, 142, 142, 142, 142, 142, 142, 142, 142, 143, + 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 0, + 0, 143, 143, 143, 143, 143, 143, 0, 0, 142, 142, 142, 142, 142, 142, + 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, + 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, + 142, 142, 142, 142, 0, 0, 143, 143, 143, 143, 143, 143, 0, 0, 21, 142, + 21, 142, 21, 142, 21, 142, 0, 143, 0, 143, 0, 143, 0, 143, 142, 142, + 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, + 144, 144, 145, 145, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 150, 150, 150, 150, 150, + 150, 150, 150, 142, 142, 142, 142, 142, 142, 142, 142, 150, 150, 150, + 150, 150, 150, 150, 150, 142, 142, 142, 142, 142, 142, 142, 142, 150, + 150, 150, 150, 150, 150, 150, 150, 142, 142, 21, 151, 21, 0, 21, 21, + 143, 143, 152, 152, 153, 11, 154, 11, 11, 11, 21, 151, 21, 0, 21, 21, + 155, 155, 155, 155, 153, 11, 11, 11, 142, 142, 21, 21, 0, 0, 21, 21, + 143, 143, 156, 156, 0, 11, 11, 11, 142, 142, 21, 21, 21, 113, 21, 21, + 143, 143, 157, 157, 117, 11, 11, 11, 0, 0, 21, 151, 21, 0, 21, 21, + 158, 158, 159, 159, 153, 11, 11, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 17, 17, 17, 17, 17, 8, 8, 8, 8, 8, 8, 3, 3, 16, 20, 5, 16, 16, 20, + 5, 16, 3, 3, 3, 3, 3, 3, 3, 3, 160, 161, 17, 17, 17, 17, 17, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 16, 20, 3, 3, 3, 3, 12, 12, 3, 3, 3, 7, 5, + 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 12, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 18, 91, 0, 0, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 91, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 7, 7, 7, 5, 6, 0, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 119, 119, 119, 119, 92, 119, 119, + 119, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 107, 14, 14, 14, 14, 107, 14, + 14, 21, 107, 107, 107, 21, 21, 107, 107, 107, 21, 14, 107, 14, 14, + 7, 107, 107, 107, 107, 107, 14, 14, 14, 14, 14, 14, 107, 14, 162, 14, + 107, 14, 163, 164, 107, 107, 14, 21, 107, 107, 165, 107, 21, 15, 15, + 15, 15, 21, 14, 14, 21, 21, 107, 107, 7, 7, 7, 7, 7, 107, 21, 21, 21, + 21, 14, 7, 14, 14, 166, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 128, 128, 128, 23, 24, + 128, 128, 128, 128, 18, 14, 14, 0, 0, 0, 0, 7, 7, 7, 7, 7, 14, 14, + 14, 14, 14, 7, 7, 14, 14, 14, 14, 7, 14, 14, 7, 14, 14, 7, 14, 14, + 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 7, 14, 7, 14, + 14, 14, 14, 7, 7, 14, 14, 7, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, + 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, - 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 14, 14, 14, 14, 14, 14, 14, - 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, + 14, 7, 7, 14, 14, 14, 14, 14, 14, 14, 5, 6, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, + 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, - 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 18, 18, + 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 5, 6, 5, 6, + 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, + 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, + 7, 7, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 5, 6, 5, + 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 5, 6, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 14, 14, 7, 7, 7, 7, 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, + 7, 7, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 5, 6, 7, 7, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 7, 7, 7, 7, + 7, 7, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, + 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, + 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 123, 123, 123, 123, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 0, 23, 24, 169, 170, 171, 172, 173, 23, 24, 23, 24, 23, 24, 174, - 175, 176, 177, 21, 23, 24, 21, 23, 24, 21, 21, 21, 21, 21, 91, 91, - 178, 178, 23, 24, 23, 24, 21, 14, 14, 14, 14, 14, 14, 23, 24, 23, 24, - 92, 92, 92, 23, 24, 0, 0, 0, 0, 0, 3, 3, 3, 3, 18, 3, 3, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 0, 179, 0, 0, 0, 0, 0, 179, - 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, - 0, 3, 3, 16, 20, 16, 20, 3, 3, 3, 16, 20, 3, 16, 20, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 8, 3, 3, 8, 3, 16, 20, 3, 3, 16, 20, 5, 6, 5, 6, 5, 6, - 5, 6, 3, 3, 3, 3, 3, 91, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 3, 3, - 3, 3, 8, 3, 5, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 123, 123, 123, 123, 123, 0, 23, 24, 171, 172, 173, 174, 175, 23, 24, + 23, 24, 23, 24, 176, 177, 178, 179, 21, 23, 24, 21, 23, 24, 21, 21, + 21, 21, 21, 91, 91, 180, 180, 23, 24, 23, 24, 21, 14, 14, 14, 14, 14, + 14, 23, 24, 23, 24, 92, 92, 92, 23, 24, 0, 0, 0, 0, 0, 3, 3, 3, 3, + 18, 3, 3, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 0, 181, + 0, 0, 0, 0, 0, 181, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, + 0, 0, 91, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, + 15, 15, 15, 15, 15, 15, 15, 0, 3, 3, 16, 20, 16, 20, 3, 3, 3, 16, 20, + 3, 16, 20, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 3, 3, 8, 3, 16, 20, 3, 3, + 16, 20, 5, 6, 5, 6, 5, 6, 5, 6, 3, 3, 3, 3, 3, 91, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 8, 3, 3, 3, 3, 8, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 0, 0, 0, 0, 2, 3, 3, 3, 14, 91, 15, 127, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, 6, 8, 5, 6, 6, 14, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 92, 92, 92, 92, 124, 124, 8, - 91, 91, 91, 91, 91, 14, 14, 127, 127, 127, 91, 15, 3, 14, 14, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 92, 92, 11, 11, 91, 91, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 3, 91, 91, 91, 15, 0, 0, 0, 0, 0, 15, 15, 15, 15, + 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 2, 3, 3, 3, 14, 91, + 15, 128, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 14, 14, 5, 6, 5, 6, 5, 6, 5, + 6, 8, 5, 6, 6, 14, 128, 128, 128, 128, 128, 128, 128, 128, 128, 92, + 92, 92, 92, 124, 124, 8, 91, 91, 91, 91, 91, 14, 14, 128, 128, 128, + 91, 15, 3, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 11, 11, 91, + 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 91, 91, 91, 15, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 14, 14, 18, 18, 18, 18, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 14, 14, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 14, 14, - 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, - 18, 18, 18, 18, 18, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 14, 14, + 15, 15, 15, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, 14, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 91, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 15, 92, 119, 119, 119, - 3, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 91, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 91, 91, 92, 92, 15, 15, 15, 15, 15, 15, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 92, 92, 3, 3, 3, 3, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 11, 11, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 91, 21, 21, 21, 21, 21, 21, 21, 21, 23, 24, 23, 24, 180, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 91, 11, 11, 23, 24, 181, 21, 15, - 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 182, 183, 184, 185, 182, 0, 186, - 187, 188, 189, 23, 24, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 91, 91, - 21, 15, 15, 15, 15, 15, 15, 15, 92, 15, 15, 15, 92, 15, 15, 15, 15, - 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 124, 124, 92, 92, 124, 14, 14, 14, 14, - 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 14, 14, 4, 14, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, 3, 3, 3, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 15, + 92, 119, 119, 119, 3, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 91, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 91, 91, 92, 92, 15, 15, + 15, 15, 15, 15, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 92, + 92, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 11, 11, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 91, 21, 21, 21, 21, 21, 21, 21, 21, 23, 24, + 23, 24, 182, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 91, 11, 11, 23, + 24, 183, 21, 15, 23, 24, 23, 24, 21, 21, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 184, 185, 186, + 187, 184, 21, 188, 189, 190, 191, 23, 24, 23, 24, 23, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 91, 91, 21, 15, 15, 15, 15, 15, 15, 15, 92, 15, 15, 15, + 92, 15, 15, 15, 15, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 92, 92, 124, + 14, 14, 14, 14, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 14, 14, 4, 14, + 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 92, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 15, 15, 15, 15, 15, 15, 3, 3, 3, 15, 3, 15, 0, - 0, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 124, 92, 92, 92, 92, 124, - 124, 92, 124, 124, 124, 124, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 91, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 15, 15, 15, - 15, 15, 92, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 124, 124, 92, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 92, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 124, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 3, 3, 3, 3, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 91, - 15, 15, 15, 15, 15, 15, 14, 14, 14, 15, 124, 92, 124, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 15, 92, - 92, 92, 15, 15, 92, 92, 15, 15, 15, 15, 15, 92, 92, 15, 92, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 15, 91, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, - 92, 92, 124, 124, 3, 3, 15, 91, 91, 124, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, - 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 21, 21, 21, 21, 21, 21, 21, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 15, 15, 15, 15, 15, 15, 3, 3, 3, 15, + 3, 15, 15, 92, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, + 92, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 124, 92, 92, + 92, 92, 124, 124, 92, 124, 124, 124, 124, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 91, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, + 15, 15, 15, 15, 15, 92, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 124, 124, + 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 92, 15, 15, 15, 15, + 15, 15, 15, 15, 92, 124, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 91, 15, 15, 15, 15, 15, 15, 14, 14, 14, 15, 124, 92, 124, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 92, 15, 92, 92, 92, 15, 15, 92, 92, 15, 15, 15, 15, 15, 92, 92, 15, + 92, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 91, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 124, 92, 92, 124, 124, 3, 3, 15, 91, 91, 124, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, + 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 190, 21, 21, 21, 21, 21, - 21, 21, 11, 91, 91, 91, 91, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 15, 15, 15, 124, 124, - 92, 124, 124, 92, 124, 124, 3, 124, 92, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 192, 21, 21, 21, + 21, 21, 21, 21, 11, 91, 91, 91, 91, 21, 21, 21, 21, 21, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 15, 15, 15, 124, + 124, 92, 124, 124, 92, 124, 124, 3, 124, 92, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, - 193, 193, 193, 193, 193, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, + 194, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 21, @@ -1161,10 +1162,10 @@ static const unsigned char groupMap[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 18, + 14, 14, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 18, 18, 18, 18, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1177,29 +1178,29 @@ static const unsigned char groupMap[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 127, 15, 15, 15, 15, 15, 15, - 15, 15, 127, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 128, 15, 15, 15, 15, 15, 15, + 15, 15, 128, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 3, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 3, 127, - 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 3, 15, 15, 15, 15, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 3, 128, + 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 0, 0, 0, 0, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 15, 15, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 0, 0, 0, 0, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, @@ -1223,300 +1224,316 @@ static const unsigned char groupMap[] = { 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 15, 92, 92, 92, 0, 92, 92, 0, 0, 0, 0, 0, 92, 92, 92, 92, 15, 15, 15, 15, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 92, 92, 92, 0, 0, 0, - 0, 92, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 92, 0, 0, + 0, 0, 92, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 18, 18, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 18, 18, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, + 15, 15, 15, 15, 15, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 0, 0, 18, 18, 18, - 18, 18, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 0, 0, 18, + 18, 18, 18, 18, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 18, 18, + 15, 15, 15, 15, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 0, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 18, 18, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, + 97, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, + 15, 15, 15, 15, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 124, 92, 124, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 18, 18, 18, 18, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 124, 92, + 124, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 3, 3, 3, - 3, 3, 3, 3, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, - 92, 124, 124, 92, 92, 3, 3, 17, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, + 92, 92, 92, 92, 124, 124, 92, 92, 3, 3, 17, 3, 3, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, + 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, 92, 92, 92, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 15, 15, 15, 92, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, 92, 92, + 92, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 15, 124, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 92, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 92, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 15, + 15, 15, 15, 3, 3, 3, 3, 92, 92, 92, 92, 3, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 15, 3, 15, 3, 3, 3, 0, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 15, 15, 15, 15, 3, 3, - 3, 3, 3, 92, 92, 92, 3, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 15, 3, - 15, 3, 3, 3, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 92, 92, 92, 124, 124, 92, 124, 92, 92, 3, 3, 3, 3, 3, 3, 92, 0, 15, + 15, 15, 15, 15, 15, 15, 0, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 3, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, 124, 124, - 92, 124, 92, 92, 3, 3, 3, 3, 3, 3, 92, 0, 15, 15, 15, 15, 15, 15, 15, - 0, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 3, 0, - 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 92, 92, 124, 124, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 0, 0, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 124, 124, 124, 0, 0, 124, - 124, 0, 0, 124, 124, 124, 0, 0, 15, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, - 0, 0, 15, 15, 15, 15, 15, 124, 124, 0, 0, 92, 92, 92, 92, 92, 92, 92, - 0, 0, 0, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 124, 124, 92, - 92, 92, 124, 92, 15, 15, 15, 15, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 3, 0, 3, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 124, - 92, 124, 124, 124, 124, 92, 92, 124, 92, 92, 15, 15, 3, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, - 92, 92, 92, 92, 0, 0, 124, 124, 124, 124, 92, 92, 124, 92, 92, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 15, - 15, 15, 15, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 92, 124, 124, 124, 92, 92, 92, 92, 92, 92, + 92, 92, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 92, 92, 124, 124, 0, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, + 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, + 15, 15, 15, 15, 15, 0, 92, 92, 15, 124, 124, 92, 124, 124, 124, 124, + 0, 0, 124, 124, 0, 0, 124, 124, 124, 0, 0, 15, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 124, 124, 0, 0, 92, 92, 92, 92, + 92, 92, 92, 0, 0, 0, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, - 124, 124, 92, 124, 92, 92, 3, 3, 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 124, 92, - 124, 124, 92, 92, 92, 92, 92, 92, 124, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 0, 0, 92, 92, 92, 124, 124, 92, 92, 92, 92, 124, 92, 92, 92, 92, 92, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 3, 3, 3, 14, 10, + 124, 124, 92, 92, 92, 124, 92, 15, 15, 15, 15, 3, 3, 3, 3, 3, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 3, 0, 3, 92, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, + 92, 92, 92, 124, 92, 124, 124, 124, 124, 92, 92, 124, 92, 92, 15, 15, + 3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 124, 124, 124, 92, 92, 92, 92, 0, 0, 124, 124, 124, 124, 92, 92, + 124, 92, 92, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 15, 15, 15, 15, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 124, 124, 92, 92, 92, + 92, 92, 92, 92, 92, 124, 124, 92, 124, 92, 92, 3, 3, 3, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 92, 124, 92, 124, 124, 92, 92, 92, 92, 92, 92, 124, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 92, 92, 92, 92, + 124, 92, 92, 92, 92, 92, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 18, 18, 3, 3, 3, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 124, 124, 124, 92, 92, 92, 92, 92, 92, 92, 92, 92, 124, 92, 92, 3, + 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 124, 15, 92, 92, 92, 92, 3, - 3, 3, 3, 3, 3, 3, 3, 92, 0, 0, 0, 0, 0, 0, 0, 0, 15, 92, 92, 92, 92, - 92, 92, 124, 124, 92, 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 124, 92, 92, 3, 3, 3, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 124, 92, 92, 92, 92, 92, 92, 92, 0, 92, - 92, 92, 92, 92, 92, 124, 92, 15, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 3, 3, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 0, 124, 92, 92, 92, 92, 92, 92, 92, 124, 92, 92, 124, 92, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 124, 15, 92, + 92, 92, 92, 3, 3, 3, 3, 3, 3, 3, 3, 92, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 92, 92, 92, 92, 92, 92, 124, 124, 92, 92, 92, 15, 15, 15, 15, 15, 15, + 15, 15, 0, 0, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 124, 92, 92, 3, 3, 3, 15, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 92, 92, 92, 92, 92, 92, 0, 0, 0, 92, 0, 92, 92, 0, 92, - 92, 92, 92, 92, 92, 92, 15, 92, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 0, 3, 3, 3, 3, 3, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 92, 92, 92, 92, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 92, 92, 92, 92, 92, 92, 92, 3, 3, 3, 3, 3, 14, 14, 14, 14, 91, 91, - 91, 91, 3, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 18, 18, 18, 18, 18, 18, 18, 0, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, - 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 124, 92, 92, 92, + 92, 92, 92, 92, 0, 92, 92, 92, 92, 92, 92, 124, 92, 15, 3, 3, 3, 3, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 0, 0, 0, 3, 3, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 0, 124, 92, 92, 92, 92, 92, 92, 92, 124, + 92, 92, 124, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, 92, 92, 0, 0, 0, + 92, 0, 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, 15, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 124, 124, 124, 124, 124, 0, 92, 92, 0, 124, 124, 92, + 124, 92, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 124, 124, 3, 3, 0, + 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, + 0, 92, 92, 92, 92, 92, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 92, 92, + 92, 92, 92, 3, 3, 3, 3, 3, 14, 14, 14, 14, 91, 91, 91, 91, 3, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 18, 18, + 18, 18, 18, 18, 18, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 3, 3, 3, 3, 0, 0, 0, 0, 0, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, - 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 14, 92, 92, 3, 17, - 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 14, 92, 92, 3, 17, 17, 17, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 124, 124, 92, 92, 92, 14, 14, 14, - 124, 124, 124, 124, 124, 124, 17, 17, 17, 17, 17, 17, 17, 17, 92, 92, - 92, 92, 92, 92, 92, 92, 14, 14, 92, 92, 92, 92, 92, 92, 92, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 124, 124, 92, 92, 92, 14, 14, 14, 124, + 124, 124, 124, 124, 124, 17, 17, 17, 17, 17, 17, 17, 17, 92, 92, 92, + 92, 92, 92, 92, 92, 14, 14, 92, 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, 92, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 92, 92, 92, 14, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 92, 92, 92, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, + 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, + 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, - 21, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 0, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 0, 107, 107, 0, 0, 107, - 0, 0, 107, 107, 0, 0, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, - 107, 107, 107, 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, - 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 107, 0, 107, 107, 0, 0, 107, 0, 0, 107, 107, + 0, 0, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 21, 21, 21, 21, 0, 21, 0, 21, 21, 21, 21, 21, 21, 21, 0, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, + 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, + 0, 107, 107, 107, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, + 0, 107, 107, 107, 107, 107, 107, 107, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 107, 107, 0, 107, 107, 107, 107, 0, 0, 107, 107, 107, 107, - 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 0, 21, 21, + 21, 21, 107, 107, 0, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, + 0, 107, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 107, 107, 0, 107, 107, 107, 107, 0, 107, - 107, 107, 107, 107, 0, 107, 0, 0, 0, 107, 107, 107, 107, 107, 107, - 107, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, + 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 0, 0, 107, 107, 107, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, - 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 21, 21, 21, 21, 21, 21, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, + 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, + 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 7, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, + 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, - 21, 21, 21, 21, 21, 21, 107, 21, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 107, 107, 107, 107, 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, + 21, 21, 21, 21, 21, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 7, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 7, 21, 21, 21, 21, 21, 21, + 107, 21, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, 92, 92, 92, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 14, 14, 14, 14, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 14, 14, 14, 14, 14, 14, 14, 14, 92, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 92, 14, 14, 3, - 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, - 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, - 92, 92, 92, 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 0, 0, 92, 92, 92, 92, 92, 92, 92, 0, 92, 92, 0, 92, - 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 15, 15, 15, 15, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 92, 92, 92, 92, 92, - 92, 92, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, - 3, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, - 15, 0, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, - 15, 15, 15, 15, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 15, - 0, 15, 0, 15, 0, 15, 15, 15, 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 0, - 15, 0, 15, 0, 15, 0, 15, 15, 0, 15, 0, 0, 15, 15, 15, 15, 0, 15, 15, - 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, - 15, 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, + 92, 14, 14, 14, 14, 14, 14, 14, 14, 92, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 92, 14, 14, 3, 3, 3, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 0, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, 92, 0, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, 0, 92, 92, + 92, 92, 92, 92, 92, 0, 92, 92, 0, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, + 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 92, 92, 92, 92, 92, 92, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14, + 18, 18, 18, 4, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, + 0, 15, 0, 0, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, + 15, 15, 15, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 15, 0, + 15, 0, 15, 0, 15, 15, 15, 0, 15, 15, 0, 15, 0, 0, 15, 0, 15, 0, 15, + 0, 15, 0, 15, 0, 15, 15, 0, 15, 0, 0, 15, 15, 15, 15, 0, 15, 15, 15, + 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 0, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 15, 15, 15, + 0, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, - 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 14, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, 11, 11, + 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, + 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 11, 11, 11, + 11, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, - 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, + 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 0, 0, 0, 14, - 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 15, 15, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 0, 0, 14, 14, 14, 14, 0, 0, 0, 14, 0, 14, + 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 #endif /* TCL_UTF_MAX > 3 */ }; @@ -1552,16 +1569,16 @@ static const int groups[] = { 29761, 9793, 9537, 16449, 16193, 9858, 9602, 8066, 16514, 16258, 2113, 16002, 14722, 1, 12162, 13954, 2178, 22146, 20610, -1662, 29826, -15295, 24706, -1727, 20545, 7, 3905, 3970, 12353, 12418, - 8, 1859649, 9949249, 10, 1601154, 1600898, 1598594, 1598082, 1598338, - 1596546, 1582466, -9027966, -9044862, -976254, 15234, -1949375, - -1918, -1983, -18814, -21886, -25470, -32638, -28542, -32126, - -1981, -2174, -18879, -2237, 1844610, -21951, -25535, -28607, - -32703, -32191, 13, 14, -1924287, -2145983, -2115007, 7233, 7298, - 4170, 4234, 6749, 6813, -2750143, -976319, -2746047, 2763650, - 2762882, -2759615, -2751679, -2760383, -2760127, -2768575, 1859714, - -9044927, -10823615, -10830783, -10833599, -10832575, -10830015, - -10817983, -10824127, -10818751, 237633, 237698, 9949314, 18, - 17, 10305, 10370, 8769, 8834 + 8, 1859649, -769822, 9949249, 10, 1601154, 1600898, 1598594, 1598082, + 1598338, 1596546, 1582466, -9027966, -769983, -9044862, -976254, + 15234, -1949375, -1918, -1983, -18814, -21886, -25470, -32638, + -28542, -32126, -1981, -2174, -18879, -2237, 1844610, -21951, + -25535, -28607, -32703, -32191, 13, 14, -1924287, -2145983, -2115007, + 7233, 7298, 4170, 4234, 6749, 6813, -2750143, -976319, -2746047, + 2763650, 2762882, -2759615, -2751679, -2760383, -2760127, -2768575, + 1859714, -9044927, -10823615, -10830783, -10833599, -10832575, + -10830015, -10817983, -10824127, -10818751, 237633, 237698, 9949314, + 18, 17, 10305, 10370, 8769, 8834 }; #if TCL_UTF_MAX > 3 -- cgit v0.12 From 9c8f784329bdeba62d3712e5cb258bb291cec67f Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 12 Jun 2018 17:10:03 +0000 Subject: [860a9f1945] Remove test safe-8.8; Mac OS 9 tests are no longer useful. --- tests/safe.test | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/safe.test b/tests/safe.test index 5bed5ff..00a9472 100644 --- a/tests/safe.test +++ b/tests/safe.test @@ -290,14 +290,10 @@ test safe-8.7 {safe source control on file} { [safe::setLogCmd $prevlog; unset log] \ [safe::interpDelete $i] ; } [list 1 {no such file or directory} [list "ERROR for slave a : [file join [info library] xxxxxxxxxxx.tcl]:no such file or directory"] {} {}] -test safe-8.8 {safe source forbids -rsrc} { - set i "a"; - catch {safe::interpDelete $i} - safe::interpCreate $i; - list [catch {$i eval {source -rsrc Init}} msg] \ - $msg \ - [safe::interpDelete $i] ; -} {1 {wrong # args: should be "source ?-encoding E? fileName"} {}} +test safe-8.8 {safe source forbids -rsrc} emptyTest { + # Disabled this test. It was only useful for long unsupported + # Mac OS 9 systems. [Bug 860a9f1945] +} {} test safe-8.9 {safe source and return} -setup { set returnScript [makeFile {return "ok"} return.tcl] catch {safe::interpDelete $i} -- cgit v0.12 From 33b84014364cffbf3c994dc7298164257512d2c4 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Wed, 13 Jun 2018 10:49:25 +0000 Subject: Avoid valgrind "still reachable" reports stemming from early termination of threads. --- tests/async.test | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/tests/async.test b/tests/async.test index fa3aae1..34c2fdc 100644 --- a/tests/async.test +++ b/tests/async.test @@ -156,19 +156,24 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { } } -body { apply {{handle} { - global aresult - set aresult {Async event not delivered} - testasync marklater $handle - # allow plenty of time to pass in case valgrind is running - set start [clock seconds] - while { - [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" - } { - nothing - } + global aresult + set aresult {Async event not delivered} + testasync marklater $handle + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + # be less busy + after 100 + nothing + } return $aresult }} $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } test async-4.2 {async interrupting straight bytecode sequence} -constraints { @@ -185,10 +190,15 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { while { [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" } { + # be less busy + after 100 } return $aresult }} $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { @@ -205,6 +215,9 @@ test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { return $aresult }]] $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } -- cgit v0.12 From 83d92bd747f9da3b8e3413897e5e36cc63eb938e Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 13 Jun 2018 15:59:15 +0000 Subject: Stop creating a stray child process. --- tests/main.test | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/main.test b/tests/main.test index 324b594..302f95e 100644 --- a/tests/main.test +++ b/tests/main.test @@ -1218,8 +1218,6 @@ namespace eval ::tcl::test::main { Bug 1775878 } -constraints { exec Tcltest - } -setup { - catch {set f [open "|[list [interpreter]]" w+]} } -body { exec [interpreter] << "testsetmainloop\nputs \\\npwd\ntestexitmainloop" >& result set f [open result] -- cgit v0.12 From 15f804e04ee653eb4556a7e2265ab0c76200f483 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Fri, 15 Jun 2018 13:17:17 +0000 Subject: new package tcltests exclude some exec.test tests when running under valgrind --- tests/all.tcl | 9 +++++++++ tests/exec.test | 25 +++++++++++++++---------- tests/ioCmd.test | 1 - tests/pkgIndex.tcl | 6 ++++++ 4 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 tests/pkgIndex.tcl diff --git a/tests/all.tcl b/tests/all.tcl index 69a16ba..ad372db 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -18,5 +18,14 @@ configure {*}$argv -testdir [file dir [info script]] if {[singleProcess]} { interp debug {} -frame 1 } + +set testsdir [file dirname [file dirname [file normalize [info script]/...]]] +lappend auto_path $testsdir {*}[apply {{testsdir args} { + lmap x $args { + if {$x eq $testsdir} continue + lindex $x + } +}} $testsdir {*}$auto_path] + runAllTests proc exit args {} diff --git a/tests/exec.test b/tests/exec.test index 3d1cd56..dfc44c4 100644 --- a/tests/exec.test +++ b/tests/exec.test @@ -11,9 +11,14 @@ # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. +# There is no point in running Valgrind on cases where [exec] forks but then +# fails and the child process doesn't go through full cleanup. + package require tcltest 2 namespace import -force ::tcltest::* +package require tcltests + # All tests require the "exec" command. # Skip them if exec is not defined. testConstraint exec [llength [info commands exec]] @@ -325,11 +330,11 @@ test exec-8.2 {long input and output} {exec} { # Commands that return errors. -test exec-9.1 {commands returning errors} {exec} { +test exec-9.1 {commands returning errors} {exec notValgrind} { set x [catch {exec gorp456} msg] list $x [string tolower $msg] [string tolower $errorCode] } {1 {couldn't execute "gorp456": no such file or directory} {posix enoent {no such file or directory}}} -test exec-9.2 {commands returning errors} {exec} { +test exec-9.2 {commands returning errors} {exec notValgrind} { string tolower [list [catch {exec [interpreter] echo foo | foo123} msg] $msg $errorCode] } {1 {couldn't execute "foo123": no such file or directory} {posix enoent {no such file or directory}}} test exec-9.3 {commands returning errors} -constraints {exec stdio} -body { @@ -339,7 +344,7 @@ test exec-9.4 {commands returning errors} -constraints {exec stdio} -body { exec [interpreter] $path(exit) 43 | [interpreter] $path(echo) "foo bar" } -returnCodes error -result {foo bar child process exited abnormally} -test exec-9.5 {commands returning errors} -constraints {exec stdio} -body { +test exec-9.5 {commands returning errors} -constraints {exec stdio notValgrind} -body { exec gorp456 | [interpreter] echo a b c } -returnCodes error -result {couldn't execute "gorp456": no such file or directory} test exec-9.6 {commands returning errors} -constraints {exec} -body { @@ -428,13 +433,13 @@ test exec-10.19 {errors in exec invocation} -constraints {exec} -body { exec cat >@ $f } -returnCodes error -result "channel \"$f\" wasn't opened for writing" close $f -test exec-10.20 {errors in exec invocation} -constraints {exec} -body { +test exec-10.20 {errors in exec invocation} -constraints {exec notValgrind} -body { exec ~non_existent_user/foo/bar } -returnCodes error -result {user "non_existent_user" doesn't exist} -test exec-10.21 {errors in exec invocation} -constraints {exec} -body { +test exec-10.21 {errors in exec invocation} -constraints {exec notValgrind} -body { exec [interpreter] true | ~xyzzy_bad_user/x | false } -returnCodes error -result {user "xyzzy_bad_user" doesn't exist} -test exec-10.22 {errors in exec invocation} -constraints exec -body { +test exec-10.22 {errors in exec invocation} -constraints {exec notValgrind} -body { exec echo test > ~non_existent_user/foo/bar } -returnCodes error -result {user "non_existent_user" doesn't exist} # Commands in background. @@ -510,7 +515,7 @@ test exec-13.1 {setting errorCode variable} {exec} { test exec-13.2 {setting errorCode variable} {exec} { list [catch {exec [interpreter] $path(cat) > a/b/c} msg] [string tolower $errorCode] } {1 {posix enoent {no such file or directory}}} -test exec-13.3 {setting errorCode variable} {exec} { +test exec-13.3 {setting errorCode variable} {exec notValgrind} { set x [catch {exec _weird_cmd_} msg] list $x [string tolower $msg] [lindex $errorCode 0] \ [string tolower [lrange $errorCode 2 end]] @@ -548,7 +553,7 @@ test exec-14.2 {-keepnewline switch} -constraints {exec} -body { test exec-14.3 {unknown switch} -constraints {exec} -body { exec -gorp } -returnCodes error -result {bad option "-gorp": must be -ignorestderr, -keepnewline, or --} -test exec-14.4 {-- switch} -constraints {exec} -body { +test exec-14.4 {-- switch} -constraints {exec notValgrind} -body { exec -- -gorp } -returnCodes error -result {couldn't execute "-gorp": no such file or directory} test exec-14.5 {-ignorestderr switch} {exec} { @@ -662,7 +667,7 @@ test exec-18.2 {exec cat deals with weird file names} -body { # Note that this test cannot be adapted to work on Windows; that platform has # no kernel support for an analog of O_APPEND. OTOH, that means we can assume # that there is a POSIX shell... -test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup { +test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix notValgrind} -setup { set tmpfile [makeFile {0} tmpfile.exec-19.1] } -body { # Note that we have to allow for the current contents of the temporary @@ -675,7 +680,7 @@ test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup { {for a in a b c; do sleep 1; echo $a; done} >>$tmpfile & exec /bin/sh -c \ {for a in d e f; do sleep 1; echo $a >&2; done} 2>>$tmpfile & - # The above four shell invokations take about 3 seconds to finish, so allow + # The above four shell invocations take about 3 seconds to finish, so allow # 5s (in case the machine is busy) after 5000 # Check that no bytes have got lost through mixups with overlapping diff --git a/tests/ioCmd.test b/tests/ioCmd.test index cab4e97..ae58025 100644 --- a/tests/ioCmd.test +++ b/tests/ioCmd.test @@ -3781,7 +3781,6 @@ test iocmd.tf-32.0 {origin thread of moved channel gone} -match glob -body { # Use constraints to skip this test while valgrinding so this expected leak # doesn't prevent a finding of "leak-free". # -testConstraint notValgrind [expr {![testConstraint valgrind]}] test iocmd.tf-32.1 {origin thread of moved channel destroyed during access} -match glob -body { #puts <<$tcltest::mainThread>>main diff --git a/tests/pkgIndex.tcl b/tests/pkgIndex.tcl new file mode 100644 index 0000000..48ab71b --- /dev/null +++ b/tests/pkgIndex.tcl @@ -0,0 +1,6 @@ +#! /usr/bin/env tclsh + +package ifneeded tcltests 0.1 { + source [file dirname [file dirname [file normalize [info script]/...]]]/tcltests.tcl + package provide tcltests 0.1 +} -- cgit v0.12 From 06fc5fb636829f99e0f6e8c20bc1cd07338a5515 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 15 Jun 2018 18:31:24 +0000 Subject: Align common install locations in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG. Add FreeBSD (closes [d6d60efd35]) and OpenBSD 8.5 paths --- unix/tcl.m4 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/unix/tcl.m4 b/unix/tcl.m4 index 294ecf0..99e0cbd 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 @@ -93,8 +93,11 @@ AC_DEFUN([SC_PATH_TCLCONFIG], [ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/pkg/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ + `ls -d /usr/local/lib/tcl8.5 2>/dev/null` \ + `ls -d /usr/local/lib/tcl/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" @@ -223,8 +226,11 @@ AC_DEFUN([SC_PATH_TKCONFIG], [ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/pkg/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ + `ls -d /usr/local/lib/tk8.5 2>/dev/null` \ + `ls -d /usr/local/lib/tcl/tk8.5 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" -- cgit v0.12 From 41a61597547eca28506fbb85f2737413dc8f2162 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sat, 16 Jun 2018 17:55:31 +0000 Subject: new package tcltests exclude some exec.test tests when running under valgrind --- tests/all.tcl | 9 +++++++++ tests/exec.test | 25 +++++++++++++++---------- tests/ioCmd.test | 1 - tests/pkgIndex.tcl | 6 ++++++ 4 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 tests/pkgIndex.tcl diff --git a/tests/all.tcl b/tests/all.tcl index 69a16ba..ad372db 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -18,5 +18,14 @@ configure {*}$argv -testdir [file dir [info script]] if {[singleProcess]} { interp debug {} -frame 1 } + +set testsdir [file dirname [file dirname [file normalize [info script]/...]]] +lappend auto_path $testsdir {*}[apply {{testsdir args} { + lmap x $args { + if {$x eq $testsdir} continue + lindex $x + } +}} $testsdir {*}$auto_path] + runAllTests proc exit args {} diff --git a/tests/exec.test b/tests/exec.test index 5542f3d..6570e57 100644 --- a/tests/exec.test +++ b/tests/exec.test @@ -11,9 +11,14 @@ # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. +# There is no point in running Valgrind on cases where [exec] forks but then +# fails and the child process doesn't go through full cleanup. + package require tcltest 2 namespace import -force ::tcltest::* +package require tcltests + # All tests require the "exec" command. # Skip them if exec is not defined. testConstraint exec [llength [info commands exec]] @@ -325,11 +330,11 @@ test exec-8.2 {long input and output} {exec} { # Commands that return errors. -test exec-9.1 {commands returning errors} {exec} { +test exec-9.1 {commands returning errors} {exec notValgrind} { set x [catch {exec gorp456} msg] list $x [string tolower $msg] [string tolower $errorCode] } {1 {couldn't execute "gorp456": no such file or directory} {posix enoent {no such file or directory}}} -test exec-9.2 {commands returning errors} {exec} { +test exec-9.2 {commands returning errors} {exec notValgrind} { string tolower [list [catch {exec [interpreter] echo foo | foo123} msg] $msg $errorCode] } {1 {couldn't execute "foo123": no such file or directory} {posix enoent {no such file or directory}}} test exec-9.3 {commands returning errors} -constraints {exec stdio} -body { @@ -339,7 +344,7 @@ test exec-9.4 {commands returning errors} -constraints {exec stdio} -body { exec [interpreter] $path(exit) 43 | [interpreter] $path(echo) "foo bar" } -returnCodes error -result {foo bar child process exited abnormally} -test exec-9.5 {commands returning errors} -constraints {exec stdio} -body { +test exec-9.5 {commands returning errors} -constraints {exec stdio notValgrind} -body { exec gorp456 | [interpreter] echo a b c } -returnCodes error -result {couldn't execute "gorp456": no such file or directory} test exec-9.6 {commands returning errors} -constraints {exec} -body { @@ -428,13 +433,13 @@ test exec-10.19 {errors in exec invocation} -constraints {exec} -body { exec cat >@ $f } -returnCodes error -result "channel \"$f\" wasn't opened for writing" close $f -test exec-10.20 {errors in exec invocation} -constraints {exec} -body { +test exec-10.20 {errors in exec invocation} -constraints {exec notValgrind} -body { exec ~non_existent_user/foo/bar } -returnCodes error -result {user "non_existent_user" doesn't exist} -test exec-10.21 {errors in exec invocation} -constraints {exec} -body { +test exec-10.21 {errors in exec invocation} -constraints {exec notValgrind} -body { exec [interpreter] true | ~xyzzy_bad_user/x | false } -returnCodes error -result {user "xyzzy_bad_user" doesn't exist} -test exec-10.22 {errors in exec invocation} -constraints exec -body { +test exec-10.22 {errors in exec invocation} -constraints {exec notValgrind} -body { exec echo test > ~non_existent_user/foo/bar } -returnCodes error -result {user "non_existent_user" doesn't exist} # Commands in background. @@ -510,7 +515,7 @@ test exec-13.1 {setting errorCode variable} {exec} { test exec-13.2 {setting errorCode variable} {exec} { list [catch {exec [interpreter] $path(cat) > a/b/c} msg] [string tolower $errorCode] } {1 {posix enoent {no such file or directory}}} -test exec-13.3 {setting errorCode variable} {exec} { +test exec-13.3 {setting errorCode variable} {exec notValgrind} { set x [catch {exec _weird_cmd_} msg] list $x [string tolower $msg] [lindex $errorCode 0] \ [string tolower [lrange $errorCode 2 end]] @@ -548,7 +553,7 @@ test exec-14.2 {-keepnewline switch} -constraints {exec} -body { test exec-14.3 {unknown switch} -constraints {exec} -body { exec -gorp } -returnCodes error -result {bad option "-gorp": must be -ignorestderr, -keepnewline, or --} -test exec-14.4 {-- switch} -constraints {exec} -body { +test exec-14.4 {-- switch} -constraints {exec notValgrind} -body { exec -- -gorp } -returnCodes error -result {couldn't execute "-gorp": no such file or directory} test exec-14.5 {-ignorestderr switch} {exec} { @@ -662,7 +667,7 @@ test exec-18.2 {exec cat deals with weird file names} -body { # Note that this test cannot be adapted to work on Windows; that platform has # no kernel support for an analog of O_APPEND. OTOH, that means we can assume # that there is a POSIX shell... -test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup { +test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix notValgrind} -setup { set tmpfile [makeFile {0} tmpfile.exec-19.1] } -body { # Note that we have to allow for the current contents of the temporary @@ -675,7 +680,7 @@ test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup { {for a in a b c; do sleep 1; echo $a; done} >>$tmpfile & exec /bin/sh -c \ {for a in d e f; do sleep 1; echo $a >&2; done} 2>>$tmpfile & - # The above four shell invokations take about 3 seconds to finish, so allow + # The above four shell invocations take about 3 seconds to finish, so allow # 5s (in case the machine is busy) after 5000 # Check that no bytes have got lost through mixups with overlapping diff --git a/tests/ioCmd.test b/tests/ioCmd.test index cab4e97..ae58025 100644 --- a/tests/ioCmd.test +++ b/tests/ioCmd.test @@ -3781,7 +3781,6 @@ test iocmd.tf-32.0 {origin thread of moved channel gone} -match glob -body { # Use constraints to skip this test while valgrinding so this expected leak # doesn't prevent a finding of "leak-free". # -testConstraint notValgrind [expr {![testConstraint valgrind]}] test iocmd.tf-32.1 {origin thread of moved channel destroyed during access} -match glob -body { #puts <<$tcltest::mainThread>>main diff --git a/tests/pkgIndex.tcl b/tests/pkgIndex.tcl new file mode 100644 index 0000000..48ab71b --- /dev/null +++ b/tests/pkgIndex.tcl @@ -0,0 +1,6 @@ +#! /usr/bin/env tclsh + +package ifneeded tcltests 0.1 { + source [file dirname [file dirname [file normalize [info script]/...]]]/tcltests.tcl + package provide tcltests 0.1 +} -- cgit v0.12 From 7bf68c2335062edb662417df9048b2c56244479f Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 16 Jun 2018 18:07:30 +0000 Subject: Add in basic github meta-files to reduce problems with issues being filed where we don't see them. --- .github/ISSUE_TEMPLATE.md | 3 +++ .github/PULL_REQUEST_TEMPLATE.md | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..22d3860 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,3 @@ +Important Note +========== +Please do not file issues with Tcl on Github. They are unlikely to be noticed in a timely fashion. Tcl issues are hosted in the [tcl fossil repository on core.tcl.tk](https://core.tcl.tk/tcl/tktnew); please post them there. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..da07cd2 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,3 @@ +Important Note +========== +Please do not file pull requests with Tcl on Github. They are unlikely to be noticed in a timely fashion. Tcl issues (including patches) are hosted in the [tcl fossil repository on core.tcl.tk](https://core.tcl.tk/tcl/tktnew); please post them there. -- cgit v0.12 From 983854ad7b59ba90d6686bdd6f6f0fd3014a6912 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sat, 16 Jun 2018 22:56:07 +0000 Subject: Add tests/tcltests.tcl as a place to store common code for tests. --- tests/tcltests.tcl | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/tcltests.tcl diff --git a/tests/tcltests.tcl b/tests/tcltests.tcl new file mode 100644 index 0000000..f7597b5 --- /dev/null +++ b/tests/tcltests.tcl @@ -0,0 +1,3 @@ +#! /usr/bin/env tclsh + +testConstraint notValgrind [expr {![testConstraint valgrind]}] -- cgit v0.12 From dd713ee96ec9cda48ba5f801193a70b6eb49d4a1 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sat, 16 Jun 2018 22:57:36 +0000 Subject: Add tests/tcltests.tcl as a place to store common code for tests. --- tests/tcltests.tcl | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/tcltests.tcl diff --git a/tests/tcltests.tcl b/tests/tcltests.tcl new file mode 100644 index 0000000..f7597b5 --- /dev/null +++ b/tests/tcltests.tcl @@ -0,0 +1,3 @@ +#! /usr/bin/env tclsh + +testConstraint notValgrind [expr {![testConstraint valgrind]}] -- cgit v0.12 From 2b739c838a2b0f6dc7e64fad24eeb661d1a437ba Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sun, 17 Jun 2018 08:47:29 +0000 Subject: Remove dependencies between tests in env.test. --- tests/env.test | 399 +++++++++++++++++++++++++++++++---------------------- tests/tcltests.tcl | 4 + 2 files changed, 236 insertions(+), 167 deletions(-) diff --git a/tests/env.test b/tests/env.test index 0dd4f98..2c077b1 100644 --- a/tests/env.test +++ b/tests/env.test @@ -16,49 +16,96 @@ if {[lsearch [namespace children] ::tcltest] == -1} { namespace import -force ::tcltest::* } -# Some tests require the "exec" command. -# Skip them if exec is not defined. -testConstraint exec [llength [info commands exec]] +package require tcltests + +# [exec] is required here to see the actual environment received by child +# processes. +proc getenv {} { + global printenvScript + catch {exec [interpreter] $printenvScript} out + if {$out eq "child process exited abnormally"} { + set out {} + } + return $out +} + + +proc envrestore {} { + # Restore the environment variables at the end of the test. + global env + variable env2 + + foreach name [array names env] { + unset env($name) + } + array set env $env2 + return +} + + +proc envprep {} { + # Save the current environment variables at the start of the test. + global env + variable keep + variable env2 + + set env2 [array get env] + foreach name [array names env] { + # Keep some environment variables that support operation of the tcltest + # package. + if {[string toupper $name] ni $keep} { + unset env($name) + } + } + return +} + + +proc encodingrestore {} { + variable sysenc + encoding system $sysenc + return +} + + +proc encodingswitch encoding { + variable sysenc + # Need to run [getenv] in known encoding, so save the current one here... + set sysenc [encoding system] + encoding system $encoding + return +} + + +proc setup1 {} { + global env + envprep + encodingswitch iso8859-1 +} + +proc setup2 {} { + global env + setup1 + set env(NAME1) {test string} + set env(NAME2) {new value} + set env(XYZZY) {garbage} +} + + +proc cleanup1 {} { + encodingrestore + envrestore +} -# -# These tests will run on any platform (and indeed crashed on the Mac). So put -# them before you test for the existance of exec. -# -test env-1.1 {propagation of env values to child interpreters} -setup { - catch {interp delete child} - catch {unset env(test)} -} -body { - interp create child - set env(test) garbage - child eval {set env(test)} -} -cleanup { - interp delete child - unset env(test) -} -result {garbage} -# -# This one crashed on Solaris under Tcl8.0, so we only want to make sure it -# runs. -# -test env-1.2 {lappend to env value} -setup { - catch {unset env(test)} -} -body { - set env(test) aaaaaaaaaaaaaaaa - append env(test) bbbbbbbbbbbbbb - unset env(test) +variable keep { + TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH DISPLAY SHLIB_PATH + SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH + DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING + SECURITYSESSIONID LANG WINDIR TERM + CONNOMPROGRAMFILES PROGRAMFILES COMMONPROGRAMW6432 PROGRAMW6432 } -test env-1.3 {reflection of env by "array names"} -setup { - catch {interp delete child} - catch {unset env(test)} -} -body { - interp create child - child eval {set env(test) garbage} - expr {"test" in [array names env]} -} -cleanup { - interp delete child - catch {unset env(test)} -} -result {1} -set printenvScript [makeFile { +variable printenvScript [makeFile [string map [list @keep@ [list $keep]] { encoding system iso8859-1 proc lrem {listname name} { upvar $listname list @@ -70,7 +117,7 @@ set printenvScript [makeFile { } proc mangle s { regsub -all {\[|\\|\]} $s {\\&} s - regsub -all "\[\u0000-\u001f\u007f-\uffff\]" $s {[manglechar &]} s + regsub -all "\[\u0000-\u001f\u007f-\uffff\]" $s {[manglechar {&}]} s return [subst -novariables $s] } proc manglechar c { @@ -84,161 +131,154 @@ set printenvScript [makeFile { lrem names ComSpec lrem names "" } - foreach name { - TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH PURE_PROG_NAME DISPLAY - SHLIB_PATH SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH - DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING - __CF_USER_TEXT_ENCODING SECURITYSESSIONID LANG WINDIR TERM - CommonProgramFiles ProgramFiles CommonProgramW6432 ProgramW6432 - } { + foreach name @keep@ { lrem names $name } foreach p $names { - puts "[mangle $p]=[mangle $env($p)]" + puts [mangle $p]=[mangle $env($p)] } exit -} printenv] +}] printenv] -# [exec] is required here to see the actual environment received by child -# processes. -proc getenv {} { - global printenvScript tcltest - catch {exec [interpreter] $printenvScript} out - if {$out eq "child process exited abnormally"} { - set out {} - } - return $out -} -# Save the current environment variables at the start of the test. - -set env2 [array get env] -foreach name [array names env] { - # Keep some environment variables that support operation of the tcltest - # package. - if {[string toupper $name] ni { - TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH DISPLAY SHLIB_PATH - SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH - DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING - SECURITYSESSIONID LANG WINDIR TERM - CONNOMPROGRAMFILES PROGRAMFILES COMMONPROGRAMW6432 PROGRAMW6432 - }} { - unset env($name) - } +test env-1.1 {propagation of env values to child interpreters} -setup { + catch {interp delete child} + catch {unset env(test)} +} -body { + interp create child + set env(test) garbage + child eval {set env(test)} +} -cleanup { + interp delete child + unset env(test) +} -result {garbage} + + +# This one crashed on Solaris under Tcl8.0, so we only want to make sure it +# runs. +test env-1.2 {lappend to env value} -setup { + catch {unset env(test)} +} -body { + set env(test) aaaaaaaaaaaaaaaa + append env(test) bbbbbbbbbbbbbb + unset env(test) } -# Need to run 'getenv' in known encoding, so save the current one here... -set sysenc [encoding system] -test env-2.1 {adding environment variables} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { - getenv +test env-1.3 {reflection of env by "array names"} -setup { + catch {interp delete child} + catch {unset env(test)} +} -body { + interp create child + child eval {set env(test) garbage} + expr {"test" in [array names env]} } -cleanup { - encoding system $sysenc -} -result {} -test env-2.2 {adding environment variables} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { + interp delete child + catch {unset env(test)} +} -result 1 + + +test env-2.1 { + adding environment variables +} -constraints exec -setup setup1 -body { + getenv +} -cleanup cleanup1 -result {} + + +test env-2.2 { + adding environment variables +} -constraints exec -setup setup1 -body { set env(NAME1) "test string" getenv -} -cleanup { - encoding system $sysenc -} -result {NAME1=test string} -test env-2.3 {adding environment variables} -setup { - encoding system iso8859-1 +} -cleanup cleanup1 -result {NAME1=test string} + + +test env-2.3 {adding environment variables} -constraints exec -setup { + setup1 set env(NAME1) "test string" -} -constraints {exec} -body { +} -body { set env(NAME2) "more" getenv -} -cleanup { - encoding system $sysenc -} -result {NAME1=test string +} -cleanup cleanup1 -result {NAME1=test string NAME2=more} -test env-2.4 {adding environment variables} -setup { - encoding system iso8859-1 + + +test env-2.4 { + adding environment variables +} -constraints exec -setup { + setup1 set env(NAME1) "test string" set env(NAME2) "more" -} -constraints {exec} -body { +} -body { set env(XYZZY) "garbage" getenv -} -cleanup { - encoding system $sysenc +} -cleanup { cleanup1 } -result {NAME1=test string NAME2=more XYZZY=garbage} -set env(NAME1) "test string" -set env(NAME2) "new value" -set env(XYZZY) "garbage" -test env-3.1 {changing environment variables} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { + +test env-3.1 { + changing environment variables +} -constraints exec -setup setup2 -body { set result [getenv] unset env(NAME2) set result } -cleanup { - encoding system $sysenc + cleanup1 } -result {NAME1=test string NAME2=new value XYZZY=garbage} -unset -nocomplain env(NAME2) -test env-4.1 {unsetting environment variables: default} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { + +test env-4.1 { + unsetting environment variables +} -constraints exec -setup setup2 -body { + unset -nocomplain env(NAME2) getenv -} -cleanup { - encoding system $sysenc -} -result {NAME1=test string +} -cleanup cleanup1 -result {NAME1=test string XYZZY=garbage} -test env-4.2 {unsetting environment variables} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { - unset env(NAME1) - getenv -} -cleanup { - unset env(XYZZY) - encoding system $sysenc -} -result {XYZZY=garbage} -unset -nocomplain env(NAME1) env(XYZZY) -test env-4.3 {setting international environment variables} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { + +# env-4.2 is deleted + +test env-4.3 { + setting international environment variables +} -constraints exec -setup setup1 -body { set env(\ua7) \ub6 getenv -} -cleanup { - encoding system $sysenc -} -result {\u00a7=\u00b6} -test env-4.4 {changing international environment variables} -setup { - encoding system iso8859-1 -} -constraints {exec} -body { +} -cleanup cleanup1 -result {\u00a7=\u00b6} + + +test env-4.4 { + changing international environment variables +} -constraints exec -setup setup1 -body { set env(\ua7) \ua7 getenv -} -cleanup { - encoding system $sysenc -} -result {\u00a7=\u00a7} -test env-4.5 {unsetting international environment variables} -setup { - encoding system iso8859-1 +} -cleanup cleanup1 -result {\u00a7=\u00a7} + + +test env-4.5 { + unsetting international environment variables +} -constraints exec -setup { + setup1 set env(\ua7) \ua7 } -body { set env(\ub6) \ua7 unset env(\ua7) getenv -} -constraints {exec} -cleanup { - unset env(\ub6) - encoding system $sysenc -} -result {\u00b6=\u00a7} +} -cleanup cleanup1 -result {\u00b6=\u00a7} -test env-5.0 {corner cases - set a value, it should exist} -body { +test env-5.0 { + corner cases - set a value, it should exist +} -setup setup1 -body { set env(temp) a set env(temp) -} -cleanup { - unset env(temp) -} -result {a} -test env-5.1 {corner cases - remove one elem at a time} -setup { - set x [array get env] -} -body { +} -cleanup cleanup1 -result a + + +test env-5.1 { + corner cases - remove one elem at a time +} -setup setup1 -body { # When no environment variables exist, the env var will contain no # entries. The "array names" call synchs up the C-level environ array with # the Tcl level env array. Make sure an empty Tcl array is created. @@ -246,9 +286,9 @@ test env-5.1 {corner cases - remove one elem at a time} -setup { unset env($e) } array size env -} -cleanup { - array set env $x -} -result {0} +} -cleanup cleanup1 -result 0 + + test env-5.2 {corner cases - unset the env array} -setup { interp create i } -body { @@ -262,42 +302,54 @@ test env-5.2 {corner cases - unset the env array} -setup { } -cleanup { interp delete i } -result {0} + + test env-5.3 {corner cases: unset the env in master should unset child} -setup { + setup1 interp create i } -body { # Variables deleted in a master interp should be deleted in child interp # too. - i eval { set env(THIS_SHOULD_EXIST) a} + i eval {set env(THIS_SHOULD_EXIST) a} set result [set env(THIS_SHOULD_EXIST)] unset env(THIS_SHOULD_EXIST) lappend result [i eval {catch {set env(THIS_SHOULD_EXIST)}}] } -cleanup { + cleanup1 interp delete i } -result {a 1} + + test env-5.4 {corner cases - unset the env array} -setup { + setup1 interp create i } -body { # The info exists command should be in synch with the env array. # Know Bug: 1737 - i eval { set env(THIS_SHOULD_EXIST) a} + i eval {set env(THIS_SHOULD_EXIST) a} set result [info exists env(THIS_SHOULD_EXIST)] lappend result [set env(THIS_SHOULD_EXIST)] lappend result [info exists env(THIS_SHOULD_EXIST)] } -cleanup { + cleanup1 interp delete i } -result {1 a 1} -test env-5.5 {corner cases - cannot have null entries on Windows} -constraints win -body { + + +test env-5.5 { + corner cases - cannot have null entries on Windows +} -constraints win -body { set env() a catch {set env()} -} -result 1 +} -cleanup cleanup1 -result 1 -test env-6.1 {corner cases - add lots of env variables} -body { +test env-6.1 {corner cases - add lots of env variables} -setup setup1 -body { set size [array size env] for {set i 0} {$i < 100} {incr i} { set env(BOGUS$i) $i } expr {[array size env] - $size} -} -result 100 +} -cleanup cleanup1 -result 100 test env-7.1 {[219226]: whole env array should not be unset by read} -body { set n [array size env] @@ -310,16 +362,20 @@ test env-7.1 {[219226]: whole env array should not be unset by read} -body { return $n } -result 0 -test env-7.2 {[219226]: links to env elements should not be removed by read} -body { +test env-7.2 { + [219226]: links to env elements should not be removed by read +} -setup setup1 -body { apply {{} { set ::env(test7_2) ok upvar env(test7_2) elem set ::env(PATH) return $elem }} -} -result ok +} -cleanup cleanup1 -result ok -test env-7.3 {[9b4702]: testing existence of env(some_thing) should not destroy trace} -body { +test env-7.3 { + [9b4702]: testing existence of env(some_thing) should not destroy trace +} -setup setup1 -body { apply {{} { catch {unset ::env(test7_3)} proc foo args { @@ -330,16 +386,25 @@ test env-7.3 {[9b4702]: testing existence of env(some_thing) should not destroy set ::env(not_yet_existent) "Now I'm here"; return [info exists ::env(test7_3)] }} -} -result 1 +} -cleanup cleanup1 -result 1 -# Restore the environment variables at the end of the test. +test env-8.0 { + memory usage - valgrind does not report reachable memory +} -body { + set res [set env(__DUMMY__) {i'm with dummy}] + unset env(__DUMMY__) + return $res +} -result {i'm with dummy} + -foreach name [array names env] { - unset env($name) -} -array set env $env2 # cleanup +rename getenv {} +rename envrestore {} +rename envprep {} +rename encodingrestore {} +rename encodingswitch {} + removeFile $printenvScript ::tcltest::cleanupTests return diff --git a/tests/tcltests.tcl b/tests/tcltests.tcl index f7597b5..8d42b70 100644 --- a/tests/tcltests.tcl +++ b/tests/tcltests.tcl @@ -1,3 +1,7 @@ #! /usr/bin/env tclsh +# Some tests require the "exec" command. +# Skip them if exec is not defined. +testConstraint exec [llength [info commands exec]] + testConstraint notValgrind [expr {![testConstraint valgrind]}] -- cgit v0.12 From 1f91c778bb2a0d9b3e67c7e6e55d46fa91311b4e Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 17 Jun 2018 15:42:58 +0000 Subject: Split scripted parts of TclOO into their own file. --- generic/tclOO.c | 66 +++++---------------------------------- generic/tclOOScript.h | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ unix/Makefile.in | 2 +- 3 files changed, 94 insertions(+), 59 deletions(-) create mode 100644 generic/tclOOScript.h diff --git a/generic/tclOO.c b/generic/tclOO.c index 6aa03fa..7f609b2 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -152,65 +152,10 @@ static const char *initScript = /* " tcloo.tcl OO_LIBRARY oo::library;"; */ /* - * The scripted part of the definitions of slots. + * The scripted part of the definitions of TclOO. */ -static const char *slotScript = -"::oo::define ::oo::Slot {\n" -" method Get {} {error unimplemented}\n" -" method Set list {error unimplemented}\n" -" method -set args {\n" -" uplevel 1 [list [namespace which my] Set $args]\n" -" }\n" -" method -append args {\n" -" uplevel 1 [list [namespace which my] Set [list" -" {*}[uplevel 1 [list [namespace which my] Get]] {*}$args]]\n" -" }\n" -" method -clear {} {uplevel 1 [list [namespace which my] Set {}]}\n" -" forward --default-operation my -append\n" -" method unknown {args} {\n" -" set def --default-operation\n" -" if {[llength $args] == 0} {\n" -" return [uplevel 1 [list [namespace which my] $def]]\n" -" } elseif {![string match -* [lindex $args 0]]} {\n" -" return [uplevel 1 [list [namespace which my] $def {*}$args]]\n" -" }\n" -" next {*}$args\n" -" }\n" -" export -set -append -clear\n" -" unexport unknown destroy\n" -"}\n" -"::oo::objdefine ::oo::define::superclass forward --default-operation my -set\n" -"::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" -"::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n"; - -/* - * The body of the method of oo::object. - */ - -static const char *clonedBody = -"foreach p [info procs [info object namespace $originObject]::*] {" -" set args [info args $p];" -" set idx -1;" -" foreach a $args {" -" lset args [incr idx] " -" [if {[info default $p $a d]} {list $a $d} {list $a}]" -" };" -" set b [info body $p];" -" set p [namespace tail $p];" -" proc $p $args $b;" -"};" -"foreach v [info vars [info object namespace $originObject]::*] {" -" upvar 0 $v vOrigin;" -" namespace upvar [namespace current] [namespace tail $v] vNew;" -" if {[info exists vOrigin]} {" -" if {[array exists vOrigin]} {" -" array set vNew [array get vOrigin];" -" } else {" -" set vNew $vOrigin;" -" }" -" }" -"}"; +#include "tclOOScript.h" /* * The actual definition of the variable holding the TclOO stub table. @@ -491,7 +436,12 @@ InitFoundation( if (TclOODefineSlots(fPtr) != TCL_OK) { return TCL_ERROR; } - return Tcl_EvalEx(interp, slotScript, -1, 0); + + /* + * Evaluate the remaining definitions, which are a compiled-in Tcl script. + */ + + return Tcl_EvalEx(interp, tclOOSetupScript, -1, 0); } /* diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h new file mode 100644 index 0000000..51a8a56 --- /dev/null +++ b/generic/tclOOScript.h @@ -0,0 +1,85 @@ +/* + * tclOOScript.h -- + * + * This file contains support scripts for TclOO. They are defined here so + * that the code can be definitely run even in safe interpreters; TclOO's + * core setup is safe. + * + * Copyright (c) 2012-2018 by Donal K. Fellows + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +#ifndef TCL_OO_SCRIPT_H +#define TCL_OO_SCRIPT_H + +/* + * The scripted part of the definitions of TclOO. + */ + +static const char *tclOOSetupScript = +"::oo::define ::oo::Slot {\n" +" method Get {} {return -code error unimplemented}\n" +" method Set list {return -code error unimplemented}\n" +" method -set args {tailcall my Set $args}\n" +" method -append args {\n" +" set current [uplevel 1 [list [namespace which my] Get]]\n" +" tailcall my Set [list {*}$current {*}$args]\n" +" }\n" +" method -clear {} {tailcall my Set {}}\n" +" forward --default-operation my -append\n" +" method unknown {args} {\n" +" set def --default-operation\n" +" if {[llength $args] == 0} {\n" +" tailcall my $def\n" +" } elseif {![string match -* [lindex $args 0]]} {\n" +" tailcall my $def {*}$args\n" +" }\n" +" next {*}$args\n" +" }\n" +" export -set -append -clear\n" +" unexport unknown destroy\n" +"}\n" +"\n" +"::oo::objdefine ::oo::define::superclass forward --default-operation my -set\n" +"::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" +"::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n"; + +/* + * The body of the method of oo::object. + */ + +static const char *clonedBody = +"foreach p [info procs [info object namespace $originObject]::*] {\n" +" set args [info args $p]\n" +" set idx -1\n" +" foreach a $args {\n" +" lset args [incr idx]" +" [if {[info default $p $a d]} {list $a $d} {list $a}]\n" +" }\n" +" set b [info body $p]\n" +" set p [namespace tail $p]\n" +" proc $p $args $b\n" +"}\n" +"foreach v [info vars [info object namespace $originObject]::*] {\n" +" upvar 0 $v vOrigin\n" +" namespace upvar [namespace current] [namespace tail $v] vNew\n" +" if {[info exists vOrigin]} {\n" +" if {[array exists vOrigin]} {\n" +" array set vNew [array get vOrigin]\n" +" } else {\n" +" set vNew $vOrigin\n" +" }\n" +" }\n" +"}\n"; + +#endif /* TCL_OO_SCRIPT_H */ + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/unix/Makefile.in b/unix/Makefile.in index f044e41..9aa67fb 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -1220,7 +1220,7 @@ tclNamesp.o: $(GENERIC_DIR)/tclNamesp.c $(COMPILEHDR) tclNotify.o: $(GENERIC_DIR)/tclNotify.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclNotify.c -tclOO.o: $(GENERIC_DIR)/tclOO.c +tclOO.o: $(GENERIC_DIR)/tclOO.c $(GENERIC_DIR)/tclOOScript.h $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclOO.c tclOOBasic.o: $(GENERIC_DIR)/tclOOBasic.c -- cgit v0.12 From 8047a470ef35faeafe18de166f773a78097b3fc2 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sun, 17 Jun 2018 16:07:09 +0000 Subject: Fix [53cad613d8a4de166e680f09a6c6399ebddbc17c|53cad613d8]: TIP 389 implementation makes Tk tests font-4.12 and font-4.15 fail. (Fix it in 8.6 too, for benefit of androwish) --- generic/tclParse.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/generic/tclParse.c b/generic/tclParse.c index f2cf322..fc7f77b 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -991,6 +991,14 @@ TclParseBackslash( if (readPtr != NULL) { *readPtr = count; } +#if TCL_UTF_MAX >= 4 + if ((result & 0xFC00) == 0xD800) { + dst[2] = (char) ((result | 0x80) & 0xBF); + dst[1] = (char) (((result >> 6) | 0x80) & 0xBF); + dst[0] = (char) ((result >> 12) | 0xE0); + return 3; + } +#endif return Tcl_UniCharToUtf(result, dst); } -- cgit v0.12 From 9e511d78742e4c5b32ad7d4286f2c0bd56e0083a Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 17 Jun 2018 16:47:45 +0000 Subject: Most of the implementation ported over. [classmethod] is trickier... --- generic/tclOOScript.h | 107 +++++++++++++++++++++++++++++++++++++++++++++++++- tests/oo.test | 2 +- 2 files changed, 107 insertions(+), 2 deletions(-) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 51a8a56..5772e2c 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -19,9 +19,90 @@ */ static const char *tclOOSetupScript = +"::proc ::oo::Helpers::callback {method args} {\n" +" list [uplevel 1 {namespace which my}] $method {*}$args\n" +"}\n" + +"::proc ::oo::Helpers::mymethod {method args} {\n" +" list [uplevel 1 {namespace which my}] $method {*}$args\n" +"}\n" + +"::proc ::oo::Helpers::classvariable {name args} {\n" +" # Get a reference to the class's namespace\n" +" set ns [info object namespace [uplevel 1 {self class}]]\n" +" # Double up the list of variable names\n" +" set vs [list $name $name]\n" +" foreach v $args {lappend vs $v $v}\n" +" # Lastly, link the caller's local variables to the class's variables\n" +" tailcall namespace upvar $ns {*}$vs\n" +"}\n" + +"::proc ::oo::Helpers::link {args} {\n" +" set ns [uplevel 1 {namespace current}]\n" +" foreach link $args {\n" +" if {[llength $link] == 2} {\n" +" lassign $link src dst\n" +" } else {\n" +" lassign $link src\n" +" set dst $src\n" +" }\n" +" interp alias {} ${ns}::$src {} ${ns}::my $dst\n" +" }\n" +" return\n" +"}\n" + +/* +"proc ::oo::define::classmethod {name {args {}} {body {}}} {\n" +" # Create the method on the class if the caller gave arguments and body\n" +" set argc [llength [info level 0]]\n" +" if {$argc == 3} {\n" +" return -code error [string cat {wrong # args: should be \"}" +" [lindex [info level 0] 0] { name ?args body?\"}]\n" +" }\n" +" # Get the name of the current class or class delegate\n" +" set cls [uplevel 1 self]\n" +" set d $cls.Delegate\n" +" if {[info object isa object $d] && [info object isa class $d]} {\n" +" set cls $d\n" +" }\n" +" if {$argc == 4} {\n" +" ::oo::define $cls method $name $args $body\n" +" }\n" +" # Make the connection by forwarding\n" +" tailcall forward $name [info object namespace $cls]::my $name\n" +"}\n" + +"# Build this *almost* like a class method, but with extra care to avoid\n" +"# nuking the existing method.\n" +"::oo::class create ::oo::class.Delegate {\n" +" method create {name args} {\n" +" if {![string match ::* $name]} {\n" +" set ns [uplevel 1 {namespace current}]\n" +" if {$ns eq {::}} {set ns {}}\n" +" set name ${ns}::${name}\n" +" }\n" +" if {[string match *.Delegate $name]} {\n" +" return [next $name {*}$args]\n" +" }\n" +" set delegate [oo::class create $name.Delegate]\n" +" set cls [next $name {*}$args]\n" +" set superdelegates [list $delegate]\n" +" foreach c [info class superclass $cls] {\n" +" set d $c.Delegate\n" +" if {[info object isa object $d] && [info object isa class $d]} {\n" +" lappend superdelegates $d\n" +" }\n" +" }\n" +" oo::objdefine $cls mixin {*}$superdelegates\n" +" return $cls\n" +" }\n" +"}\n" +*/ + "::oo::define ::oo::Slot {\n" " method Get {} {return -code error unimplemented}\n" " method Set list {return -code error unimplemented}\n" + " method -set args {tailcall my Set $args}\n" " method -append args {\n" " set current [uplevel 1 [list [namespace which my] Get]]\n" @@ -29,6 +110,7 @@ static const char *tclOOSetupScript = " }\n" " method -clear {} {tailcall my Set {}}\n" " forward --default-operation my -append\n" + " method unknown {args} {\n" " set def --default-operation\n" " if {[llength $args] == 0} {\n" @@ -38,13 +120,36 @@ static const char *tclOOSetupScript = " }\n" " next {*}$args\n" " }\n" + " export -set -append -clear\n" " unexport unknown destroy\n" "}\n" "\n" "::oo::objdefine ::oo::define::superclass forward --default-operation my -set\n" "::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" -"::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n"; +"::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n" + +/* +"::oo::define ::oo::class self mixin ::oo::class.Delegate\n" +*/ + +"::oo::class create ::oo::singleton {\n" +" superclass ::oo::class\n" +" variable object\n" +" unexport create createWithNamespace\n" +" method new args {\n" +" if {![info exists object]} {\n" +" set object [next {*}$args]\n" +" }\n" +" return $object\n" +" }\n" +"}\n" + +"::oo::class create ::oo::abstract {\n" +" superclass ::oo::class\n" +" unexport create createWithNamespace new\n" +"}\n" +; /* * The body of the method of oo::object. diff --git a/tests/oo.test b/tests/oo.test index 9a22438..25ef5e2 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -343,7 +343,7 @@ test oo-1.21 {basic test of OO functionality: default relations} -setup { }] {lsort $x} } -cleanup { interp delete $fresh -} -result {{} {::oo::Slot ::oo::class ::oo::object} {::oo::define::filter ::oo::define::mixin ::oo::define::superclass ::oo::define::variable ::oo::objdefine::filter ::oo::objdefine::mixin ::oo::objdefine::variable} {::oo::Slot ::oo::class} {} {} {} {} {} {} ::oo::object ::oo::object ::oo::class ::oo::class ::oo::class} +} -result {{} {::oo::Slot ::oo::abstract ::oo::class ::oo::object ::oo::singleton} {::oo::define::filter ::oo::define::mixin ::oo::define::superclass ::oo::define::variable ::oo::objdefine::filter ::oo::objdefine::mixin ::oo::objdefine::variable} {::oo::Slot ::oo::class} {::oo::abstract ::oo::singleton} {} {} {} {} {} ::oo::object ::oo::object ::oo::class ::oo::class ::oo::class} test oo-2.1 {basic test of OO functionality: constructor} -setup { # This is a bit complex because it needs to run in a sub-interp as -- cgit v0.12 From 8e696a5e5d19327336892388286b8d5d4fdc64a8 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 17 Jun 2018 17:27:41 +0000 Subject: Leaving out the weird delegates stops the test failures. --- generic/tclOOScript.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 5772e2c..4ca286c 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -51,7 +51,6 @@ static const char *tclOOSetupScript = " return\n" "}\n" -/* "proc ::oo::define::classmethod {name {args {}} {body {}}} {\n" " # Create the method on the class if the caller gave arguments and body\n" " set argc [llength [info level 0]]\n" @@ -59,12 +58,13 @@ static const char *tclOOSetupScript = " return -code error [string cat {wrong # args: should be \"}" " [lindex [info level 0] 0] { name ?args body?\"}]\n" " }\n" -" # Get the name of the current class or class delegate\n" " set cls [uplevel 1 self]\n" +/* " set d $cls.Delegate\n" " if {[info object isa object $d] && [info object isa class $d]} {\n" " set cls $d\n" " }\n" +*/ " if {$argc == 4} {\n" " ::oo::define $cls method $name $args $body\n" " }\n" @@ -72,6 +72,7 @@ static const char *tclOOSetupScript = " tailcall forward $name [info object namespace $cls]::my $name\n" "}\n" +/* "# Build this *almost* like a class method, but with extra care to avoid\n" "# nuking the existing method.\n" "::oo::class create ::oo::class.Delegate {\n" -- cgit v0.12 From e9c0ec1219e3c42df67c414bfda0bb5aab9a5bbb Mon Sep 17 00:00:00 2001 From: pooryorick Date: Mon, 18 Jun 2018 05:59:22 +0000 Subject: Plug leak in TclSetEnv. --- generic/tclEnv.c | 4 ++++ tests/pkgIndex.tcl | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/generic/tclEnv.c b/generic/tclEnv.c index 8cc4b74..c559c69 100644 --- a/generic/tclEnv.c +++ b/generic/tclEnv.c @@ -730,6 +730,10 @@ TclFinalizeEnvironment(void) ckfree(env.cache); env.cache = NULL; env.cacheSize = 0; + if ((env.ourEnviron != NULL)) { + ckfree(env.ourEnviron); + env.ourEnviron = NULL; + } #ifndef USE_PUTENV env.ourEnvironSize = 0; #endif diff --git a/tests/pkgIndex.tcl b/tests/pkgIndex.tcl index 48ab71b..0feb0eb 100644 --- a/tests/pkgIndex.tcl +++ b/tests/pkgIndex.tcl @@ -1,6 +1,6 @@ #! /usr/bin/env tclsh -package ifneeded tcltests 0.1 { - source [file dirname [file dirname [file normalize [info script]/...]]]/tcltests.tcl - package provide tcltests 0.1 -} +package ifneeded tcltests 0.1 " + source [list $dir]/tcltests.tcl + package provide tcltests 0.1 +" -- cgit v0.12 From 625aca976acac85e85a36f68a3727d2eec785922 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Mon, 18 Jun 2018 07:06:04 +0000 Subject: Full cleanup of env cache when in a PURIFY build. --- generic/tclEnv.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/generic/tclEnv.c b/generic/tclEnv.c index c559c69..4a48f65 100644 --- a/generic/tclEnv.c +++ b/generic/tclEnv.c @@ -723,10 +723,18 @@ TclFinalizeEnvironment(void) * strings. This may leak more memory that strictly necessary, since some * of the strings may no longer be in the environment. However, * determining which ones are ok to delete is n-squared, and is pretty - * unlikely, so we don't bother. + * unlikely, so we don't bother. However, in the case of DPURIFY, just + * free all strings in the cache. */ + size_t i; + if (env.cache) { +#ifdef PURIFY + for (i = 0; i < env.cacheSize; i++) { + ckfree(env.cache[i]); + } +#endif ckfree(env.cache); env.cache = NULL; env.cacheSize = 0; -- cgit v0.12 From 155e8a1ad56291fb61f3578f3c7cda632556d1da Mon Sep 17 00:00:00 2001 From: pooryorick Date: Mon, 18 Jun 2018 08:09:32 +0000 Subject: Avoid valgrind "still reachable" reports stemming from early termination of threads. --- tests/async.test | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/tests/async.test b/tests/async.test index cb67cc2..e7fc45a 100644 --- a/tests/async.test +++ b/tests/async.test @@ -157,17 +157,24 @@ test async-4.1 {async interrupting bytecode sequence} -constraints { } } -body { apply {{handle} { - global aresult - set aresult {Async event not delivered} - testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} { - nothing - } + global aresult + set aresult {Async event not delivered} + testasync marklater $handle + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + # be less busy + after 100 + nothing + } return $aresult }} $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } test async-4.2 {async interrupting straight bytecode sequence} -constraints { @@ -179,12 +186,20 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints { global aresult set aresult {Async event not delivered} testasync marklater $handle - for {set i 0} { - $i < 2500000 && $aresult eq "Async event not delivered" - } {incr i} {} + # allow plenty of time to pass in case valgrind is running + set start [clock seconds] + while { + [clock seconds] - $start < 180 && $aresult eq "Async event not delivered" + } { + # be less busy + after 100 + } return $aresult }} $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { @@ -201,6 +216,9 @@ test async-4.3 {async interrupting loop-less bytecode sequence} -constraints { return $aresult }]] $hm } -result {test pattern} -cleanup { + # give other threads some time to go way so that valgrind doesn't pick up + # "still reachable" cases from early thread termination + after 100 testasync delete $hm } -- cgit v0.12 From 04004f3abcabe486568af1e7b026d03670b48ca8 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 18 Jun 2018 15:51:43 +0000 Subject: Unbreak build on Windows (and - most likely - some other platforms too) --- generic/tclEnv.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/generic/tclEnv.c b/generic/tclEnv.c index 4a48f65..40ced17 100644 --- a/generic/tclEnv.c +++ b/generic/tclEnv.c @@ -727,10 +727,9 @@ TclFinalizeEnvironment(void) * free all strings in the cache. */ - size_t i; - if (env.cache) { #ifdef PURIFY + int i; for (i = 0; i < env.cacheSize; i++) { ckfree(env.cache[i]); } @@ -738,11 +737,11 @@ TclFinalizeEnvironment(void) ckfree(env.cache); env.cache = NULL; env.cacheSize = 0; +#ifndef USE_PUTENV if ((env.ourEnviron != NULL)) { ckfree(env.ourEnviron); env.ourEnviron = NULL; } -#ifndef USE_PUTENV env.ourEnvironSize = 0; #endif } -- cgit v0.12 From 3c57d80efed172427e5aafa447365cb61439613c Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 18 Jun 2018 15:54:38 +0000 Subject: Fix [53cad613d8]: TIP 389 implementation makes Tk tests font-4.12 and font-4.15 fail. One more situation in which high surrogate causes problem --- generic/tclParse.c | 12 +++++------- generic/tclStringObj.c | 6 ++++++ generic/tclUtf.c | 7 +++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/generic/tclParse.c b/generic/tclParse.c index fc7f77b..f26f933 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -991,15 +991,13 @@ TclParseBackslash( if (readPtr != NULL) { *readPtr = count; } -#if TCL_UTF_MAX >= 4 - if ((result & 0xFC00) == 0xD800) { - dst[2] = (char) ((result | 0x80) & 0xBF); - dst[1] = (char) (((result >> 6) | 0x80) & 0xBF); - dst[0] = (char) ((result >> 12) | 0xE0); - return 3; + count = Tcl_UniCharToUtf(result, dst); +#if TCL_UTF_MAX > 3 + if (!count) { + count = Tcl_UniCharToUtf(-1, dst); } #endif - return Tcl_UniCharToUtf(result, dst); + return count; } /* diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index a503392..1795d0c 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -1996,6 +1996,12 @@ Tcl_AppendFormatToObj( goto error; } length = Tcl_UniCharToUtf(code, buf); +#if TCL_UTF_MAX > 3 + if (!length) { + /* Special case for handling upper surrogates. */ + length = Tcl_UniCharToUtf(-1, buf); + } +#endif segment = Tcl_NewStringObj(buf, length); Tcl_IncrRefCount(segment); allocSegment = 1; diff --git a/generic/tclUtf.c b/generic/tclUtf.c index 46ce4ef..c2963bf 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -189,6 +189,13 @@ Tcl_UniCharToUtf( buf[0] = (char) ((ch >> 18) | 0xF0); return 4; } + } else if (ch == -1) { + if (((buf[0] & 0xF8) == 0xF0) && ((buf[1] & 0xC0) == 0x80) + && ((buf[2] & 0xCF) == 0)) { + ch = 0xD7C0 + ((buf[0] & 0x07) << 8) + ((buf[1] & 0x3F) << 2) + + ((buf[2] & 0x30) >> 4); + goto three; + } #endif } -- cgit v0.12 From 03a3c09b1fc4fc80caec28b88b0fe09d612835b8 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Tue, 19 Jun 2018 11:47:08 +0000 Subject: new file: tools/valgrind_suppress. num-callers bumped from 8 to 24. Valgrind now issues no "still reachable" reports for cmdAH.test. --- tests/all.tcl | 23 ++++++++++++++--------- tests/pkgIndex.tcl | 2 +- tools/valgrind_suppress | 33 +++++++++++++++++++++++++++++++++ unix/Makefile.in | 4 +++- 4 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 tools/valgrind_suppress diff --git a/tests/all.tcl b/tests/all.tcl index ad372db..d6434fb 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -14,18 +14,23 @@ package prefer latest package require Tcl 8.5- package require tcltest 2.2 namespace import tcltest::* -configure {*}$argv -testdir [file dir [info script]] -if {[singleProcess]} { - interp debug {} -frame 1 -} -set testsdir [file dirname [file dirname [file normalize [info script]/...]]] -lappend auto_path $testsdir {*}[apply {{testsdir args} { - lmap x $args { +apply {args { + global auto_path + set testsdir [file dirname [file dirname [file normalize [ + info script]/...]]] + + configure {*}$args -testdir $testsdir + + if {[singleProcess]} { + interp debug {} -frame 1 + } + + set auto_path [lmap x $auto_path[set auto_path {}] { if {$x eq $testsdir} continue lindex $x - } -}} $testsdir {*}$auto_path] + }] +}} {*}$argv runAllTests proc exit args {} diff --git a/tests/pkgIndex.tcl b/tests/pkgIndex.tcl index 0feb0eb..854b943 100644 --- a/tests/pkgIndex.tcl +++ b/tests/pkgIndex.tcl @@ -1,6 +1,6 @@ #! /usr/bin/env tclsh package ifneeded tcltests 0.1 " - source [list $dir]/tcltests.tcl + source [list $dir/tcltests.tcl] package provide tcltests 0.1 " diff --git a/tools/valgrind_suppress b/tools/valgrind_suppress new file mode 100644 index 0000000..e8f0204 --- /dev/null +++ b/tools/valgrind_suppress @@ -0,0 +1,33 @@ +{ + TclpGetPwNam/getpwname_r/__nss_next2/calloc + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:__nss_next2 + ... + fun:TclpGetPwNam +} + +{ + TclpGetPwNam/getpwname_r/__nss_next2/malloc + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:__nss_next2 + ... + fun:TclpGetPwNam +} + +{ + TclpGetPwNam/getpwname_r/_nss_systemd_getpwnam_r/malloc + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:_nss_systemd_getpwnam_r + ... + fun:TclpGetPwNam +} + diff --git a/unix/Makefile.in b/unix/Makefile.in index 4277fad..060148f 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -262,7 +262,9 @@ GDB = gdb TRACE = strace TRACE_OPTS = VALGRIND = valgrind -VALGRINDARGS = --tool=memcheck --num-callers=8 --leak-resolution=high --leak-check=yes --show-reachable=yes -v +VALGRINDARGS = --tool=memcheck --num-callers=24 \ + --leak-resolution=high --leak-check=yes --show-reachable=yes -v \ + --suppressions=$(TOOL_DIR)/valgrind_suppress #-------------------------------------------------------------------------- # The information below should be usable as is. The configure script won't -- cgit v0.12 From 645241afc13d0aa6272925a04c3afa93ca93ef19 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Wed, 20 Jun 2018 08:03:22 +0000 Subject: Remove recent auto_path modification in tests/all.tcl and suppress more valgrind reports. --- tests/all.tcl | 20 +++++--------------- tools/valgrind_suppress | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/tests/all.tcl b/tests/all.tcl index d6434fb..250163b 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -15,22 +15,12 @@ package require Tcl 8.5- package require tcltest 2.2 namespace import tcltest::* -apply {args { - global auto_path - set testsdir [file dirname [file dirname [file normalize [ - info script]/...]]] +configure {*}$argv -testdir [file dirname [file dirname [file normalize [ + info script]/...]]] - configure {*}$args -testdir $testsdir - - if {[singleProcess]} { - interp debug {} -frame 1 - } - - set auto_path [lmap x $auto_path[set auto_path {}] { - if {$x eq $testsdir} continue - lindex $x - }] -}} {*}$argv +if {[singleProcess]} { + interp debug {} -frame 1 +} runAllTests proc exit args {} diff --git a/tools/valgrind_suppress b/tools/valgrind_suppress index e8f0204..84ed4cd 100644 --- a/tools/valgrind_suppress +++ b/tools/valgrind_suppress @@ -31,3 +31,23 @@ fun:TclpGetPwNam } +{ + TclCreatesocketAddress/getaddrinfo/calloc + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:getaddrinfo + fun:TclCreateSocketAddress +} + +{ + TclCreatesocketAddress/getaddrinfo/malloc + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:getaddrinfo + fun:TclCreateSocketAddress +} + -- cgit v0.12 From c911dc937fb03f387cc7ecd74b04a2e60ddb53b5 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Wed, 20 Jun 2018 19:06:40 +0000 Subject: Add valgrind suppression for dlopen and ensure that processes are reaped in http11.test. --- tests/http11.test | 7 +++++++ tools/valgrind_suppress | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/tests/http11.test b/tests/http11.test index c9ded0b..2e50837 100644 --- a/tests/http11.test +++ b/tests/http11.test @@ -666,6 +666,13 @@ test http11-4.3 "normal post request, check channel query length" -setup { # ------------------------------------------------------------------------- +# Eliminate valgrind "still reachable" reports on outstanding "Detached" +# structures in the detached list which stem from PipeClose2Proc not waiting +# around for background processes to complete, meaning that previous calls to +# Tcl_ReapDetachedProcs might not have had a chance to reap all processes. +after 10 +exec [info nameofexecutable] << {} + foreach p {create_httpd httpd_read halt_httpd meta check_crc} { if {[llength [info proc $p]]} {rename $p {}} } diff --git a/tools/valgrind_suppress b/tools/valgrind_suppress index 84ed4cd..3c733c2 100644 --- a/tools/valgrind_suppress +++ b/tools/valgrind_suppress @@ -51,3 +51,13 @@ fun:TclCreateSocketAddress } +{ + TclpDlopen/load + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:dlopen + fun:TclpDlopen +} + -- cgit v0.12 From 107fb1eb331d7f346dfbdf5e7655a28f4643899c Mon Sep 17 00:00:00 2001 From: pooryorick Date: Thu, 21 Jun 2018 22:16:29 +0000 Subject: Suppress more valgrind "still reachable" reports and ensure that threads are fully finalized in thread tests. --- tests/thread.test | 56 +++++++++++++++++++------------ tools/valgrind_suppress | 87 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 106 insertions(+), 37 deletions(-) diff --git a/tests/thread.test b/tests/thread.test index cc4c871..a23670a 100644 --- a/tests/thread.test +++ b/tests/thread.test @@ -11,17 +11,22 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# when thread::release is used, -wait is passed in order allow the thread to +# be fully finalized, which avoids valgrind "still reachable" reports. if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2.2 namespace import -force ::tcltest::* } +package require tcltests + ::tcltest::loadTestedCommands catch [list package require -exact Tcltest [info patchlevel]] # Some tests require the testthread command -testConstraint testthread [expr {[info commands testthread] != {}}] +testConstraint testthread [expr {[info commands testthread] ne {}}] # Some tests require the Thread package @@ -72,6 +77,17 @@ proc ThreadError {id info} { set threadSawError($id) true; # signal main thread to exit [vwait]. } +proc threadSuperKill id { + variable threadSuperKillScript + try { + thread::send $id $::threadSuperKillScript + } on error {tres topts} { + if {$tres ne {target thread died}} { + return -options $topts $tres + } + } +} + if {[testConstraint thread]} { thread::errorproc ThreadError } @@ -96,22 +112,22 @@ test thread-1.3 {Tcl_ThreadObjCmd: initial thread list} {thread} { test thread-1.4 {Tcl_ThreadObjCmd: thread create } {thread} { set serverthread [thread::create -preserved] set numthreads [llength [thread::names]] - thread::release $serverthread + thread::release -wait $serverthread set numthreads -} {2} +} 2 test thread-1.5 {Tcl_ThreadObjCmd: thread create one shot} {thread} { thread::create {set x 5} foreach try {0 1 2 4 5 6} { - # Try various ways to yield - update - after 10 - set l [llength [thread::names]] - if {$l == 1} { - break - } + # Try various ways to yield + update + after 10 + set l [llength [thread::names]] + if {$l == 1} { + break + } } set l -} {1} +} 1 test thread-1.6 {Tcl_ThreadObjCmd: thread exit} {thread} { thread::create {{*}{}} update @@ -121,13 +137,13 @@ test thread-1.6 {Tcl_ThreadObjCmd: thread exit} {thread} { test thread-1.13 {Tcl_ThreadObjCmd: send args} {thread} { set serverthread [thread::create -preserved] set five [thread::send $serverthread {set x 5}] - thread::release $serverthread + thread::release -wait $serverthread set five } 5 test thread-1.15 {Tcl_ThreadObjCmd: wait} {thread} { set serverthread [thread::create -preserved {set z 5 ; thread::wait}] set five [thread::send $serverthread {set z}] - thread::release $serverthread + thread::release -wait $serverthread set five } 5 @@ -159,7 +175,7 @@ test thread-3.1 {TclThreadList} {thread} { set l2 [thread::names] set c [string compare [lsort [concat [thread::id] $l1]] [lsort $l2]] foreach t $l1 { - thread::release $t + thread::release -wait $t } list $len $c } {1 0} @@ -887,7 +903,7 @@ test thread-7.24 {cancel: nested catch inside pure bytecode loop} {thread drainE # wait for other thread to signal "ready to cancel" vwait ::threadIdStarted; after 1000 set res [thread::cancel $serverthread] - thread::send $serverthread $::threadSuperKillScript + threadSuperKill $serverthread vwait ::threadSawError($serverthread) thread::join $serverthread; drainEventQueue list $res [expr {[info exists ::threadIdStarted] ? \ @@ -929,7 +945,7 @@ test thread-7.25 {cancel: nested catch inside pure inside-command loop} {thread # wait for other thread to signal "ready to cancel" vwait ::threadIdStarted; after 1000 set res [thread::cancel $serverthread] - thread::send $serverthread $::threadSuperKillScript + threadSuperKill $serverthread vwait ::threadSawError($serverthread) thread::join $serverthread; drainEventQueue list $res [expr {[info exists ::threadIdStarted] ? \ @@ -1029,7 +1045,7 @@ test thread-7.28 {cancel: send async cancel nested catch inside pure bytecode lo # wait for other thread to signal "ready to cancel" vwait ::threadIdStarted; after 1000 set res [thread::send -async $serverthread {interp cancel}] - thread::send $serverthread $::threadSuperKillScript + threadSuperKill $serverthread vwait ::threadSawError($serverthread) thread::join $serverthread; drainEventQueue list $res [expr {[info exists ::threadIdStarted] ? \ @@ -1071,7 +1087,7 @@ test thread-7.29 {cancel: send async cancel nested catch pure inside-command loo # wait for other thread to signal "ready to cancel" vwait ::threadIdStarted; after 1000 set res [thread::send -async $serverthread {interp cancel}] - thread::send $serverthread $::threadSuperKillScript + threadSuperKill $serverthread vwait ::threadSawError($serverthread) thread::join $serverthread; drainEventQueue list $res [expr {[info exists ::threadIdStarted] ? \ @@ -1111,7 +1127,7 @@ test thread-7.30 {cancel: send async thread cancel nested catch inside pure byte # wait for other thread to signal "ready to cancel" vwait ::threadIdStarted; after 1000 set res [thread::send -async $serverthread {thread::cancel [thread::id]}] - thread::send $serverthread $::threadSuperKillScript + threadSuperKill $serverthread vwait ::threadSawError($serverthread) thread::join $serverthread; drainEventQueue list $res [expr {[info exists ::threadIdStarted] ? \ @@ -1153,7 +1169,7 @@ test thread-7.31 {cancel: send async thread cancel nested catch pure inside-comm # wait for other thread to signal "ready to cancel" vwait ::threadIdStarted; after 1000 set res [thread::send -async $serverthread {thread::cancel [thread::id]}] - thread::send $serverthread $::threadSuperKillScript + threadSuperKill $serverthread vwait ::threadSawError($serverthread) thread::join $serverthread; drainEventQueue list $res [expr {[info exists ::threadIdStarted] ? \ diff --git a/tools/valgrind_suppress b/tools/valgrind_suppress index 3c733c2..ede584a 100644 --- a/tools/valgrind_suppress +++ b/tools/valgrind_suppress @@ -1,63 +1,116 @@ { - TclpGetPwNam/getpwname_r/__nss_next2/calloc + TclCreatesocketAddress/getaddrinfo/calloc + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:getaddrinfo + fun:TclCreateSocketAddress +} + +{ + TclCreatesocketAddress/getaddrinfo/malloc + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:getaddrinfo + fun:TclCreateSocketAddress +} + +{ + TclpDlopen/load + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:dlopen + fun:TclpDlopen +} + +{ + TclpGetGrNam/__nss_next2/calloc Memcheck:Leak match-leak-kinds: reachable fun:calloc ... fun:__nss_next2 ... - fun:TclpGetPwNam + fun:TclpGetGrNam } { - TclpGetPwNam/getpwname_r/__nss_next2/malloc + TclpGetGrNam/__nss_next2/malloc Memcheck:Leak match-leak-kinds: reachable fun:malloc ... fun:__nss_next2 ... - fun:TclpGetPwNam + fun:TclpGetGrNam } { - TclpGetPwNam/getpwname_r/_nss_systemd_getpwnam_r/malloc + TclpGetGrNam/__nss_systemd_getfrname_r/malloc Memcheck:Leak match-leak-kinds: reachable fun:malloc ... - fun:_nss_systemd_getpwnam_r + fun:_nss_systemd_getgrnam_r ... - fun:TclpGetPwNam + fun:TclpGetGrNam } { - TclCreatesocketAddress/getaddrinfo/calloc + TclpGetPwNam/getpwname_r/__nss_next2/calloc Memcheck:Leak match-leak-kinds: reachable fun:calloc ... - fun:getaddrinfo - fun:TclCreateSocketAddress + fun:__nss_next2 + ... + fun:TclpGetPwNam } { - TclCreatesocketAddress/getaddrinfo/malloc + TclpGetPwNam/getpwname_r/__nss_next2/malloc Memcheck:Leak match-leak-kinds: reachable fun:malloc ... - fun:getaddrinfo - fun:TclCreateSocketAddress + fun:__nss_next2 + ... + fun:TclpGetPwNam } { - TclpDlopen/load + TclpGetPwNam/getpwname_r/_nss_systemd_getpwnam_r/malloc Memcheck:Leak match-leak-kinds: reachable - fun:calloc + fun:malloc ... - fun:dlopen - fun:TclpDlopen + fun:_nss_systemd_getpwnam_r + ... + fun:TclpGetPwNam +} + +{ + TclpThreadExit/pthread_exit/calloc + Memcheck:Leak + match-leak-kinds: reachable + fun:calloc + ... + fun:pthread_exit + fun:TclpThreadExit +} + +{ + TclpThreadExit/pthread_exit/malloc + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:pthread_exit + fun:TclpThreadExit } -- cgit v0.12 From 56ca35e8a95b8cfaac73104d3699c2b901298a2d Mon Sep 17 00:00:00 2001 From: pooryorick Date: Thu, 21 Jun 2018 22:21:31 +0000 Subject: Add custom exit procedure for tcltests executable. --- generic/tclInt.h | 1 + generic/tclTest.c | 16 ++++++++++++++++ generic/tclThreadTest.c | 7 +++++++ 3 files changed, 24 insertions(+) diff --git a/generic/tclInt.h b/generic/tclInt.h index 0a3285f..6fc2e85 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -4532,6 +4532,7 @@ MODULE_SCOPE Tcl_PackageInitProc TclObjTest_Init; MODULE_SCOPE Tcl_PackageInitProc TclThread_Init; MODULE_SCOPE Tcl_PackageInitProc Procbodytest_Init; MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit; +MODULE_SCOPE void *TclThreadTestFinalize(); /* *---------------------------------------------------------------- diff --git a/generic/tclTest.c b/generic/tclTest.c index 45cca5a..952f384 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -52,6 +52,7 @@ #define TCL_STORAGE_CLASS DLLEXPORT EXTERN int Tcltest_Init(Tcl_Interp *interp); EXTERN int Tcltest_SafeInit(Tcl_Interp *interp); +EXTERN TCL_NORETURN void Tcltest_Exit(ClientData clientData); /* * Dynamic string shared by TestdcallCmd and DelCallbackProc; used to collect @@ -563,6 +564,10 @@ Tcltest_Init( return TCL_ERROR; } + + /* Finalizer */ + Tcl_SetExitProc(Tcltest_Exit); + /* * Create additional commands and math functions for testing Tcl. */ @@ -790,6 +795,17 @@ Tcltest_SafeInit( return Procbodytest_SafeInit(interp); } +TCL_NORETURN void Tcltest_Exit( + ClientData clientData +) { + int status = PTR2INT(clientData); + Tcl_Finalize(); + TclThreadTestFinalize(); + TclpExit(status); + Tcl_Panic("OS exit failed!"); +} + + /* *---------------------------------------------------------------------- * diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c index 6fc0e52..3d63964 100644 --- a/generic/tclThreadTest.c +++ b/generic/tclThreadTest.c @@ -176,6 +176,13 @@ TclThread_Init( } +void * TclThreadTestFinalize() { + if (errorProcString != NULL) { + ckfree(errorProcString); + errorProcString= NULL; + } +} + /* *---------------------------------------------------------------------- * -- cgit v0.12 From 563bd6e4ddc1fab518dc16ebd1d39d05feffa6b0 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Thu, 21 Jun 2018 22:43:18 +0000 Subject: Fix function signature of TclThreadTestFinalize. --- generic/tclInt.h | 2 +- generic/tclThreadTest.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/generic/tclInt.h b/generic/tclInt.h index 6fc2e85..64004d8 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -4532,7 +4532,7 @@ MODULE_SCOPE Tcl_PackageInitProc TclObjTest_Init; MODULE_SCOPE Tcl_PackageInitProc TclThread_Init; MODULE_SCOPE Tcl_PackageInitProc Procbodytest_Init; MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit; -MODULE_SCOPE void *TclThreadTestFinalize(); +MODULE_SCOPE void TclThreadTestFinalize(); /* *---------------------------------------------------------------- diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c index 3d63964..92cfa13 100644 --- a/generic/tclThreadTest.c +++ b/generic/tclThreadTest.c @@ -176,11 +176,12 @@ TclThread_Init( } -void * TclThreadTestFinalize() { +void TclThreadTestFinalize() { if (errorProcString != NULL) { ckfree(errorProcString); errorProcString= NULL; } + return; } /* -- cgit v0.12 From 94ec3d943104b645666e3f71feb61ac260a43fcf Mon Sep 17 00:00:00 2001 From: pooryorick Date: Fri, 22 Jun 2018 15:10:04 +0000 Subject: Add another suppress rule for valgrind, factor test code into tests/tcltests.tcl, and constrained a some tests in the valgrind case. --- tests/all.tcl | 2 +- tests/chanio.test | 4 ---- tests/io.test | 4 ---- tests/ioCmd.test | 16 +++++++++++++--- tests/platform.test | 6 +++++- tests/tcltest.test | 7 +++++++ tests/tcltests.tcl | 12 ++++++++---- tests/thread.test | 11 ----------- tools/valgrind_suppress | 10 ++++++++++ 9 files changed, 44 insertions(+), 28 deletions(-) diff --git a/tests/all.tcl b/tests/all.tcl index 250163b..4fce323 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -13,7 +13,7 @@ package prefer latest package require Tcl 8.5- package require tcltest 2.2 -namespace import tcltest::* +namespace import -force ::tcltest::* configure {*}$argv -testdir [file dirname [file dirname [file normalize [ info script]/...]]] diff --git a/tests/chanio.test b/tests/chanio.test index 86c1485..492c11e 100644 --- a/tests/chanio.test +++ b/tests/chanio.test @@ -39,14 +39,10 @@ namespace eval ::tcl::test::io { catch [list package require -exact Tcltest [info patchlevel]] testConstraint testchannel [llength [info commands testchannel]] - testConstraint exec [llength [info commands exec]] testConstraint openpipe 1 - testConstraint fileevent [llength [info commands fileevent]] - testConstraint fcopy [llength [info commands fcopy]] testConstraint testfevent [llength [info commands testfevent]] testConstraint testchannelevent [llength [info commands testchannelevent]] testConstraint testmainthread [llength [info commands testmainthread]] - testConstraint thread [expr {0 == [catch {package require Thread 2.7-}]}] # You need a *very* special environment to do some tests. In particular, # many file systems do not support large-files... diff --git a/tests/io.test b/tests/io.test index cdecb7b..cc1d986 100644 --- a/tests/io.test +++ b/tests/io.test @@ -36,14 +36,10 @@ namespace eval ::tcl::test::io { variable expected testConstraint testchannel [llength [info commands testchannel]] -testConstraint exec [llength [info commands exec]] testConstraint openpipe 1 -testConstraint fileevent [llength [info commands fileevent]] -testConstraint fcopy [llength [info commands fcopy]] testConstraint testfevent [llength [info commands testfevent]] testConstraint testchannelevent [llength [info commands testchannelevent]] testConstraint testmainthread [llength [info commands testmainthread]] -testConstraint thread [expr {0 == [catch {package require Thread 2.7-}]}] testConstraint testobj [llength [info commands testobj]] # You need a *very* special environment to do some tests. In diff --git a/tests/ioCmd.test b/tests/ioCmd.test index ae58025..948671e 100644 --- a/tests/ioCmd.test +++ b/tests/ioCmd.test @@ -21,10 +21,10 @@ if {[lsearch [namespace children] ::tcltest] == -1} { ::tcltest::loadTestedCommands catch [list package require -exact Tcltest [info patchlevel]] +package require tcltests + # Custom constraints used in this file -testConstraint fcopy [llength [info commands fcopy]] testConstraint testchannel [llength [info commands testchannel]] -testConstraint thread [expr {0 == [catch {package require Thread 2.7-}]}] #---------------------------------------------------------------------- @@ -395,7 +395,7 @@ test iocmd-11.2 {I/O to command pipelines} {unixOrPc unixExecs} { test iocmd-11.3 {I/O to command pipelines} {unixOrPc unixExecs} { list [catch {open "| echo > \"$path(test5)\"" r+} msg] $msg $::errorCode } {1 {can't read output from command: standard output was redirected} {TCL OPERATION EXEC BADREDIRECT}} -test iocmd-11.4 {I/O to command pipelines} unixOrPc { +test iocmd-11.4 {I/O to command pipelines} {notValgrind unixOrPc} { list [catch {open "| no_such_command_exists" rb} msg] $msg $::errorCode } {1 {couldn't execute "no_such_command_exists": no such file or directory} {POSIX ENOENT {no such file or directory}}} @@ -3833,6 +3833,16 @@ test iocmd.tf-32.1 {origin thread of moved channel destroyed during access} -mat rename track {} # cleanup + + +# Eliminate valgrind "still reachable" reports on outstanding "Detached" +# structures in the detached list which stem from PipeClose2Proc not waiting +# around for background processes to complete, meaning that previous calls to +# Tcl_ReapDetachedProcs might not have had a chance to reap all processes. +after 10 +exec [info nameofexecutable] << {} + + foreach file [list test1 test2 test3 test4] { removeFile $file } diff --git a/tests/platform.test b/tests/platform.test index 8ee0ec7..e5a4c90 100644 --- a/tests/platform.test +++ b/tests/platform.test @@ -10,6 +10,7 @@ # of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require tcltest 2 +package require tcltests namespace eval ::tcl::test::platform { namespace import ::tcltest::testConstraint @@ -67,7 +68,10 @@ test platform-3.1 {CPU ID on Windows/UNIX} \ # format of string it produces consists of two non-empty words separated by a # hyphen. package require platform -test platform-4.1 {format of platform::identify result} -match regexp -body { +test platform-4.1 {format of platform::identify result} -constraints notValgrind -match regexp -body { + # [identify] may attempt to [exec] dpkg-architecture, which may not exist, + # in which case fork will not be followed by exec, and valgrind will issue + # "still reachable" reports. platform::identify } -result {^([^-]+-)+[^-]+$} test platform-4.2 {format of platform::generic result} -match regexp -body { diff --git a/tests/tcltest.test b/tests/tcltest.test index 17fa926..0bcf342 100644 --- a/tests/tcltest.test +++ b/tests/tcltest.test @@ -908,7 +908,9 @@ removeFile load.tcl # [interpreter] test tcltest-13.1 {interpreter} { + -constraints notValgrind -setup { + #to do: Why is $::tcltest::tcltest being saved and restored here? set old $::tcltest::tcltest set ::tcltest::tcltest tcltest } @@ -920,6 +922,11 @@ test tcltest-13.1 {interpreter} { } -result {tcltest tclsh tclsh} -cleanup { + # writing ::tcltest::tcltest triggers a trace that sets up the stdio + # constraint, which involves a call to [exec] that might fail after + # "fork" and before "exec", in which case the forked process will not + # have a chance to clean itself up before exiting, which causes + # valgrind to issue numerous "still reachable" reports. set ::tcltest::tcltest $old } } diff --git a/tests/tcltests.tcl b/tests/tcltests.tcl index 8d42b70..2105279 100644 --- a/tests/tcltests.tcl +++ b/tests/tcltests.tcl @@ -1,7 +1,11 @@ #! /usr/bin/env tclsh -# Some tests require the "exec" command. -# Skip them if exec is not defined. -testConstraint exec [llength [info commands exec]] +package require tcltest 2.2 +namespace import -force ::tcltest::* -testConstraint notValgrind [expr {![testConstraint valgrind]}] +testConstraint exec [llength [info commands exec]] +testConstraint fcopy [llength [info commands fcopy]] +testConstraint fileevent [llength [info commands fileevent]] +testConstraint thread [ + expr {0 == [catch {package require Thread 2.7-}]}] +testConstraint notValgrind [expr {![testConstraint valgrind]}] diff --git a/tests/thread.test b/tests/thread.test index a23670a..eaaaa41 100644 --- a/tests/thread.test +++ b/tests/thread.test @@ -14,10 +14,6 @@ # when thread::release is used, -wait is passed in order allow the thread to # be fully finalized, which avoids valgrind "still reachable" reports. -if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest 2.2 - namespace import -force ::tcltest::* -} package require tcltests @@ -28,13 +24,6 @@ catch [list package require -exact Tcltest [info patchlevel]] testConstraint testthread [expr {[info commands testthread] ne {}}] -# Some tests require the Thread package - -testConstraint thread [expr {0 == [catch {package require Thread 2.7-}]}] - -# Some tests may not work under valgrind - -testConstraint notValgrind [expr {![testConstraint valgrind]}] set threadSuperKillScript { rename catch "" diff --git a/tools/valgrind_suppress b/tools/valgrind_suppress index ede584a..fb7f173 100644 --- a/tools/valgrind_suppress +++ b/tools/valgrind_suppress @@ -29,6 +29,16 @@ } { + TclpDlopen/load + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + ... + fun:dlopen + fun:TclpDlopen +} + +{ TclpGetGrNam/__nss_next2/calloc Memcheck:Leak match-leak-kinds: reachable -- cgit v0.12 From 6cbfdcc4a338d5b7348ee7e65a7710d13f9bc27e Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sat, 23 Jun 2018 14:18:06 +0000 Subject: Add a test for no generation of a string representation when comparing with the empty string. --- tests/expr.test | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/expr.test b/tests/expr.test index fd11870..a265ac6 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -7196,6 +7196,15 @@ test expr-51.1 {test round-to-even on input} { expr 6.9294956446009195e15 } 6929495644600920.0 +test expr-52.1 { + comparison with empty string does not generate string representation +} { + set a [list one two three] + list [expr {$a eq {}}] [expr {$a < {}}] [expr {$a > {}}] [ + string match {*no string representation*} [ + ::tcl::unsupported::representation $a]] +} {0 0 1 1} + # cleanup -- cgit v0.12 From 05209c57d377b14758bda3882b0a70b979898066 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 23 Jun 2018 15:03:26 +0000 Subject: Make the delegates work by moving their creation into C. --- generic/tclOOBasic.c | 22 +++++++++++++++++--- generic/tclOOScript.h | 56 +++++++++++++++++---------------------------------- tests/oo.test | 45 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 81 insertions(+), 42 deletions(-) diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index 763f0ad..54115e0 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -83,7 +83,7 @@ TclOO_Class_Constructor( Tcl_Obj *const *objv) { Object *oPtr = (Object *) Tcl_ObjectContextObject(context); - Tcl_Obj **invoke; + Tcl_Obj **invoke, *nameObj; if (objc-1 > Tcl_ObjectContextSkippedArgs(context)) { Tcl_WrongNumArgs(interp, Tcl_ObjectContextSkippedArgs(context), objv, @@ -94,6 +94,17 @@ TclOO_Class_Constructor( } /* + * Make the class definition delegate. This is special; it doesn't reenter + * here (and the class definition delegate doesn't run any constructors). + */ + + nameObj = Tcl_NewStringObj(oPtr->namespacePtr->fullName, -1); + Tcl_AppendToObj(nameObj, ":: oo ::delegate", -1); + Tcl_NewObjectInstance(interp, (Tcl_Class) oPtr->fPtr->classCls, + TclGetString(nameObj), NULL, -1, NULL, -1); + Tcl_DecrRefCount(nameObj); + + /* * Delegate to [oo::define] to do the work. */ @@ -128,12 +139,17 @@ DecrRefsPostClassConstructor( int result) { Tcl_Obj **invoke = data[0]; + Tcl_InterpState saved; TclDecrRefCount(invoke[0]); - TclDecrRefCount(invoke[1]); TclDecrRefCount(invoke[2]); + invoke[0] = Tcl_NewStringObj("::oo::MixinClassDelegates", -1); + Tcl_IncrRefCount(invoke[0]); + saved = Tcl_SaveInterpState(interp, result); + Tcl_EvalObjv(interp, 2, invoke, 0); + TclDecrRefCount(invoke[1]); ckfree(invoke); - return result; + return Tcl_RestoreInterpState(interp, saved); } /* diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 4ca286c..102f2a2 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -5,7 +5,9 @@ * that the code can be definitely run even in safe interpreters; TclOO's * core setup is safe. * - * Copyright (c) 2012-2018 by Donal K. Fellows + * Copyright (c) 2012-2018 Donal K. Fellows + * Copyright (c) 2013 Andreas Kupries + * Copyright (c) 2017 Gerald Lester * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -51,6 +53,10 @@ static const char *tclOOSetupScript = " return\n" "}\n" +"proc ::oo::DelegateName {class} {\n" +" string cat [info object namespace $class] {:: oo ::delegate}\n" +"}\n" + "proc ::oo::define::classmethod {name {args {}} {body {}}} {\n" " # Create the method on the class if the caller gave arguments and body\n" " set argc [llength [info level 0]]\n" @@ -59,46 +65,24 @@ static const char *tclOOSetupScript = " [lindex [info level 0] 0] { name ?args body?\"}]\n" " }\n" " set cls [uplevel 1 self]\n" -/* -" set d $cls.Delegate\n" -" if {[info object isa object $d] && [info object isa class $d]} {\n" -" set cls $d\n" -" }\n" -*/ " if {$argc == 4} {\n" -" ::oo::define $cls method $name $args $body\n" +" ::oo::define [::oo::DelegateName $cls] method $name $args $body\n" " }\n" " # Make the connection by forwarding\n" " tailcall forward $name [info object namespace $cls]::my $name\n" "}\n" -/* -"# Build this *almost* like a class method, but with extra care to avoid\n" -"# nuking the existing method.\n" -"::oo::class create ::oo::class.Delegate {\n" -" method create {name args} {\n" -" if {![string match ::* $name]} {\n" -" set ns [uplevel 1 {namespace current}]\n" -" if {$ns eq {::}} {set ns {}}\n" -" set name ${ns}::${name}\n" -" }\n" -" if {[string match *.Delegate $name]} {\n" -" return [next $name {*}$args]\n" -" }\n" -" set delegate [oo::class create $name.Delegate]\n" -" set cls [next $name {*}$args]\n" -" set superdelegates [list $delegate]\n" -" foreach c [info class superclass $cls] {\n" -" set d $c.Delegate\n" -" if {[info object isa object $d] && [info object isa class $d]} {\n" -" lappend superdelegates $d\n" -" }\n" -" }\n" -" oo::objdefine $cls mixin {*}$superdelegates\n" -" return $cls\n" -" }\n" +"proc ::oo::MixinClassDelegates {class} {\n" +" ::oo::objdefine $class mixin -append {*}[lmap c [info class superclass $class] {\n" +" set d [::oo::DelegateName $c]\n" +" if {![info object isa class $d]} continue; set d\n" +" }]\n" +"}\n" + +"::proc ::oo::define::initialise {body} {\n" +" set clsns [info object namespace [uplevel 1 self]]\n" +" tailcall apply [list {} $body $clsns]\n" "}\n" -*/ "::oo::define ::oo::Slot {\n" " method Get {} {return -code error unimplemented}\n" @@ -130,10 +114,6 @@ static const char *tclOOSetupScript = "::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" "::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n" -/* -"::oo::define ::oo::class self mixin ::oo::class.Delegate\n" -*/ - "::oo::class create ::oo::singleton {\n" " superclass ::oo::class\n" " variable object\n" diff --git a/tests/oo.test b/tests/oo.test index 25ef5e2..87f0567 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -340,7 +340,7 @@ test oo-1.21 {basic test of OO functionality: default relations} -setup { lappend x [info object class ::oo::$initial] } return $x - }] {lsort $x} + }] {lsort [lmap y $x {if {[string match *::delegate $y]} continue; set y}]} } -cleanup { interp delete $fresh } -result {{} {::oo::Slot ::oo::abstract ::oo::class ::oo::object ::oo::singleton} {::oo::define::filter ::oo::define::mixin ::oo::define::superclass ::oo::define::variable ::oo::objdefine::filter ::oo::objdefine::mixin ::oo::objdefine::variable} {::oo::Slot ::oo::class} {::oo::abstract ::oo::singleton} {} {} {} {} {} ::oo::object ::oo::object ::oo::class ::oo::class ::oo::class} @@ -4845,6 +4845,49 @@ test oo-40.3 {TIP 500: private and unexport} -setup { } -cleanup { cls destroy } -result {{} {} foo {} foo {}} + +test oo-41.1 {TIP 478: classmethod} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { puts "[self] called with arguments: $args" } + } + oo::class create Table { + superclass ActiveRecord + } + Table find foo bar +} -cleanup { + parent destroy +} -output "::Table called with arguments: foo bar\n" +test oo-41.2 {TIP 478: classmethod in namespace} -setup { + namespace eval ::testns {} +} -body { + namespace eval ::testns { + oo::class create ActiveRecord { + classmethod find args { puts "[self] called with arguments: $args" } + } + oo::class create Table { + superclass ActiveRecord + } + } + testns::Table find foo bar +} -cleanup { + namespace delete ::testns +} -output "::testns::Table called with arguments: foo bar\n" +test oo-41.3 {TIP 478: classmethod must not interfere with constructor signatures} -setup { + oo::class create parent +} -body { + oo::class create TestClass { + superclass oo::class parent + self method create {name ignore body} { + next $name $body + } + } + TestClass create okay {} {} +} -cleanup { + parent destroy +} -result {::okay} cleanupTests return -- cgit v0.12 From e2a79c2604e79b36ec065a7bb44ec57eaca5ed8a Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sun, 24 Jun 2018 07:17:46 +0000 Subject: Fix for [3592747]: Let TclNRTailcallEval handle namespace problems. --- generic/tclBasic.c | 8 +------- tests/tailcall.test | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 3ac3ffd..07f7e5c 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -8402,18 +8402,12 @@ TclNRTailcallObjCmd( if (objc > 1) { Tcl_Obj *listPtr, *nsObjPtr; Tcl_Namespace *nsPtr = (Tcl_Namespace *) iPtr->varFramePtr->nsPtr; - Tcl_Namespace *ns1Ptr; /* The tailcall data is in a Tcl list: the first element is the * namespace, the rest the command to be tailcalled. */ - listPtr = Tcl_NewListObj(objc, objv); - nsObjPtr = Tcl_NewStringObj(nsPtr->fullName, -1); - if ((TCL_OK != TclGetNamespaceFromObj(interp, nsObjPtr, &ns1Ptr)) - || (nsPtr != ns1Ptr)) { - Tcl_Panic("Tailcall failed to find the proper namespace"); - } + listPtr = Tcl_NewListObj(objc, objv); TclListObjSetElement(interp, listPtr, 0, nsObjPtr); iPtr->varFramePtr->tailcallPtr = listPtr; diff --git a/tests/tailcall.test b/tests/tailcall.test index 26f3cbf..3751c35 100644 --- a/tests/tailcall.test +++ b/tests/tailcall.test @@ -688,6 +688,26 @@ if {[testConstraint testnrelevels]} { namespace delete testnre } +test tailcall-14.1 {in a deleted namespace} -body { + namespace eval ns { + proc p args { + tailcall [namespace current] $args + } + namespace delete [namespace current] + p + } +} -returnCodes 1 -result {namespace "::ns" not found} + +test tailcall-14.1-bc {{in a deleted namespace} {byte compiled}} -body { + namespace eval ns { + proc p args { + tailcall [namespace current] {*}$args + } + namespace delete [namespace current] + p + } +} -returnCodes 1 -result {namespace "::ns" not found} + # cleanup ::tcltest::cleanupTests -- cgit v0.12 From 94f9cf81ed3e156bd372a3cac249974d1acb4e1d Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sun, 24 Jun 2018 20:26:27 +0000 Subject: Fix "string tolower" and friends for handling unpaired surrogates correctly. Also add test-cases for those situations. Various typo's in comments. --- doc/Utf.3 | 5 ++++- generic/tclCmdMZ.c | 3 +++ generic/tclDisassemble.c | 2 +- generic/tclExecute.c | 14 ++++++++++---- generic/tclParse.c | 1 + generic/tclUtf.c | 21 +++++++++++++++------ tests/utf.test | 15 +++++++++++++++ 7 files changed, 49 insertions(+), 12 deletions(-) diff --git a/doc/Utf.3 b/doc/Utf.3 index 160575b..922fd81 100644 --- a/doc/Utf.3 +++ b/doc/Utf.3 @@ -132,7 +132,10 @@ represent one Unicode character in the UTF-8 representation. .PP \fBTcl_UniCharToUtf\fR stores the character \fIch\fR as a UTF-8 string in starting at \fIbuf\fR. The return value is the number of bytes stored -in \fIbuf\fR. +in \fIbuf\fR. If ch is an upper surrogate (range U+D800 - U+DBFF), then +the return value will be 0 and nothing will be stored. If you still +want to produce UTF-8 output for it (even though knowing it's an illegal +code-point on its own), just call \fBTcl_UniCharToUtf\fR again using ch = -1. .PP \fBTcl_UtfToUniChar\fR reads one UTF-8 character starting at \fIsrc\fR and stores it as a Tcl_UniChar in \fI*chPtr\fR. The return value is the diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index d64299e..0bd6cb4 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -1447,6 +1447,9 @@ StringIndexCmd( char buf[4]; length = Tcl_UniCharToUtf(ch, buf); + if (!length) { + length = Tcl_UniCharToUtf(-1, buf); + } Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, length)); } } diff --git a/generic/tclDisassemble.c b/generic/tclDisassemble.c index e9aaec4..a0d1258 100644 --- a/generic/tclDisassemble.c +++ b/generic/tclDisassemble.c @@ -894,7 +894,7 @@ PrintSourceToObj( Tcl_AppendPrintfToObj(appendObj, "\\U%08x", ch); i += 10; } else -#elif TCL_UTF_MAX > 3 +#else /* If len == 0, this means we have a char > 0xffff, resulting in * TclUtfToUniChar producing a surrogate pair. We want to output * this pair as a single Unicode character. diff --git a/generic/tclExecute.c b/generic/tclExecute.c index fda50b2..82de752 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -4964,7 +4964,7 @@ TEBCresume( /* Decode index value operands. */ - /* + /* assert ( toIdx != TCL_INDEX_AFTER); * * Extra safety for legacy bytecodes: @@ -5223,9 +5223,15 @@ TEBCresume( * but creating the object as a string seems to be faster in * practical use. */ - - length = (ch != -1) ? Tcl_UniCharToUtf(ch, buf) : 0; - objResultPtr = Tcl_NewStringObj(buf, length); + if (ch == -1) { + objResultPtr = Tcl_NewObj(); + } else { + length = Tcl_UniCharToUtf(ch, buf); + if (!length) { + length = Tcl_UniCharToUtf(-1, buf); + } + objResultPtr = Tcl_NewStringObj(buf, length); + } } TRACE_APPEND(("\"%s\"\n", O2S(objResultPtr))); diff --git a/generic/tclParse.c b/generic/tclParse.c index 581270c..00b83a1 100644 --- a/generic/tclParse.c +++ b/generic/tclParse.c @@ -981,6 +981,7 @@ TclParseBackslash( } count = Tcl_UniCharToUtf(result, dst); if (!count) { + /* Special case for handling upper surrogates. */ count = Tcl_UniCharToUtf(-1, dst); } return count; diff --git a/generic/tclUtf.c b/generic/tclUtf.c index ed10ab2..c8292a2 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -218,7 +218,7 @@ Tcl_UniCharToUtfDString( { const Tcl_UniChar *w, *wEnd; char *p, *string; - int oldLength; + int oldLength, len = 1; /* * UTF-8 string length in bytes will be <= Unicode string length * 4. @@ -231,9 +231,18 @@ Tcl_UniCharToUtfDString( p = string; wEnd = uniStr + uniLength; for (w = uniStr; w < wEnd; ) { - p += Tcl_UniCharToUtf(*w, p); + if (!len && ((*w & 0xFC00) != 0xDC00)) { + /* Special case for handling upper surrogates. */ + p += Tcl_UniCharToUtf(-1, p); + } + len = Tcl_UniCharToUtf(*w, p); + p += len; w++; } + if (!len) { + /* Special case for handling upper surrogates. */ + p += Tcl_UniCharToUtf(-1, p); + } Tcl_DStringSetLength(dsPtr, oldLength + (p - string)); return string; @@ -899,7 +908,7 @@ Tcl_UtfToUpper( * char to dst if its size is <= the original char. */ - if (bytes < TclUtfCount(upChar)) { + if ((bytes < TclUtfCount(upChar)) || ((upChar & 0xF800) == 0xD800)) { memcpy(dst, src, (size_t) bytes); dst += bytes; } else { @@ -962,7 +971,7 @@ Tcl_UtfToLower( * char to dst if its size is <= the original char. */ - if (bytes < TclUtfCount(lowChar)) { + if ((bytes < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { memcpy(dst, src, (size_t) bytes); dst += bytes; } else { @@ -1022,7 +1031,7 @@ Tcl_UtfToTitle( #endif titleChar = Tcl_UniCharToTitle(titleChar); - if (bytes < TclUtfCount(titleChar)) { + if ((bytes < TclUtfCount(titleChar)) || ((titleChar & 0xF800) == 0xD800)) { memcpy(dst, src, (size_t) bytes); dst += bytes; } else { @@ -1046,7 +1055,7 @@ Tcl_UtfToTitle( lowChar = Tcl_UniCharToLower(lowChar); } - if (bytes < TclUtfCount(lowChar)) { + if ((bytes < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { memcpy(dst, src, (size_t) bytes); dst += bytes; } else { diff --git a/tests/utf.test b/tests/utf.test index 67a6778..e820359 100644 --- a/tests/utf.test +++ b/tests/utf.test @@ -158,6 +158,12 @@ test utf-8.3 {Tcl_UniCharAtIndex: index > 0} { test utf-8.4 {Tcl_UniCharAtIndex: index > 0} { string index \u4e4e\u25a\xff\u543 2 } "\uff" +test utf-8.5 {Tcl_UniCharAtIndex: upper surrogate} { + string index \ud842 0 +} "\ud842" +test utf-8.5 {Tcl_UniCharAtIndex: lower surrogate} { + string index \udc42 0 +} "\udc42" test utf-9.1 {Tcl_UtfAtIndex: index = 0} { string range abcd 0 2 @@ -263,6 +269,9 @@ test utf-11.4 {Tcl_UtfToUpper} { test utf-11.5 {Tcl_UtfToUpper Georgian (new in Unicode 11)} { string toupper \u10d0\u1c90 } \u1c90\u1c90 +test utf-11.6 {Tcl_UtfToUpper low/high surrogate)} { + string toupper \udc24\ud824 +} \udc24\ud824 test utf-12.1 {Tcl_UtfToLower} { string tolower {} @@ -279,6 +288,9 @@ test utf-12.4 {Tcl_UtfToLower} { test utf-12.5 {Tcl_UtfToLower Georgian (new in Unicode 11)} { string tolower \u10d0\u1c90 } \u10d0\u10d0 +test utf-12.6 {Tcl_UtfToUpper low/high surrogate)} { + string tolower \udc24\ud824 +} \udc24\ud824 test utf-13.1 {Tcl_UtfToTitle} { string totitle {} @@ -298,6 +310,9 @@ test utf-13.5 {Tcl_UtfToTitle Georgian (new in Unicode 11)} { test utf-13.6 {Tcl_UtfToTitle Georgian (new in Unicode 11)} { string totitle \u1c90\u10d0 } \u1c90\u10d0 +test utf-13.7 {Tcl_UtfToTitle low/high surrogate)} { + string totitle \udc24\ud824 +} \udc24\ud824 test utf-14.1 {Tcl_UtfNcasecmp} { string compare -nocase a b -- cgit v0.12 From 0839047d8bed631eeb82c7c3e26b0f13461717e6 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 25 Jun 2018 07:22:19 +0000 Subject: Simplify ToUtf(), expecially for TCL_UTF_MAX>3 (with correct surrogate handling). Fix various typo's --- tests/iogt.test | 2 +- unix/tclUnixSock.c | 6 +++--- unix/tclUnixThrd.c | 6 +++--- win/tclWinInit.c | 19 +++++++++++-------- win/tclWinSock.c | 16 ++++++++-------- win/tclWinThrd.c | 8 ++++---- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/tests/iogt.test b/tests/iogt.test index 1ed89f7..269a0ba 100644 --- a/tests/iogt.test +++ b/tests/iogt.test @@ -608,7 +608,7 @@ test iogt-3.0 {Tcl_Channel valid after stack/unstack, fevent handling} -setup { variable copy 1 } } -constraints {testchannel knownBug} -body { - # This test to check the validity of aquired Tcl_Channel references is not + # This test to check the validity of acquired Tcl_Channel references is not # possible because even a backgrounded fcopy will immediately start to # copy data, without waiting for the event loop. This is done only in case # of an underflow on the read size!. So stacking transforms after the diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c index e418ff0..90c72c0 100644 --- a/unix/tclUnixSock.c +++ b/unix/tclUnixSock.c @@ -1099,7 +1099,7 @@ TcpGetHandleProc( * TcpAsyncCallback -- * * Called by the event handler that TcpConnect sets up internally for - * [socket -async] to get notified when the asyncronous connection + * [socket -async] to get notified when the asynchronous connection * attempt has succeeded or failed. * * ---------------------------------------------------------------------- @@ -1132,7 +1132,7 @@ TcpAsyncCallback( * * Remarks: * A single host name may resolve to more than one IP address, e.g. for - * an IPv4/IPv6 dual stack host. For handling asyncronously connecting + * an IPv4/IPv6 dual stack host. For handling asynchronously connecting * sockets in the background for such hosts, this function can act as a * coroutine. On the first call, it sets up the control variables for the * two nested loops over the local and remote addresses. Once the first @@ -1140,7 +1140,7 @@ TcpAsyncCallback( * event handler for that socket, and returns. When the callback occurs, * control is transferred to the "reenter" label, right after the initial * return and the loops resume as if they had never been interrupted. - * For syncronously connecting sockets, the loops work the usual way. + * For synchronously connecting sockets, the loops work the usual way. * * ---------------------------------------------------------------------- */ diff --git a/unix/tclUnixThrd.c b/unix/tclUnixThrd.c index 0476d85..0609230 100644 --- a/unix/tclUnixThrd.c +++ b/unix/tclUnixThrd.c @@ -316,7 +316,7 @@ TclpInitUnlock(void) * in finalization; it is hidden during creation of the objects. * * This lock must be different than the initLock because the initLock is - * held during creation of syncronization objects. + * held during creation of synchronization objects. * * Results: * None. @@ -407,7 +407,7 @@ Tcl_GetAllocMutex(void) * None. * * Side effects: - * May block the current thread. The mutex is aquired when this returns. + * May block the current thread. The mutex is acquired when this returns. * Will allocate memory for a pthread_mutex_t and initialize this the * first time this Tcl_Mutex is used. * @@ -511,7 +511,7 @@ TclpFinalizeMutex( * None. * * Side effects: - * May block the current thread. The mutex is aquired when this returns. + * May block the current thread. The mutex is acquired when this returns. * Will allocate memory for a pthread_mutex_t and initialize this the * first time this Tcl_Mutex is used. * diff --git a/win/tclWinInit.c b/win/tclWinInit.c index 8e567e3..ff5327d 100644 --- a/win/tclWinInit.c +++ b/win/tclWinInit.c @@ -112,7 +112,12 @@ static ProcessGlobalValue sourceLibraryDir = {0, 0, NULL, NULL, InitializeSourceLibraryDir, NULL, NULL}; static void AppendEnvironment(Tcl_Obj *listPtr, const char *lib); -static int ToUtf(const WCHAR *wSrc, char *dst); + +#if TCL_UTF_MAX < 4 +static void ToUtf(const WCHAR *wSrc, char *dst); +#else +#define ToUtf(wSrc, dst) WideCharToMultiByte(CP_UTF8, 0, wSrc, -1, dst, MAX_PATH * TCL_UTF_MAX, NULL, NULL) +#endif /* *--------------------------------------------------------------------------- @@ -435,7 +440,7 @@ InitializeSourceLibraryDir( * * ToUtf -- * - * Convert a char string to a UTF string. + * Convert a wchar string to a UTF string. * * Results: * None. @@ -446,21 +451,19 @@ InitializeSourceLibraryDir( *--------------------------------------------------------------------------- */ -static int +#if TCL_UTF_MAX < 4 +static void ToUtf( const WCHAR *wSrc, char *dst) { - char *start; - - start = dst; while (*wSrc != '\0') { dst += Tcl_UniCharToUtf(*wSrc, dst); wSrc++; } *dst = '\0'; - return (int) (dst - start); } +#endif /* *--------------------------------------------------------------------------- @@ -660,7 +663,7 @@ TclpSetVariables( * TclpFindVariable -- * * Locate the entry in environ for a given name. On Unix this routine is - * case sensitive, on Windows this matches mioxed case. + * case sensitive, on Windows this matches mixed case. * * Results: * The return value is the index in environ of an entry with the name diff --git a/win/tclWinSock.c b/win/tclWinSock.c index da2e60a..e2479e81 100644 --- a/win/tclWinSock.c +++ b/win/tclWinSock.c @@ -686,7 +686,7 @@ WaitForConnect( } /* - * A non blocking socket waiting for an asyncronous connect + * A non blocking socket waiting for an asynchronous connect * returns directly the error EWOULDBLOCK */ @@ -1606,9 +1606,9 @@ TcpGetHandleProc( * * This might be called in 3 circumstances: * - By a regular socket command - * - By the event handler to continue an asynchroneous connect + * - By the event handler to continue an asynchronously connect * - By a blocking socket function (gets/puts) to terminate the - * connect synchroneously + * connect synchronously * * Results: * TCL_OK, if the socket was successfully connected or an asynchronous @@ -1620,7 +1620,7 @@ TcpGetHandleProc( * * Remarks: * A single host name may resolve to more than one IP address, e.g. for - * an IPv4/IPv6 dual stack host. For handling asyncronously connecting + * an IPv4/IPv6 dual stack host. For handling asynchronously connecting * sockets in the background for such hosts, this function can act as a * coroutine. On the first call, it sets up the control variables for the * two nested loops over the local and remote addresses. Once the first @@ -1628,7 +1628,7 @@ TcpGetHandleProc( * event handler for that socket, and returns. When the callback occurs, * control is transferred to the "reenter" label, right after the initial * return and the loops resume as if they had never been interrupted. - * For syncronously connecting sockets, the loops work the usual way. + * For synchronously connecting sockets, the loops work the usual way. * *---------------------------------------------------------------------- */ @@ -1718,7 +1718,7 @@ TcpConnect( continue; } /* - * For asyncroneous connect set the socket in nonblocking mode + * For asynchroneous connect set the socket in nonblocking mode * and activate connect notification */ if (async_connect) { @@ -1806,7 +1806,7 @@ TcpConnect( /* * Clear the tsd socket list pointer if we did not wait for - * the FD_CONNECT asyncroneously + * the FD_CONNECT asynchroneously */ tsdPtr->pendingTcpState = NULL; @@ -1868,7 +1868,7 @@ out: SetEvent(tsdPtr->socketListLock); } /* - * Error message on syncroneous connect + * Error message on synchroneous connect */ if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( diff --git a/win/tclWinThrd.c b/win/tclWinThrd.c index 8f3ddb9..0f83526 100644 --- a/win/tclWinThrd.c +++ b/win/tclWinThrd.c @@ -247,7 +247,7 @@ TclpThreadCreate( /* * The only purpose of this is to decrement the reference count so the - * OS resources will be reaquired when the thread closes. + * OS resources will be reacquired when the thread closes. */ CloseHandle(tHandle); @@ -405,7 +405,7 @@ TclpInitUnlock(void) * mutexes, condition variables, and thread local storage keys. * * This lock must be different than the initLock because the initLock is - * held during creation of syncronization objects. + * held during creation of synchronization objects. * * Results: * None. @@ -555,7 +555,7 @@ static void FinalizeConditionEvent(ClientData data); * None. * * Side effects: - * May block the current thread. The mutex is aquired when this returns. + * May block the current thread. The mutex is acquired when this returns. * *---------------------------------------------------------------------- */ @@ -655,7 +655,7 @@ TclpFinalizeMutex( * None. * * Side effects: - * May block the current thread. The mutex is aquired when this returns. + * May block the current thread. The mutex is acquired when this returns. * Will allocate memory for a HANDLE and initialize this the first time * this Tcl_Condition is used. * -- cgit v0.12 From ed5ed756bc5993edb110e13b90028646b413e92d Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 26 Jun 2018 14:22:08 +0000 Subject: Restore lost tests. --- tests/all.tcl | 2 +- tests/chanio.test | 11 ++++------- tests/io.test | 11 +++++------ tests/tcltests.tcl | 2 +- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/tests/all.tcl b/tests/all.tcl index 4fce323..e14bd9c 100644 --- a/tests/all.tcl +++ b/tests/all.tcl @@ -13,7 +13,7 @@ package prefer latest package require Tcl 8.5- package require tcltest 2.2 -namespace import -force ::tcltest::* +namespace import ::tcltest::* configure {*}$argv -testdir [file dirname [file dirname [file normalize [ info script]/...]]] diff --git a/tests/chanio.test b/tests/chanio.test index 492c11e..6408f50 100644 --- a/tests/chanio.test +++ b/tests/chanio.test @@ -13,16 +13,11 @@ # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. +# TODO: This test is likely worthless. Confirm and remove if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 - namespace import -force ::tcltest::* } -::tcltest::loadTestedCommands -catch [list package require -exact Tcltest [info patchlevel]] - -testConstraint testbytestring [llength [info commands testbytestring]] - namespace eval ::tcl::test::io { namespace import ::tcltest::* @@ -35,9 +30,11 @@ namespace eval ::tcl::test::io { variable msg variable expected - ::tcltest::loadTestedCommands + loadTestedCommands catch [list package require -exact Tcltest [info patchlevel]] + package require tcltests + testConstraint testbytestring [llength [info commands testbytestring]] testConstraint testchannel [llength [info commands testchannel]] testConstraint openpipe 1 testConstraint testfevent [llength [info commands testfevent]] diff --git a/tests/io.test b/tests/io.test index cc1d986..996e125 100644 --- a/tests/io.test +++ b/tests/io.test @@ -15,14 +15,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 - namespace import -force ::tcltest::* } -::tcltest::loadTestedCommands -catch [list package require -exact Tcltest [info patchlevel]] - -testConstraint testbytestring [llength [info commands testbytestring]] - namespace eval ::tcl::test::io { namespace import ::tcltest::* @@ -35,6 +29,11 @@ namespace eval ::tcl::test::io { variable msg variable expected + loadTestedCommands + catch [list package require -exact Tcltest [info patchlevel]] + package require tcltests + +testConstraint testbytestring [llength [info commands testbytestring]] testConstraint testchannel [llength [info commands testchannel]] testConstraint openpipe 1 testConstraint testfevent [llength [info commands testfevent]] diff --git a/tests/tcltests.tcl b/tests/tcltests.tcl index 2105279..74d1b40 100644 --- a/tests/tcltests.tcl +++ b/tests/tcltests.tcl @@ -1,7 +1,7 @@ #! /usr/bin/env tclsh package require tcltest 2.2 -namespace import -force ::tcltest::* +namespace import ::tcltest::* testConstraint exec [llength [info commands exec]] testConstraint fcopy [llength [info commands fcopy]] -- cgit v0.12 From 9da2aebeaebd1ccbfa806b0c3550774abc7ad778 Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 26 Jun 2018 17:00:29 +0000 Subject: Use a thread exit handler, and not a custom exit proc for package cleanup. --- generic/tclInt.h | 1 - generic/tclTest.c | 16 ---------------- generic/tclThreadTest.c | 17 ++++++++--------- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/generic/tclInt.h b/generic/tclInt.h index 64004d8..0a3285f 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -4532,7 +4532,6 @@ MODULE_SCOPE Tcl_PackageInitProc TclObjTest_Init; MODULE_SCOPE Tcl_PackageInitProc TclThread_Init; MODULE_SCOPE Tcl_PackageInitProc Procbodytest_Init; MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit; -MODULE_SCOPE void TclThreadTestFinalize(); /* *---------------------------------------------------------------- diff --git a/generic/tclTest.c b/generic/tclTest.c index 952f384..45cca5a 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -52,7 +52,6 @@ #define TCL_STORAGE_CLASS DLLEXPORT EXTERN int Tcltest_Init(Tcl_Interp *interp); EXTERN int Tcltest_SafeInit(Tcl_Interp *interp); -EXTERN TCL_NORETURN void Tcltest_Exit(ClientData clientData); /* * Dynamic string shared by TestdcallCmd and DelCallbackProc; used to collect @@ -564,10 +563,6 @@ Tcltest_Init( return TCL_ERROR; } - - /* Finalizer */ - Tcl_SetExitProc(Tcltest_Exit); - /* * Create additional commands and math functions for testing Tcl. */ @@ -795,17 +790,6 @@ Tcltest_SafeInit( return Procbodytest_SafeInit(interp); } -TCL_NORETURN void Tcltest_Exit( - ClientData clientData -) { - int status = PTR2INT(clientData); - Tcl_Finalize(); - TclThreadTestFinalize(); - TclpExit(status); - Tcl_Panic("OS exit failed!"); -} - - /* *---------------------------------------------------------------------- * diff --git a/generic/tclThreadTest.c b/generic/tclThreadTest.c index 92cfa13..35b3fc3 100644 --- a/generic/tclThreadTest.c +++ b/generic/tclThreadTest.c @@ -174,15 +174,6 @@ TclThread_Init( Tcl_CreateObjCommand(interp, "testthread", ThreadObjCmd, NULL, NULL); return TCL_OK; } - - -void TclThreadTestFinalize() { - if (errorProcString != NULL) { - ckfree(errorProcString); - errorProcString= NULL; - } - return; -} /* *---------------------------------------------------------------------- @@ -1166,6 +1157,14 @@ ThreadExitProc( Tcl_MutexLock(&threadMutex); + if (self == errorThreadId) { + if (errorProcString) { /* Extra safety */ + ckfree(errorProcString); + errorProcString = NULL; + } + errorThreadId = 0; + } + if (threadEvalScript) { ckfree(threadEvalScript); threadEvalScript = NULL; -- cgit v0.12 From 7a9d97826e2df30fcf48191281dede724a99ff43 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 26 Jun 2018 19:45:22 +0000 Subject: Since Tcl is always compiled with -DUNICODE -D_UNICODE (on Windows) and we know TCL_UTF_MAX>=4, we can simplify things. No change in functionality. --- generic/tclIOSock.c | 2 +- win/tclWinConsole.c | 4 ---- win/tclWinDde.c | 31 -------------------------- win/tclWinError.c | 2 +- win/tclWinFile.c | 18 ++------------- win/tclWinInit.c | 64 ++++++++--------------------------------------------- win/tclWinPanic.c | 2 +- win/tclWinPipe.c | 2 +- win/tclWinReg.c | 7 ------ 9 files changed, 15 insertions(+), 117 deletions(-) diff --git a/generic/tclIOSock.c b/generic/tclIOSock.c index 6abfa60..12e2900 100644 --- a/generic/tclIOSock.c +++ b/generic/tclIOSock.c @@ -11,7 +11,7 @@ #include "tclInt.h" -#if defined(_WIN32) && defined(UNICODE) +#if defined(_WIN32) /* * On Windows, we need to do proper Unicode->UTF-8 conversion. */ diff --git a/win/tclWinConsole.c b/win/tclWinConsole.c index 92643cf..f8b67a3 100644 --- a/win/tclWinConsole.c +++ b/win/tclWinConsole.c @@ -1360,11 +1360,7 @@ TclWinOpenConsoleChannel( Tcl_SetChannelOption(NULL, infoPtr->channel, "-translation", "auto"); Tcl_SetChannelOption(NULL, infoPtr->channel, "-eofchar", "\032 {}"); -#ifdef UNICODE Tcl_SetChannelOption(NULL, infoPtr->channel, "-encoding", "unicode"); -#else - Tcl_SetChannelOption(NULL, infoPtr->channel, "-encoding", encoding); -#endif return infoPtr->channel; } diff --git a/win/tclWinDde.c b/win/tclWinDde.c index 381db65..52bcd42 100644 --- a/win/tclWinDde.c +++ b/win/tclWinDde.c @@ -18,15 +18,6 @@ #include #include -#ifndef UNICODE -# undef CP_WINUNICODE -# define CP_WINUNICODE CP_WINANSI -# undef Tcl_WinTCharToUtf -# define Tcl_WinTCharToUtf(a,b,c) Tcl_ExternalToUtfDString(NULL,a,b,c) -# undef Tcl_WinUtfToTChar -# define Tcl_WinUtfToTChar(a,b,c) Tcl_UtfToExternalDString(NULL,a,b,c) -#endif - #if !defined(NDEBUG) /* test POKE server Implemented for debug mode only */ # undef CBF_FAIL_POKES @@ -1432,11 +1423,7 @@ DdeObjCmd( Initialize(); if (firstArg != 1) { -#ifdef UNICODE serviceName = Tcl_GetUnicodeFromObj(objv[firstArg], &length); -#else - serviceName = Tcl_GetStringFromObj(objv[firstArg], &length); -#endif } else { length = 0; } @@ -1449,11 +1436,7 @@ DdeObjCmd( } if ((index != DDE_SERVERNAME) && (index != DDE_EVAL)) { -#ifdef UNICODE topicName = (TCHAR *) Tcl_GetUnicodeFromObj(objv[firstArg + 1], &length); -#else - topicName = Tcl_GetStringFromObj(objv[firstArg + 1], &length); -#endif if (length == 0) { topicName = NULL; } else { @@ -1467,11 +1450,7 @@ DdeObjCmd( serviceName = DdeSetServerName(interp, serviceName, flags, handlerPtr); if (serviceName != NULL) { -#ifdef UNICODE Tcl_SetObjResult(interp, Tcl_NewUnicodeObj((Tcl_UniChar *) serviceName, -1)); -#else - Tcl_SetObjResult(interp, Tcl_NewStringObj(serviceName, -1)); -#endif } else { Tcl_ResetResult(interp); } @@ -1530,13 +1509,8 @@ DdeObjCmd( break; } case DDE_REQUEST: { -#ifdef UNICODE const TCHAR *itemString = (TCHAR *) Tcl_GetUnicodeFromObj(objv[firstArg + 2], &length); -#else - const TCHAR *itemString = Tcl_GetStringFromObj(objv[firstArg + 2], - &length); -#endif if (length == 0) { Tcl_SetObjResult(interp, @@ -1590,13 +1564,8 @@ DdeObjCmd( break; } case DDE_POKE: { -#ifdef UNICODE const TCHAR *itemString = (TCHAR *) Tcl_GetUnicodeFromObj(objv[firstArg + 2], &length); -#else - const TCHAR *itemString = Tcl_GetStringFromObj(objv[firstArg + 2], - &length); -#endif BYTE *dataString; if (length == 0) { diff --git a/win/tclWinError.c b/win/tclWinError.c index 5d4423b..bce81fa 100644 --- a/win/tclWinError.c +++ b/win/tclWinError.c @@ -391,7 +391,7 @@ tclWinDebugPanic( if (IsDebuggerPresent()) { WCHAR msgString[TCL_MAX_WARN_LEN]; - char buf[TCL_MAX_WARN_LEN * TCL_UTF_MAX]; + char buf[TCL_MAX_WARN_LEN * 3]; vsnprintf(buf, sizeof(buf), format, argList); msgString[TCL_MAX_WARN_LEN-1] = L'\0'; diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 0595e6c..f1e4cc9 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -567,7 +567,6 @@ WinReadLinkDirectory( */ offset = 0; -#ifdef UNICODE if (reparseBuffer->MountPointReparseBuffer.PathBuffer[0] == L'\\') { /* * Check whether this is a mounted volume. @@ -629,7 +628,6 @@ WinReadLinkDirectory( offset = 4; } } -#endif /* UNICODE */ Tcl_WinTCharToUtf((const TCHAR *) reparseBuffer->MountPointReparseBuffer.PathBuffer, @@ -800,7 +798,7 @@ tclWinDebugPanic( { #define TCL_MAX_WARN_LEN 1024 va_list argList; - char buf[TCL_MAX_WARN_LEN * TCL_UTF_MAX]; + char buf[TCL_MAX_WARN_LEN * 3]; WCHAR msgString[TCL_MAX_WARN_LEN]; va_start(argList, format); @@ -859,7 +857,7 @@ TclpFindExecutable( * ignore. */ { WCHAR wName[MAX_PATH]; - char name[MAX_PATH * TCL_UTF_MAX]; + char name[MAX_PATH * 3]; /* * Under Windows we ignore argv0, and return the path for the file used to @@ -871,17 +869,7 @@ TclpFindExecutable( Tcl_SetPanicProc(tclWinDebugPanic); } -#ifdef UNICODE GetModuleFileNameW(NULL, wName, MAX_PATH); -#else - GetModuleFileNameA(NULL, name, sizeof(name)); - - /* - * Convert to WCHAR to get out of ANSI codepage - */ - - MultiByteToWideChar(CP_ACP, 0, name, -1, wName, MAX_PATH); -#endif WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, sizeof(name), NULL, NULL); TclWinNoBackslash(name); TclSetObjNameOfExecutable(Tcl_NewStringObj(name, -1), NULL); @@ -1646,7 +1634,6 @@ NativeAccess( * what permissions the OS has set for a file. */ -#ifdef UNICODE { SECURITY_DESCRIPTOR *sdPtr = NULL; unsigned long size; @@ -1809,7 +1796,6 @@ NativeAccess( } } -#endif /* !UNICODE */ return 0; } diff --git a/win/tclWinInit.c b/win/tclWinInit.c index f04069b..2ce19ce 100644 --- a/win/tclWinInit.c +++ b/win/tclWinInit.c @@ -107,12 +107,6 @@ static ProcessGlobalValue sourceLibraryDir = {0, 0, NULL, NULL, InitializeSourceLibraryDir, NULL, NULL}; static void AppendEnvironment(Tcl_Obj *listPtr, const char *lib); - -#if TCL_UTF_MAX < 4 -static void ToUtf(const WCHAR *wSrc, char *dst); -#else -#define ToUtf(wSrc, dst) WideCharToMultiByte(CP_UTF8, 0, wSrc, -1, dst, MAX_PATH * TCL_UTF_MAX, NULL, NULL) -#endif /* *--------------------------------------------------------------------------- @@ -262,7 +256,7 @@ AppendEnvironment( { int pathc; WCHAR wBuf[MAX_PATH]; - char buf[MAX_PATH * TCL_UTF_MAX]; + char buf[MAX_PATH * 3]; Tcl_Obj *objPtr; Tcl_DString ds; const char **pathv; @@ -291,12 +285,8 @@ AppendEnvironment( * this is a unicode string. */ - if (GetEnvironmentVariableW(L"TCL_LIBRARY", wBuf, MAX_PATH) == 0) { - buf[0] = '\0'; - GetEnvironmentVariableA("TCL_LIBRARY", buf, MAX_PATH); - } else { - ToUtf(wBuf, buf); - } + GetEnvironmentVariableW(L"TCL_LIBRARY", wBuf, MAX_PATH); + WideCharToMultiByte(CP_UTF8, 0, wBuf, -1, buf, MAX_PATH * 3, NULL, NULL); if (buf[0] != '\0') { objPtr = Tcl_NewStringObj(buf, -1); @@ -355,14 +345,11 @@ InitializeDefaultLibraryDir( { HMODULE hModule = TclWinGetTclInstance(); WCHAR wName[MAX_PATH + LIBRARY_SIZE]; - char name[(MAX_PATH + LIBRARY_SIZE) * TCL_UTF_MAX]; + char name[(MAX_PATH + LIBRARY_SIZE) * 3]; char *end, *p; - if (GetModuleFileNameW(hModule, wName, MAX_PATH) == 0) { - GetModuleFileNameA(hModule, name, MAX_PATH); - } else { - ToUtf(wName, name); - } + GetModuleFileNameW(hModule, wName, MAX_PATH); + WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, MAX_PATH * 3, NULL, NULL); end = strrchr(name, '\\'); *end = '\0'; @@ -406,14 +393,11 @@ InitializeSourceLibraryDir( { HMODULE hModule = TclWinGetTclInstance(); WCHAR wName[MAX_PATH + LIBRARY_SIZE]; - char name[(MAX_PATH + LIBRARY_SIZE) * TCL_UTF_MAX]; + char name[(MAX_PATH + LIBRARY_SIZE) * 3]; char *end, *p; - if (GetModuleFileNameW(hModule, wName, MAX_PATH) == 0) { - GetModuleFileNameA(hModule, name, MAX_PATH); - } else { - ToUtf(wName, name); - } + GetModuleFileNameW(hModule, wName, MAX_PATH); + WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, MAX_PATH * 3, NULL, NULL); end = strrchr(name, '\\'); *end = '\0'; @@ -434,36 +418,6 @@ InitializeSourceLibraryDir( /* *--------------------------------------------------------------------------- * - * ToUtf -- - * - * Convert a wchar string to a UTF string. - * - * Results: - * None. - * - * Side effects: - * None. - * - *--------------------------------------------------------------------------- - */ - -#if TCL_UTF_MAX < 4 -static void -ToUtf( - const WCHAR *wSrc, - char *dst) -{ - while (*wSrc != '\0') { - dst += Tcl_UniCharToUtf(*wSrc, dst); - wSrc++; - } - *dst = '\0'; -} -#endif - -/* - *--------------------------------------------------------------------------- - * * TclpSetInitialEncodings -- * * Based on the locale, determine the encoding of the operating system diff --git a/win/tclWinPanic.c b/win/tclWinPanic.c index d23ffcd..a71f506 100644 --- a/win/tclWinPanic.c +++ b/win/tclWinPanic.c @@ -35,7 +35,7 @@ Tcl_ConsolePanic( #define TCL_MAX_WARN_LEN 26000 va_list argList; WCHAR msgString[TCL_MAX_WARN_LEN]; - char buf[TCL_MAX_WARN_LEN * TCL_UTF_MAX]; + char buf[TCL_MAX_WARN_LEN * 3]; HANDLE handle = GetStdHandle(STD_ERROR_HANDLE); DWORD dummy; diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index a357412..2155a8d 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -941,7 +941,7 @@ TclpCreateProcess( PROCESS_INFORMATION procInfo; SECURITY_ATTRIBUTES secAtts; HANDLE hProcess, h, inputHandle, outputHandle, errorHandle; - char execPath[MAX_PATH * TCL_UTF_MAX]; + char execPath[MAX_PATH * 3]; WinFile *filePtr; PipeInit(); diff --git a/win/tclWinReg.c b/win/tclWinReg.c index de48b9b..95ab499 100644 --- a/win/tclWinReg.c +++ b/win/tclWinReg.c @@ -22,13 +22,6 @@ #endif #include -#ifndef UNICODE -# undef Tcl_WinTCharToUtf -# define Tcl_WinTCharToUtf(a,b,c) Tcl_ExternalToUtfDString(NULL,a,b,c) -# undef Tcl_WinUtfToTChar -# define Tcl_WinUtfToTChar(a,b,c) Tcl_UtfToExternalDString(NULL,a,b,c) -#endif /* !UNICODE */ - /* * Ensure that we can say which registry is being accessed. */ -- cgit v0.12 From 082e8c6d7aa61e4250a321d2d44ca57c8d09049d Mon Sep 17 00:00:00 2001 From: dkf Date: Wed, 27 Jun 2018 07:39:49 +0000 Subject: Add better error handling and make the delegation work with cloning. --- generic/tclOOBasic.c | 14 ++++- generic/tclOOScript.h | 35 +++++++++++-- tests/oo.test | 139 ++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 178 insertions(+), 10 deletions(-) diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c index 54115e0..13c98f4 100644 --- a/generic/tclOOBasic.c +++ b/generic/tclOOBasic.c @@ -122,7 +122,7 @@ TclOO_Class_Constructor( Tcl_IncrRefCount(invoke[1]); Tcl_IncrRefCount(invoke[2]); TclNRAddCallback(interp, DecrRefsPostClassConstructor, - invoke, NULL, NULL, NULL); + invoke, oPtr, NULL, NULL); /* * Tricky point: do not want the extra reported level in the Tcl stack @@ -139,16 +139,26 @@ DecrRefsPostClassConstructor( int result) { Tcl_Obj **invoke = data[0]; + Object *oPtr = data[1]; Tcl_InterpState saved; + int code; TclDecrRefCount(invoke[0]); + TclDecrRefCount(invoke[1]); TclDecrRefCount(invoke[2]); invoke[0] = Tcl_NewStringObj("::oo::MixinClassDelegates", -1); + invoke[1] = TclOOObjectName(interp, oPtr); Tcl_IncrRefCount(invoke[0]); + Tcl_IncrRefCount(invoke[1]); saved = Tcl_SaveInterpState(interp, result); - Tcl_EvalObjv(interp, 2, invoke, 0); + code = Tcl_EvalObjv(interp, 2, invoke, 0); + TclDecrRefCount(invoke[0]); TclDecrRefCount(invoke[1]); ckfree(invoke); + if (code != TCL_OK) { + Tcl_DiscardInterpState(saved); + return code; + } return Tcl_RestoreInterpState(interp, saved); } diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 102f2a2..73c3383 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -73,10 +73,21 @@ static const char *tclOOSetupScript = "}\n" "proc ::oo::MixinClassDelegates {class} {\n" -" ::oo::objdefine $class mixin -append {*}[lmap c [info class superclass $class] {\n" +" if {![info object isa class $class]} {\n" +" return\n" +" }\n" +" set delegate [::oo::DelegateName $class]\n" +" if {![info object isa class $delegate]} {\n" +" return\n" +" }\n" +" foreach c [info class superclass $class] {" " set d [::oo::DelegateName $c]\n" -" if {![info object isa class $d]} continue; set d\n" -" }]\n" +" if {![info object isa class $d]} {\n" +" continue\n" +" }\n" +" ::oo::define $delegate superclass -append $d\n" +" }\n" +" ::oo::objdefine $class mixin -append $delegate\n" "}\n" "::proc ::oo::define::initialise {body} {\n" @@ -114,6 +125,19 @@ static const char *tclOOSetupScript = "::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" "::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n" +"::oo::define ::oo::class method {originObject} {\n" +" next $originObject\n" +" # Rebuild the class inheritance delegation class\n" +" set originDelegate [::oo::DelegateName $originObject]\n" +" set targetDelegate [::oo::DelegateName [self]]\n" +" if {[info object isa class $originDelegate] && ![info object isa class $targetDelegate]} {\n" +" ::oo::copy $originDelegate $targetDelegate\n" +" ::oo::objdefine [self] mixin -set {*}[lmap c [info object mixin [self]] {\n" +" if {$c eq $originDelegate} {set targetDelegate} {set c}\n" +" }]\n" +" }\n" +"}\n" + "::oo::class create ::oo::singleton {\n" " superclass ::oo::class\n" " variable object\n" @@ -137,6 +161,7 @@ static const char *tclOOSetupScript = */ static const char *clonedBody = +"# Copy over the procedures from the original namespace\n" "foreach p [info procs [info object namespace $originObject]::*] {\n" " set args [info args $p]\n" " set idx -1\n" @@ -148,6 +173,7 @@ static const char *clonedBody = " set p [namespace tail $p]\n" " proc $p $args $b\n" "}\n" +"# Copy over the variables from the original namespace\n" "foreach v [info vars [info object namespace $originObject]::*] {\n" " upvar 0 $v vOrigin\n" " namespace upvar [namespace current] [namespace tail $v] vNew\n" @@ -158,7 +184,8 @@ static const char *clonedBody = " set vNew $vOrigin\n" " }\n" " }\n" -"}\n"; +"}\n" +; #endif /* TCL_OO_SCRIPT_H */ diff --git a/tests/oo.test b/tests/oo.test index 87f0567..9aafe2e 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4851,7 +4851,9 @@ test oo-41.1 {TIP 478: classmethod} -setup { } -body { oo::class create ActiveRecord { superclass parent - classmethod find args { puts "[self] called with arguments: $args" } + classmethod find args { + return "[self] called with arguments: $args" + } } oo::class create Table { superclass ActiveRecord @@ -4859,13 +4861,15 @@ test oo-41.1 {TIP 478: classmethod} -setup { Table find foo bar } -cleanup { parent destroy -} -output "::Table called with arguments: foo bar\n" +} -result {::Table called with arguments: foo bar} test oo-41.2 {TIP 478: classmethod in namespace} -setup { namespace eval ::testns {} } -body { namespace eval ::testns { oo::class create ActiveRecord { - classmethod find args { puts "[self] called with arguments: $args" } + classmethod find args { + return "[self] called with arguments: $args" + } } oo::class create Table { superclass ActiveRecord @@ -4874,7 +4878,7 @@ test oo-41.2 {TIP 478: classmethod in namespace} -setup { testns::Table find foo bar } -cleanup { namespace delete ::testns -} -output "::testns::Table called with arguments: foo bar\n" +} -result {::testns::Table called with arguments: foo bar} test oo-41.3 {TIP 478: classmethod must not interfere with constructor signatures} -setup { oo::class create parent } -body { @@ -4888,6 +4892,133 @@ test oo-41.3 {TIP 478: classmethod must not interfere with constructor signature } -cleanup { parent destroy } -result {::okay} +test oo-41.4 {TIP 478: classmethod with three levels} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + oo::class create SubTable { + superclass Table + } + SubTable find foo bar +} -cleanup { + parent destroy +} -result {::SubTable called with arguments: foo bar} + +test oo-42.1 {TIP 478: callback generation} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {} { return ok,[self] } + method makeCall {} { + return [callback CallMe] + } + } + c create ::context + set cb [context makeCall] + {*}$cb +} -cleanup { + parent destroy +} -result {ok,::context} +test oo-42.2 {TIP 478: callback generation} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {a b c} { return ok,[self],$a,$b,$c } + method makeCall {b} { + return [callback CallMe 123 $b] + } + } + c create ::context + set cb [context makeCall "a b c"] + {*}$cb PQR +} -cleanup { + parent destroy +} -result {ok,::context,123,a b c,PQR} +test oo-42.3 {TIP 478: callback generation, alternate name} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {} { return ok,[self] } + method makeCall {} { + return [mymethod CallMe] + } + } + c create ::context + set cb [context makeCall] + {*}$cb +} -cleanup { + parent destroy +} -result {ok,::context} +test oo-42.4 {TIP 478: callback generation, alternate name} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {a b c} { return ok,[self],$a,$b,$c } + method makeCall {b} { + return [mymethod CallMe 123 $b] + } + } + c create ::context + set cb [context makeCall "a b c"] + {*}$cb PQR +} -cleanup { + parent destroy +} -result {ok,::context,123,a b c,PQR} +test oo-42.5 {TIP 478: callbacks and method lifetime} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method makeCall {b} { + return [callback CallMe 123 $b] + } + } + c create ::context + set cb [context makeCall "a b c"] + set result [list [catch {{*}$cb PQR} msg] $msg] + oo::objdefine context { + method CallMe {a b c} { return ok,[self],$a,$b,$c } + } + lappend result [{*}$cb PQR] +} -cleanup { + parent destroy +} -result {1 {unknown method "CallMe": must be , destroy, eval, makeCall, unknown, variable or varname} {ok,::context,123,a b c,PQR}} +test oo-42.6 {TIP 478: callback use case} -setup { + oo::class create parent + unset -nocomplain x +} -body { + oo::class create c { + superclass parent + variable count + constructor {var} { + set count 0 + upvar 1 $var v + trace add variable v write [callback TraceCallback] + } + method count {} {return $count} + method TraceCallback {name1 name2 op} { + incr count + } + } + set o [c new x] + for {set x 0} {$x < 5} {incr x} {} + $o count +} -cleanup { + unset -nocomplain x + parent destroy +} -result 6 cleanupTests return -- cgit v0.12 From 8219fb26323aa59d5e46299099e965049a0cb654 Mon Sep 17 00:00:00 2001 From: dkf Date: Thu, 28 Jun 2018 08:12:07 +0000 Subject: Tests for abstract and singleton --- generic/tclOOScript.h | 3 +- tests/oo.test | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 73c3383..22f5e56 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -143,8 +143,9 @@ static const char *tclOOSetupScript = " variable object\n" " unexport create createWithNamespace\n" " method new args {\n" -" if {![info exists object]} {\n" +" if {![info exists object] || ![info object isa object $object]} {\n" " set object [next {*}$args]\n" +" ::oo::objdefine $object unexport destroy\n" " }\n" " return $object\n" " }\n" diff --git a/tests/oo.test b/tests/oo.test index 9aafe2e..1e694c1 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4892,7 +4892,7 @@ test oo-41.3 {TIP 478: classmethod must not interfere with constructor signature } -cleanup { parent destroy } -result {::okay} -test oo-41.4 {TIP 478: classmethod with three levels} -setup { +test oo-41.4 {TIP 478: classmethod with several inheritance levels} -setup { oo::class create parent } -body { oo::class create ActiveRecord { @@ -4911,6 +4911,41 @@ test oo-41.4 {TIP 478: classmethod with three levels} -setup { } -cleanup { parent destroy } -result {::SubTable called with arguments: foo bar} +test oo-41.5 {TIP 478: classmethod and instances} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + set t [Table new] + $t find 1 2 3 +} -cleanup { + parent destroy +} -result {::ActiveRecord called with arguments: 1 2 3} +test oo-41.6 {TIP 478: classmethod and instances} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + unexport find + } + set t [Table new] + $t find 1 2 3 +} -returnCodes error -cleanup { + parent destroy +} -match glob -result {unknown method "find": must be *} test oo-42.1 {TIP 478: callback generation} -setup { oo::class create parent @@ -5019,6 +5054,61 @@ test oo-42.6 {TIP 478: callback use case} -setup { unset -nocomplain x parent destroy } -result 6 + +test oo-43.1 {TIP 478: class initialisation} -setup { + oo::class create parent +} -body { + oo::class create ::cls { + superclass parent + initialise { + proc foobar {} {return ok} + } + method calls {} { + list [catch foobar msg] $msg \ + [namespace eval [info object namespace [self class]] foobar] + } + } + [cls new] calls +} -cleanup { + parent destroy +} -result {1 {invalid command name "foobar"} ok} + +test oo-44.1 {TIP 478: singleton} -setup { + oo::class create parent +} -body { + oo::singleton create xyz { + superclass parent + } + set x [xyz new] + set y [xyz new] + set z [xyz new] + set code [catch {$x destroy} msg] + set p [xyz new] + lappend code $msg [catch {rename $x ""}] + set q [xyz new] + string map [list $x ONE $q TWO] [list {*}$code $x $y $z $p $q [xyz new]] +} -cleanup { + parent destroy +} -result {1 {object "ONE" has no visible methods} 0 ONE ONE ONE ONE TWO TWO} + +test oo-45.1 {TIP 478: abstract} -setup { + oo::class create parent +} -body { + oo::abstract create xyz { + superclass parent + method foo {} {return 123} + } + oo::class create pqr { + superclass xyz + method bar {} {return 456} + } + set codes [list [catch {xyz new}] [catch {xyz create x}] [catch {xyz createWithNamespace x y}]] + set x [pqr new] + set y [pqr create ::y] + lappend codes [$x foo] [$x bar] $y +} -cleanup { + parent destroy +} -result {1 1 1 123 456 ::y} cleanupTests return -- cgit v0.12 From 4c24e60418bdb662ac652345798230eeff89ce0b Mon Sep 17 00:00:00 2001 From: dkf Date: Thu, 28 Jun 2018 10:40:37 +0000 Subject: Split out TIP 478 tests into their own file. --- tests/oo.test | 264 ------------------------------------------ tests/ooUtil.test | 337 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 337 insertions(+), 264 deletions(-) create mode 100644 tests/ooUtil.test diff --git a/tests/oo.test b/tests/oo.test index 1e694c1..7e0f12e 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4845,270 +4845,6 @@ test oo-40.3 {TIP 500: private and unexport} -setup { } -cleanup { cls destroy } -result {{} {} foo {} foo {}} - -test oo-41.1 {TIP 478: classmethod} -setup { - oo::class create parent -} -body { - oo::class create ActiveRecord { - superclass parent - classmethod find args { - return "[self] called with arguments: $args" - } - } - oo::class create Table { - superclass ActiveRecord - } - Table find foo bar -} -cleanup { - parent destroy -} -result {::Table called with arguments: foo bar} -test oo-41.2 {TIP 478: classmethod in namespace} -setup { - namespace eval ::testns {} -} -body { - namespace eval ::testns { - oo::class create ActiveRecord { - classmethod find args { - return "[self] called with arguments: $args" - } - } - oo::class create Table { - superclass ActiveRecord - } - } - testns::Table find foo bar -} -cleanup { - namespace delete ::testns -} -result {::testns::Table called with arguments: foo bar} -test oo-41.3 {TIP 478: classmethod must not interfere with constructor signatures} -setup { - oo::class create parent -} -body { - oo::class create TestClass { - superclass oo::class parent - self method create {name ignore body} { - next $name $body - } - } - TestClass create okay {} {} -} -cleanup { - parent destroy -} -result {::okay} -test oo-41.4 {TIP 478: classmethod with several inheritance levels} -setup { - oo::class create parent -} -body { - oo::class create ActiveRecord { - superclass parent - classmethod find args { - return "[self] called with arguments: $args" - } - } - oo::class create Table { - superclass ActiveRecord - } - oo::class create SubTable { - superclass Table - } - SubTable find foo bar -} -cleanup { - parent destroy -} -result {::SubTable called with arguments: foo bar} -test oo-41.5 {TIP 478: classmethod and instances} -setup { - oo::class create parent -} -body { - oo::class create ActiveRecord { - superclass parent - classmethod find args { - return "[self] called with arguments: $args" - } - } - oo::class create Table { - superclass ActiveRecord - } - set t [Table new] - $t find 1 2 3 -} -cleanup { - parent destroy -} -result {::ActiveRecord called with arguments: 1 2 3} -test oo-41.6 {TIP 478: classmethod and instances} -setup { - oo::class create parent -} -body { - oo::class create ActiveRecord { - superclass parent - classmethod find args { - return "[self] called with arguments: $args" - } - } - oo::class create Table { - superclass ActiveRecord - unexport find - } - set t [Table new] - $t find 1 2 3 -} -returnCodes error -cleanup { - parent destroy -} -match glob -result {unknown method "find": must be *} - -test oo-42.1 {TIP 478: callback generation} -setup { - oo::class create parent -} -body { - oo::class create c { - superclass parent - method CallMe {} { return ok,[self] } - method makeCall {} { - return [callback CallMe] - } - } - c create ::context - set cb [context makeCall] - {*}$cb -} -cleanup { - parent destroy -} -result {ok,::context} -test oo-42.2 {TIP 478: callback generation} -setup { - oo::class create parent -} -body { - oo::class create c { - superclass parent - method CallMe {a b c} { return ok,[self],$a,$b,$c } - method makeCall {b} { - return [callback CallMe 123 $b] - } - } - c create ::context - set cb [context makeCall "a b c"] - {*}$cb PQR -} -cleanup { - parent destroy -} -result {ok,::context,123,a b c,PQR} -test oo-42.3 {TIP 478: callback generation, alternate name} -setup { - oo::class create parent -} -body { - oo::class create c { - superclass parent - method CallMe {} { return ok,[self] } - method makeCall {} { - return [mymethod CallMe] - } - } - c create ::context - set cb [context makeCall] - {*}$cb -} -cleanup { - parent destroy -} -result {ok,::context} -test oo-42.4 {TIP 478: callback generation, alternate name} -setup { - oo::class create parent -} -body { - oo::class create c { - superclass parent - method CallMe {a b c} { return ok,[self],$a,$b,$c } - method makeCall {b} { - return [mymethod CallMe 123 $b] - } - } - c create ::context - set cb [context makeCall "a b c"] - {*}$cb PQR -} -cleanup { - parent destroy -} -result {ok,::context,123,a b c,PQR} -test oo-42.5 {TIP 478: callbacks and method lifetime} -setup { - oo::class create parent -} -body { - oo::class create c { - superclass parent - method makeCall {b} { - return [callback CallMe 123 $b] - } - } - c create ::context - set cb [context makeCall "a b c"] - set result [list [catch {{*}$cb PQR} msg] $msg] - oo::objdefine context { - method CallMe {a b c} { return ok,[self],$a,$b,$c } - } - lappend result [{*}$cb PQR] -} -cleanup { - parent destroy -} -result {1 {unknown method "CallMe": must be , destroy, eval, makeCall, unknown, variable or varname} {ok,::context,123,a b c,PQR}} -test oo-42.6 {TIP 478: callback use case} -setup { - oo::class create parent - unset -nocomplain x -} -body { - oo::class create c { - superclass parent - variable count - constructor {var} { - set count 0 - upvar 1 $var v - trace add variable v write [callback TraceCallback] - } - method count {} {return $count} - method TraceCallback {name1 name2 op} { - incr count - } - } - set o [c new x] - for {set x 0} {$x < 5} {incr x} {} - $o count -} -cleanup { - unset -nocomplain x - parent destroy -} -result 6 - -test oo-43.1 {TIP 478: class initialisation} -setup { - oo::class create parent -} -body { - oo::class create ::cls { - superclass parent - initialise { - proc foobar {} {return ok} - } - method calls {} { - list [catch foobar msg] $msg \ - [namespace eval [info object namespace [self class]] foobar] - } - } - [cls new] calls -} -cleanup { - parent destroy -} -result {1 {invalid command name "foobar"} ok} - -test oo-44.1 {TIP 478: singleton} -setup { - oo::class create parent -} -body { - oo::singleton create xyz { - superclass parent - } - set x [xyz new] - set y [xyz new] - set z [xyz new] - set code [catch {$x destroy} msg] - set p [xyz new] - lappend code $msg [catch {rename $x ""}] - set q [xyz new] - string map [list $x ONE $q TWO] [list {*}$code $x $y $z $p $q [xyz new]] -} -cleanup { - parent destroy -} -result {1 {object "ONE" has no visible methods} 0 ONE ONE ONE ONE TWO TWO} - -test oo-45.1 {TIP 478: abstract} -setup { - oo::class create parent -} -body { - oo::abstract create xyz { - superclass parent - method foo {} {return 123} - } - oo::class create pqr { - superclass xyz - method bar {} {return 456} - } - set codes [list [catch {xyz new}] [catch {xyz create x}] [catch {xyz createWithNamespace x y}]] - set x [pqr new] - set y [pqr create ::y] - lappend codes [$x foo] [$x bar] $y -} -cleanup { - parent destroy -} -result {1 1 1 123 456 ::y} cleanupTests return diff --git a/tests/ooUtil.test b/tests/ooUtil.test new file mode 100644 index 0000000..4e4dba1 --- /dev/null +++ b/tests/ooUtil.test @@ -0,0 +1,337 @@ +# This file contains a collection of tests for functionality originally +# sourced from the ooutil package in Tcllib. Sourcing this file into Tcl runs +# the tests and generates output for errors. No output means no errors were +# found. +# +# Copyright (c) 2014-2016 Andreas Kupries +# Copyright (c) 2018 Donal K. Fellows +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +package require TclOO 1.0.3 +package require tcltest 2 +if {"::tcltest" in [namespace children]} { + namespace import -force ::tcltest::* +} + +test ooUtil-1.1 {TIP 478: classmethod} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + Table find foo bar +} -cleanup { + parent destroy +} -result {::Table called with arguments: foo bar} +test ooUtil-1.2 {TIP 478: classmethod in namespace} -setup { + namespace eval ::testns {} +} -body { + namespace eval ::testns { + oo::class create ActiveRecord { + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + } + testns::Table find foo bar +} -cleanup { + namespace delete ::testns +} -result {::testns::Table called with arguments: foo bar} +test ooUtil-1.3 {TIP 478: classmethod must not interfere with constructor signatures} -setup { + oo::class create parent +} -body { + oo::class create TestClass { + superclass oo::class parent + self method create {name ignore body} { + next $name $body + } + } + TestClass create okay {} {} +} -cleanup { + parent destroy +} -result {::okay} +test ooUtil-1.4 {TIP 478: classmethod with several inheritance levels} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + oo::class create SubTable { + superclass Table + } + SubTable find foo bar +} -cleanup { + parent destroy +} -result {::SubTable called with arguments: foo bar} +test ooUtil-1.5 {TIP 478: classmethod and instances} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + set t [Table new] + $t find 1 2 3 +} -cleanup { + parent destroy +} -result {::ActiveRecord called with arguments: 1 2 3} +test ooUtil-1.6 {TIP 478: classmethod and instances} -setup { + oo::class create parent +} -body { + oo::class create ActiveRecord { + superclass parent + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + unexport find + } + set t [Table new] + $t find 1 2 3 +} -returnCodes error -cleanup { + parent destroy +} -match glob -result {unknown method "find": must be *} + +test ooUtil-2.1 {TIP 478: callback generation} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {} { return ok,[self] } + method makeCall {} { + return [callback CallMe] + } + } + c create ::context + set cb [context makeCall] + {*}$cb +} -cleanup { + parent destroy +} -result {ok,::context} +test ooUtil-2.2 {TIP 478: callback generation} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {a b c} { return ok,[self],$a,$b,$c } + method makeCall {b} { + return [callback CallMe 123 $b] + } + } + c create ::context + set cb [context makeCall "a b c"] + {*}$cb PQR +} -cleanup { + parent destroy +} -result {ok,::context,123,a b c,PQR} +test ooUtil-2.3 {TIP 478: callback generation, alternate name} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {} { return ok,[self] } + method makeCall {} { + return [mymethod CallMe] + } + } + c create ::context + set cb [context makeCall] + {*}$cb +} -cleanup { + parent destroy +} -result {ok,::context} +test ooUtil-2.4 {TIP 478: callback generation, alternate name} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method CallMe {a b c} { return ok,[self],$a,$b,$c } + method makeCall {b} { + return [mymethod CallMe 123 $b] + } + } + c create ::context + set cb [context makeCall "a b c"] + {*}$cb PQR +} -cleanup { + parent destroy +} -result {ok,::context,123,a b c,PQR} +test ooUtil-2.5 {TIP 478: callbacks and method lifetime} -setup { + oo::class create parent +} -body { + oo::class create c { + superclass parent + method makeCall {b} { + return [callback CallMe 123 $b] + } + } + c create ::context + set cb [context makeCall "a b c"] + set result [list [catch {{*}$cb PQR} msg] $msg] + oo::objdefine context { + method CallMe {a b c} { return ok,[self],$a,$b,$c } + } + lappend result [{*}$cb PQR] +} -cleanup { + parent destroy +} -result {1 {unknown method "CallMe": must be , destroy, eval, makeCall, unknown, variable or varname} {ok,::context,123,a b c,PQR}} +test ooUtil-2.6 {TIP 478: callback use case} -setup { + oo::class create parent + unset -nocomplain x +} -body { + oo::class create c { + superclass parent + variable count + constructor {var} { + set count 0 + upvar 1 $var v + trace add variable v write [callback TraceCallback] + } + method count {} {return $count} + method TraceCallback {name1 name2 op} { + incr count + } + } + set o [c new x] + for {set x 0} {$x < 5} {incr x} {} + $o count +} -cleanup { + unset -nocomplain x + parent destroy +} -result 6 + +test ooUtil-3.1 {TIP 478: class initialisation} -setup { + oo::class create parent + catch {rename ::foobar-3.1 {}} +} -body { + oo::class create ::cls { + superclass parent + initialise { + proc foobar-3.1 {} {return ok} + } + method calls {} { + list [catch foobar-3.1 msg] $msg \ + [namespace eval [info object namespace [self class]] foobar-3.1] + } + } + [cls new] calls +} -cleanup { + parent destroy +} -result {1 {invalid command name "foobar-3.1"} ok} +test ooUtil-3.2 {TIP 478: class variables} -setup { + oo::class create parent + catch {rename ::foobar-3.1 {}} +} -body { + oo::class create ::cls { + superclass parent + initialise { + variable x 123 + } + method call {} { + classvariable x + incr x + } + } + cls create a + cls create b + cls create c + list [a call] [b call] [c call] [a call] [b call] [c call] +} -cleanup { + parent destroy +} -result {124 125 126 127 128 129} + +test ooUtil-4.1 {TIP 478: singleton} -setup { + oo::class create parent +} -body { + oo::singleton create xyz { + superclass parent + } + set x [xyz new] + set y [xyz new] + set z [xyz new] + set code [catch {$x destroy} msg] + set p [xyz new] + lappend code $msg [catch {rename $x ""}] + set q [xyz new] + string map [list $x ONE $q TWO] [list {*}$code $x $y $z $p $q [xyz new]] +} -cleanup { + parent destroy +} -result {1 {object "ONE" has no visible methods} 0 ONE ONE ONE ONE TWO TWO} + +test ooUtil-5.1 {TIP 478: abstract} -setup { + oo::class create parent +} -body { + oo::abstract create xyz { + superclass parent + method foo {} {return 123} + } + oo::class create pqr { + superclass xyz + method bar {} {return 456} + } + set codes [list [catch {xyz new}] [catch {xyz create x}] [catch {xyz createWithNamespace x y}]] + set x [pqr new] + set y [pqr create ::y] + lappend codes [$x foo] [$x bar] $y +} -cleanup { + parent destroy +} -result {1 1 1 123 456 ::y} + +# Tests that verify issues detected with the tcllib version of the code +test ooUtil-tcllib-ticket-b3577ed586 {test scoping of delegation in oo::class.Delegate } -setup { + oo::class create animal {} + namespace eval ::ooutiltest { + oo::class create pet { superclass animal } + } +} -body { + namespace eval ::ooutiltest { + oo::class create dog { superclass pet } + } +} -cleanup { + namespace delete ooutiltest + rename animal {} +} -result {::ooutiltest::dog} +test ooUtil-tcllib-ticket-fe7a0e0a3a {classmethod must not interfere with constructor signatures} -setup { + oo::class create TestClass { + superclass oo::class + self method create {name ignore body} { + next $name $body + } + } +} -body { + TestClass create okay {} {} +} -cleanup { + rename TestClass {} +} -result {::okay} + +cleanupTests +return + +# Local Variables: +# fill-column: 78 +# mode: tcl +# End: -- cgit v0.12 From 3f8c7d5d407e778604b2238e06ced08bf1402eca Mon Sep 17 00:00:00 2001 From: dkf Date: Fri, 29 Jun 2018 07:15:06 +0000 Subject: More test cases. More fixes. --- generic/tclOOScript.h | 24 ++++++++++--- tests/ooUtil.test | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 4 deletions(-) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 22f5e56..6dd105e 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -33,8 +33,15 @@ static const char *tclOOSetupScript = " # Get a reference to the class's namespace\n" " set ns [info object namespace [uplevel 1 {self class}]]\n" " # Double up the list of variable names\n" -" set vs [list $name $name]\n" -" foreach v $args {lappend vs $v $v}\n" +" foreach v [list $name {*}$args] {\n" +" if {[string match *(*) $v]} {\n" +" return -code error [string cat {bad variable name \"} $v {\": can\'t create a scalar variable that looks like an array element}]\n" +" }\n" +" if {[string match *::* $v]} {\n" +" return -code error [string cat {bad variable name \"} $v {\": can\'t create a local variable with a namespace separator in it}]\n" +" }\n" +" lappend vs $v $v\n" +" }\n" " # Lastly, link the caller's local variables to the class's variables\n" " tailcall namespace upvar $ns {*}$vs\n" "}\n" @@ -48,12 +55,21 @@ static const char *tclOOSetupScript = " lassign $link src\n" " set dst $src\n" " }\n" -" interp alias {} ${ns}::$src {} ${ns}::my $dst\n" +" if {![string match ::* $src]} {\n" +" set src [string cat $ns :: $src]\n" +" }\n" +" interp alias {} $src {} ${ns}::my $dst\n" +" trace add command ${ns}::my delete [list ::oo::Helpers::Unlink $src]\n" " }\n" " return\n" "}\n" +"::proc ::oo::Helpers::Unlink {cmd args} {\n" +" if {[namespace which $cmd] ne {}} {\n" +" rename $cmd {}\n" +" }\n" +"}\n" -"proc ::oo::DelegateName {class} {\n" +"::proc ::oo::DelegateName {class} {\n" " string cat [info object namespace $class] {:: oo ::delegate}\n" "}\n" diff --git a/tests/ooUtil.test b/tests/ooUtil.test index 4e4dba1..77fa175 100644 --- a/tests/ooUtil.test +++ b/tests/ooUtil.test @@ -301,6 +301,104 @@ test ooUtil-5.1 {TIP 478: abstract} -setup { parent destroy } -result {1 1 1 123 456 ::y} +test ooUtil-6.1 {TIP 478: classvarable} -setup { + oo::class create parent +} -body { + oo::class create xyz { + superclass parent + initialise { + variable x 1 y 2 + } + method a {} { + classvariable x + incr x + } + method b {} { + classvariable y + incr y + } + method c {} { + classvariable x y + list $x $y + } + } + set p [xyz new] + set q [xyz new] + set result [list [$p c] [$q c]] + $p a + $q b + lappend result [[xyz new] c] +} -cleanup { + parent destroy +} -result {{1 2} {1 2} {2 3}} +test ooUtil-6.2 {TIP 478: classvarable error case} -setup { + oo::class create parent +} -body { + oo::class create xyz { + superclass parent + method a {} { + classvariable x(1) + incr x(1) + } + } + set p [xyz new] + set q [xyz new] + list [$p a] [$q a] +} -returnCodes error -cleanup { + parent destroy +} -result {bad variable name "x(1)": can't create a scalar variable that looks like an array element} +test ooUtil-6.3 {TIP 478: classvarable error case} -setup { + oo::class create parent +} -body { + oo::class create xyz { + superclass parent + method a {} { + classvariable ::x + incr x + } + } + set p [xyz new] + set q [xyz new] + list [$p a] [$q a] +} -returnCodes error -cleanup { + parent destroy +} -result {bad variable name "::x": can't create a local variable with a namespace separator in it} + +test ooUtil-7.1 {TIP 478: link calling pattern} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + method foo {} {return "in foo of [self]"} + method Bar {} {return "in bar of [self]"} + method Grill {} {return "in grill of [self]"} + export eval + constructor {} { + link foo + link {bar Bar} {grill Grill} + } + } + cls create o + o eval {list [foo] [bar] [grill]} +} -cleanup { + parent destroy +} -result {{in foo of ::o} {in bar of ::o} {in grill of ::o}} +test ooUtil-7.2 {TIP 478: link removed when [my] disappears} -setup { + oo::class create parent +} -body { + oo::class create cls { + superclass parent + method foo {} {return "in foo of [self]"} + constructor {cmd} { + link [list ::$cmd foo] + } + } + cls create o pqr + list [o foo] [pqr] [rename [info object namespace o]::my {}] [catch pqr msg] $msg +} -cleanup { + parent destroy +} -result {{in foo of ::o} {in foo of ::o} {} 1 {invalid command name "pqr"}} + # Tests that verify issues detected with the tcllib version of the code test ooUtil-tcllib-ticket-b3577ed586 {test scoping of delegation in oo::class.Delegate } -setup { oo::class create animal {} -- cgit v0.12 From 0978bd50ce03a7d56c569156c606be4533699a31 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 30 Jun 2018 05:13:39 +0000 Subject: Started to write documentation --- doc/callback.n | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 doc/callback.n diff --git a/doc/callback.n b/doc/callback.n new file mode 100644 index 0000000..8244f07 --- /dev/null +++ b/doc/callback.n @@ -0,0 +1,86 @@ +'\" +'\" Copyright (c) 2018 Donal K. Fellows +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH callback n 0.1 TclOO "TclOO Commands" +.so man.macros +.BS +'\" Note: do not modify the .SH NAME line immediately below! +.SH NAME +callback, mymethod \- generate callbacks to methods +.SH SYNOPSIS +.nf +package require TclOO + +\fBcallback\fR \fImethodName\fR ?\fIarg ...\fR? +\fBmymethod\fR \fImethodName\fR ?\fIarg ...\fR? +.fi +.BE +.SH DESCRIPTION +The \fBcallback\fR command, also called \fBmymethod\fR for compatibility with +the ooutil package of Tcllib, and which should only be used from within the +context of a call to a method (i.e. inside a method, constructor or destructor +body) is used to generate a script fragment that will invoke the method, +\fImethodName\fR, on the current object (as reported by \fBself\fR) when +executed. Any additional arguments provided will be provided as leading +arguments to the callback. The resulting script fragment shall be a proper +list. +.PP +Note that it is up to the caller to ensure that the current object is able to +handle the call of \fImethodName\fR; this command does not check that. +\fImethodName\fR may refer to any exported or unexported method, but may not +refer to a private method as those can only be invoked directly from within +methods. If there is no such method present at the point when the callback is +invoked, the standard \fBunknown\fR method handler will be called. +.SH EXAMPLE +This is a simple echo server class. The \fBcallback\fR command is used in two +places, to arrange for the incoming socket connections to be handled by the +\fIAccept\fR method, and to arrange for the incoming bytes on those +connections to be handled by the \fIReceive\fR method. +.PP +.CS +oo::class create EchoServer { + variable server clients + constructor {port} { + set server [socket -server [\fBcallback\fR Accept] $port] + set clients {} + } + destructor { + chan close $server + foreach client [dict keys $clients] { + chan close $client + } + } + + method Accept {channel clientAddress clientPort} { + dict set clients $channel [dict create \e + address $clientAddress port $clientPort] + chan event $channel readable [\fBcallback\fR Receive $channel] + } + method Receive {channel} { + if {[chan gets $channel line] >= 0} { + my echo $channel $line + } else { + chan close $channel + dict unset clients $channel + } + } + + method echo {channel line} { + dict with clients $channel { + chan puts $channel \e + [format {[%s:%d] %s} $address $port $line] + } + } +} +.CE +.SH "SEE ALSO" +chan(n), fileevent(n), my(n), self(n), socket(n), trace(n) +.SH KEYWORDS +callback, object +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 78 +.\" End: -- cgit v0.12 From bffb982059c34bbd6c4bcb6074af928f28ceeed4 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 30 Jun 2018 13:44:25 +0000 Subject: More docs --- doc/callback.n | 18 +++++++------ doc/classvariable.n | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 doc/classvariable.n diff --git a/doc/callback.n b/doc/callback.n index 8244f07..a05eb9c 100644 --- a/doc/callback.n +++ b/doc/callback.n @@ -19,14 +19,16 @@ package require TclOO .fi .BE .SH DESCRIPTION -The \fBcallback\fR command, also called \fBmymethod\fR for compatibility with -the ooutil package of Tcllib, and which should only be used from within the -context of a call to a method (i.e. inside a method, constructor or destructor -body) is used to generate a script fragment that will invoke the method, -\fImethodName\fR, on the current object (as reported by \fBself\fR) when -executed. Any additional arguments provided will be provided as leading -arguments to the callback. The resulting script fragment shall be a proper -list. +The \fBcallback\fR command, +'\" Based on notes in the tcllib docs, we know the provenance of mymethod +also called \fBmymethod\fR for compatibility with the ooutil and snit packages +of Tcllib, +and which should only be used from within the context of a call to a method +(i.e. inside a method, constructor or destructor body) is used to generate a +script fragment that will invoke the method, \fImethodName\fR, on the current +object (as reported by \fBself\fR) when executed. Any additional arguments +provided will be provided as leading arguments to the callback. The resulting +script fragment shall be a proper list. .PP Note that it is up to the caller to ensure that the current object is able to handle the call of \fImethodName\fR; this command does not check that. diff --git a/doc/classvariable.n b/doc/classvariable.n new file mode 100644 index 0000000..1edca3e --- /dev/null +++ b/doc/classvariable.n @@ -0,0 +1,78 @@ +'\" +'\" Copyright (c) 2011-2015 Andreas Kupries +'\" Copyright (c) 2018 Donal K. Fellows +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH classvariable n 0.1 TclOO "TclOO Commands" +.so man.macros +.BS +'\" Note: do not modify the .SH NAME line immediately below! +.SH NAME +classvariable \- create link from local variable to variable in class +.SH SYNOPSIS +.nf +package require TclOO + +\fBclassvariable\fR \fIvariableName\fR ?\fI...\fR? +.fi +.BE +.SH DESCRIPTION +The \fBclassvariable\fR command is available within methods. It takes a series +of one or more variable names and makes them available in the method's scope; +those variable names must not be qualified and must not refer to array +elements. The originating scope for the variables is the namespace of the +class that the method was defined by. In other words, the referenced variables +are shared between all instances of that class. +.PP +Note: This command is equivalent to the command \fBtypevariable\fR provided by +the snit package in tcllib for approximately the same purpose. If used in a +method defined directly on a class instance (e.g., through the +\fBoo::objdefine\fR \fBmethod\fR definition) this is very much like just +using: +.PP +.CS +namespace upvar [namespace current] $var $var +.CE +.PP +for each variable listed to \fBclassvariable\fR. +.SH EXAMPLE +This class counts how many instances of it have been made. +.PP +.CS +oo::class create Counted { + initialise { + variable count 0 + } + + variable number + constructor {} { + \fBclassvariable\fR count + set number [incr count] + } + + method report {} { + \fBclassvariable\fR count + puts "This is instance $number of $count" + } +} + +set a [Counted new] +set b [Counted new] +$a report + \fI\(-> This is instance 1 of 2\fR +set c [Counted new] +$b report + \fI\(-> This is instance 2 of 3\fR +$c report + \fI\(-> This is instance 3 of 3\fR +.CE +.SH "SEE ALSO" +global(n), namespace(n), oo::class(n), oo::define(n), upvar(n), variable(n) +.SH KEYWORDS +class, class variable, variable +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 78 +.\" End: -- cgit v0.12 From 1d1e95e7793597eb517bdeffc450474e6616ef92 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 30 Jun 2018 18:30:53 +0000 Subject: More docs --- doc/link.n | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 doc/link.n diff --git a/doc/link.n b/doc/link.n new file mode 100644 index 0000000..e7c28d7 --- /dev/null +++ b/doc/link.n @@ -0,0 +1,124 @@ +'\" +'\" Copyright (c) 2011-2015 Andreas Kupries +'\" Copyright (c) 2018 Donal K. Fellows +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH link n 0.1 TclOO "TclOO Commands" +.so man.macros +.BS +'\" Note: do not modify the .SH NAME line immediately below! +.SH NAME +link \- create link from command to method of object +.SH SYNOPSIS +.nf +package require TclOO + +\fBlink\fR \fImethodName\fR ?\fI...\fR? +\fBlink\fR \fB{\fIcommandName methodName\fB}\fR ?\fI...\fR? +.fi +.BE +.SH DESCRIPTION +The \fBlink\fR command is available within methods. It takes a series of one +or more method names (\fImethodName ...\fR) and/or pairs of command- and +method-name (\fB{\fIcommandName methodName\fB}\fR) and makes the named methods +available as commands without requiring the explicit use of the name of the +object or the \fBmy\fR command. The method does not need to exist at the time +that the link is made; if the link command is invoked when the method does not +exist, the standard \fBunknown\fR method handling system is used. +.PP +The command name under which the method becomes available defaults to the +method name, except where explicitly specified through an alias/method pair. +Formally, every argument must be a list; if the list has two elements, the +first element is the name of the command to create and the second element is +the name of the method of the current object to which the command links; +otherwise, the name of the command and the name of the method are the same +string (the first element of the list). +.PP +If the name of the command is not a fully-qualified command name, it will be +resolved with respect to the current namespace (i.e., the object namespace). +.SH EXAMPLES +This demonstrates linking a single method in various ways. First it makes a +simple link, then a renamed link, then an external link. Note that the method +itself is unexported, but that it can still be called directly from outside +the class. +.PP +.CS +oo::class create ABC { + method Foo {} { + puts "This is Foo in [self]" + } + + constructor {} { + \fBlink\fR Foo + # The method foo is now directly accessible as foo here + \fBlink\fR {bar Foo} + # The method foo is now directly accessible as bar + \fBlink\fR {::ExternalCall Foo} + # The method foo is now directly accessible in the global + # namespace as ExternalCall + } + + method grill {} { + puts "Step 1:" + Foo + puts "Step 2:" + bar + } +} + +ABC create abc +abc grill + \fI\(-> Step 1:\fR + \fI\(-> This is foo in ::abc\fR + \fI\(-> Step 2:\fR + \fI\(-> This is foo in ::abc\fR +# Direct access via the linked command +puts "Step 3:"; ExternalCall + \fI\(-> Step 3:\fR + \fI\(-> This is foo in ::abc\fR +.CE +.PP +This example shows that multiple linked commands can be made in a call to +\fBlink\fR, and that they can handle arguments. +.PP +.CS +oo::class create Ex { + constructor {} { + \fBlink\fR a b c + # The methods a, b, and c (defined below) are all now + # directly acessible within methods under their own names. + } + + method a {} { + puts "This is a" + } + method b {x} { + puts "This is b($x)" + } + method c {y z} { + puts "This is c($y,$z)" + } + + method call {p q r} { + a + b $p + c $q $r + } +} + +set o [Ex new] +$o 3 5 7 + \fI\(-> This is a\fR + \fI\(-> This is b(3)\fR + \fI\(-> This is c(5,7)\fR +.CE +.SH "SEE ALSO" +interp(n), my(n), oo::class(n), oo::define(n) +.SH KEYWORDS +command, method, object +.\" Local Variables: +.\" mode: nroff +.\" fill-column: 78 +.\" End: -- cgit v0.12 From 5c7ba37901819efd8c30dee373dada97eafdce04 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 30 Jun 2018 21:36:01 +0000 Subject: More docs --- doc/abstract.n | 75 ++++++++++++++++++++++++++++++++++++++++++ doc/callback.n | 2 +- doc/classvariable.n | 2 +- doc/define.n | 7 ++++ doc/link.n | 2 +- doc/singleton.n | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 doc/abstract.n create mode 100644 doc/singleton.n diff --git a/doc/abstract.n b/doc/abstract.n new file mode 100644 index 0000000..c11202b --- /dev/null +++ b/doc/abstract.n @@ -0,0 +1,75 @@ +'\" +'\" Copyright (c) 2018 Donal K. Fellows +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH abstract n 0.3 TclOO "TclOO Commands" +.so man.macros +.BS +'\" Note: do not modify the .SH NAME line immediately below! +.SH NAME +oo::abstract \- a class that does not allow direct instances of itself +.SH SYNOPSIS +.nf +package require TclOO + +\fBoo::abstract\fI method \fR?\fIarg ...\fR? +.fi +.SH "CLASS HIERARCHY" +.nf +\fBoo::object\fR + \(-> \fBoo::class\fR + \(-> \fBoo::abstract\fR +.fi +.BE +.SH DESCRIPTION +Abstract classes are classes that can contain definitions, but which cannot be +directly manufactured; they are intended to only ever be inherited from and +instantiated indirectly. The characteristic methods of \fBoo::class\fR +(\fBcreate\fR and \fBnew\fR) are not exported by an instance of +\fBoo::abstract\fR. +.PP +Note that \fBoo::abstract\fR is not itself an instance of \fBoo::abstract\fR. +.SS CONSTRUCTOR +The \fBoo::abstract\fR class does not define an explicit constructor; this +means that it is effectively the same as the constructor of the +\fBoo::class\fR class. +.SS DESTRUCTOR +The \fBoo::abstract\fR class does not define an explicit destructor. +.SS "EXPORTED METHODS" +The \fBoo::abstract\fR class defines no new exported methods. +.SS "NON-EXPORTED METHODS" +The \fBoo::abstract\fR class explicitly states that \fBcreate\fR, +\fBcreateWithNamespace\fR, and \fBnew\fR are unexported. +.SH EXAMPLES +.PP +This example defines a simple class hierarchy and creates a new instance of +it. It then invokes a method of the object before destroying the hierarchy and +showing that the destruction is transitive. +.PP +.CS +\fBoo::abstract\fR create fruit { + method eat {} { + puts "yummy!" + } +} +oo::class create banana { + superclass fruit + method peel {} { + puts "skin now off" + } +} +set b [banana \fBnew\fR] +$b peel \fI\(-> prints 'skin now off'\fR +$b eat \fI\(-> prints 'yummy!'\fR +set f [fruit new] \fI\(-> error 'unknown method "new"...'\fR +.CE +.SH "SEE ALSO" +oo::define(n), oo::object(n) +.SH KEYWORDS +abstract class, class, metaclass, object +.\" Local variables: +.\" mode: nroff +.\" fill-column: 78 +.\" End: diff --git a/doc/callback.n b/doc/callback.n index a05eb9c..95838a9 100644 --- a/doc/callback.n +++ b/doc/callback.n @@ -4,7 +4,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -.TH callback n 0.1 TclOO "TclOO Commands" +.TH callback n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! diff --git a/doc/classvariable.n b/doc/classvariable.n index 1edca3e..0798bb2 100644 --- a/doc/classvariable.n +++ b/doc/classvariable.n @@ -5,7 +5,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -.TH classvariable n 0.1 TclOO "TclOO Commands" +.TH classvariable n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! diff --git a/doc/define.n b/doc/define.n index b489e5f..c0c90d1 100644 --- a/doc/define.n +++ b/doc/define.n @@ -110,6 +110,13 @@ below), this command creates private forwarded methods. .VE TIP500 .RE .TP +\fBinitialise\fI script\fR +.VS TIP478 +This evaluates \fIscript\fR in a context which supports local variables and +where the current namespace is the instance namespace of the class object +itself. This is useful for setting up, e.g., class-scoped variables. +.VE TIP478 +.TP \fBmethod\fI name argList bodyScript\fR . This creates or updates a method that is implemented as a procedure-like diff --git a/doc/link.n b/doc/link.n index e7c28d7..7219342 100644 --- a/doc/link.n +++ b/doc/link.n @@ -5,7 +5,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -.TH link n 0.1 TclOO "TclOO Commands" +.TH link n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! diff --git a/doc/singleton.n b/doc/singleton.n new file mode 100644 index 0000000..6319abe --- /dev/null +++ b/doc/singleton.n @@ -0,0 +1,93 @@ +'\" +'\" Copyright (c) 2018 Donal K. Fellows +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH singleton n 0.3 TclOO "TclOO Commands" +.so man.macros +.BS +'\" Note: do not modify the .SH NAME line immediately below! +.SH NAME +oo::singleton \- a class that does only allows one instance of itself +.SH SYNOPSIS +.nf +package require TclOO + +\fBoo::singleton\fI method \fR?\fIarg ...\fR? +.fi +.SH "CLASS HIERARCHY" +.nf +\fBoo::object\fR + \(-> \fBoo::class\fR + \(-> \fBoo::singleton\fR +.fi +.BE +.SH DESCRIPTION +Singleton classes are classes that only permit at most one instance of +themselves to exist. They unexport the \fBcreate\fR and +\fBcreateWithNamespace\fR methods entirely, and override the \fBnew\fR method +so that it only makes a new instance if there is no existing instance. It is +not recommended to inherit from a singleton class; singleton-ness is \fInot\fR +inherited. It is not recommended that a singleton class's constructor take any +arguments. +.PP +Instances have their\fB destroy\fR method (from \fBoo::object\fR) unexported +in order to discourage destruction of the object, but destruction remains +possible if strictly necessary (e.g., by destroying the class or using +\fBrename\fR to delete it). +.SS CONSTRUCTOR +The \fBoo::singleton\fR class does not define an explicit constructor; this +means that it is effectively the same as the constructor of the +\fBoo::class\fR class. +.SS DESTRUCTOR +The \fBoo::singleton\fR class does not define an explicit destructor. +.SS "EXPORTED METHODS" +.TP +\fIcls \fBnew \fR?\fIarg ...\fR? +. +This returns the current instance of the singleton class, if one exists, and +creates a new instance only if there is no existing instance. The additional +arguments, \fIarg ...\fR, are only used if a new instance is actually +manufactured; that construction is via the \fBoo::class\fR class's \fBnew\fR +method. +.RS +.PP +This is an override of the behaviour of a superclass's method. +.RE +.SS "NON-EXPORTED METHODS" +The \fBoo::singleton\fR class explicitly states that \fBcreate\fR and +\fBcreateWithNamespace\fR are unexported. +.SH EXAMPLE +.PP +This example demonstrates that there is only one instance even though the +\fBnew\fR method is called three times. +.PP +.CS +\fBoo::singleton\fR create Highlander { + method say {} { + puts "there can be only one" + } +} + +set h1 [Highlander new] +set h2 [Highlander new] +if {$h1 eq $h2} { + puts "equal objects" \fI\(-> prints "equal objects"\fR +} +set h3 [Highlander new] +if {$h1 eq $h3} { + puts "equal objects" \fI\(-> prints "equal objects"\fR +} +.CE +.PP +Note that the name of the instance of the singleton is not guaranteed to be +anything in particular. +.SH "SEE ALSO" +oo::class(n) +.SH KEYWORDS +class, metaclass, object, single instance +.\" Local variables: +.\" mode: nroff +.\" fill-column: 78 +.\" End: -- cgit v0.12 From d11660acfec5e51e088b6e9661d3b6b8e0b1988a Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 1 Jul 2018 16:39:11 +0000 Subject: Create a special command, [ :my:class], (in each instance namespace) that allows objects to delegate methods to their class. --- generic/tclOO.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ generic/tclOOInt.h | 2 ++ generic/tclOOScript.h | 2 +- tests/ooUtil.test | 25 +++++++++++++++++++++- unix/Makefile.in | 7 +++++++ 5 files changed, 92 insertions(+), 2 deletions(-) diff --git a/generic/tclOO.c b/generic/tclOO.c index 7f609b2..8229dc1 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -102,6 +102,13 @@ static int PrivateObjectCmd(ClientData clientData, static int PrivateNRObjectCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); +static int MyClassObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *const *objv); +static int MyClassNRObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *const *objv); +static void MyClassDeletedCmd(ClientData clientData); /* * Methods in the oo::object and oo::class classes. First, we define a helper @@ -747,6 +754,9 @@ AllocObject( oPtr->myCommand = TclNRCreateCommandInNs(interp, "my", oPtr->namespacePtr, PrivateObjectCmd, PrivateNRObjectCmd, oPtr, MyDeleted); + oPtr->myclassCommand = TclNRCreateCommandInNs(interp, " :my:class", + oPtr->namespacePtr, MyClassObjCmd, MyClassNRObjCmd, oPtr, + MyClassDeletedCmd); return oPtr; } @@ -1165,6 +1175,9 @@ ObjectNamespaceDeleted( Tcl_DeleteCommandFromToken(oPtr->fPtr->interp, oPtr->command); } + if (oPtr->myclassCommand) { + Tcl_DeleteCommandFromToken(oPtr->fPtr->interp, oPtr->myclassCommand); + } if (oPtr->myCommand) { Tcl_DeleteCommandFromToken(oPtr->fPtr->interp, oPtr->myCommand); } @@ -2488,6 +2501,51 @@ TclOOInvokeObject( /* * ---------------------------------------------------------------------- * + * MyClassObjCmd, MyClassNRObjCmd, MyClassDeletedCmd -- + * + * Special trap door to allow an object to delegate simply to its class. + * + * ---------------------------------------------------------------------- + */ + +static int +MyClassObjCmd( + ClientData clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *const *objv) +{ + return Tcl_NRCallObjProc(interp, MyClassNRObjCmd, clientData, objc, objv); +} + +static int +MyClassNRObjCmd( + ClientData clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *const *objv) +{ + Object *oPtr = clientData; + + if (objc < 2) { + Tcl_WrongNumArgs(interp, 1, objv, "methodName ?arg ...?"); + return TCL_ERROR; + } + return TclOOObjectCmdCore(oPtr->selfCls->thisPtr, interp, objc, objv, 0, + NULL); +} + +static void +MyClassDeletedCmd( + ClientData clientData) +{ + Object *oPtr = clientData; + oPtr->myclassCommand = NULL; +} + +/* + * ---------------------------------------------------------------------- + * * TclOOObjectCmdCore, FinalizeObjectCall -- * * Main function for object invocations. Does call chain creation, diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index a43ab76..ce4ea0d 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -209,6 +209,8 @@ typedef struct Object { PrivateVariableList privateVariables; /* Configurations for the variable resolver * used inside methods. */ + Tcl_Command myclassCommand; /* Reference to this object's class dispatcher + * command. */ } Object; #define OBJECT_DELETED 1 /* Flag to say that an object has been diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 6dd105e..237bff5 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -85,7 +85,7 @@ static const char *tclOOSetupScript = " ::oo::define [::oo::DelegateName $cls] method $name $args $body\n" " }\n" " # Make the connection by forwarding\n" -" tailcall forward $name [info object namespace $cls]::my $name\n" +" tailcall forward $name { :my:class} $name\n" "}\n" "proc ::oo::MixinClassDelegates {class} {\n" diff --git a/tests/ooUtil.test b/tests/ooUtil.test index 77fa175..28ab9c7 100644 --- a/tests/ooUtil.test +++ b/tests/ooUtil.test @@ -96,7 +96,7 @@ test ooUtil-1.5 {TIP 478: classmethod and instances} -setup { $t find 1 2 3 } -cleanup { parent destroy -} -result {::ActiveRecord called with arguments: 1 2 3} +} -result {::Table called with arguments: 1 2 3} test ooUtil-1.6 {TIP 478: classmethod and instances} -setup { oo::class create parent } -body { @@ -115,6 +115,29 @@ test ooUtil-1.6 {TIP 478: classmethod and instances} -setup { } -returnCodes error -cleanup { parent destroy } -match glob -result {unknown method "find": must be *} +test ooUtil-1.7 {} -setup { + oo::class create parent +} -body { + oo::class create Foo { + superclass parent + classmethod bar {} { + puts "This is in the class; self is [self]" + my meee + } + classmethod meee {} { + puts "This is meee" + } + } + oo::class create Grill { + superclass Foo + classmethod meee {} { + puts "This is meee 2" + } + } + list [Foo bar] [Grill bar] [[Foo new] bar] [[Grill new] bar] +} -cleanup { + parent destroy +} -result {{} {} {} {}} -output "This is in the class; self is ::Foo\nThis is meee\nThis is in the class; self is ::Grill\nThis is meee 2\nThis is in the class; self is ::Foo\nThis is meee\nThis is in the class; self is ::Grill\nThis is meee 2\n" test ooUtil-2.1 {TIP 478: callback generation} -setup { oo::class create parent diff --git a/unix/Makefile.in b/unix/Makefile.in index 9aa67fb..e4d77e6 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -259,6 +259,7 @@ INSTALL_TZDATA = @INSTALL_TZDATA@ #-------------------------------------------------------------------------- GDB = gdb +LLDB = lldb TRACE = strace TRACE_OPTS = VALGRIND = valgrind @@ -730,6 +731,12 @@ gdb-test: ${TCLTEST_EXE} $(GDB) ./${TCLTEST_EXE} --command=gdb.run rm gdb.run +lldb-test: ${TCLTEST_EXE} + @echo "settings set target.env-vars @LD_LIBRARY_PATH_VAR@=`pwd`:$${@LD_LIBRARY_PATH_VAR@}" > lldb.run + @echo "settings set target.env-vars TCL_LIBRARY=${TCL_BUILDTIME_LIBRARY}" >> lldb.run + $(LLDB) --source lldb.run ./${TCLTEST_EXE} -- $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) -singleproc 1 + rm lldb.run + # Useful target to launch a built tcltest with the proper path,... runtest: ${TCLTEST_EXE} $(SHELL_ENV) ./${TCLTEST_EXE} -- cgit v0.12 From 414bcee273fa2ac3fbc1e329f65d1ae7396a22a4 Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 2 Jul 2018 07:44:09 +0000 Subject: Documentation for [classmethod] --- doc/define.n | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/doc/define.n b/doc/define.n index c0c90d1..099e59f 100644 --- a/doc/define.n +++ b/doc/define.n @@ -39,6 +39,27 @@ used as the \fIdefScript\fR argument. The following commands are supported in the \fIdefScript\fR for \fBoo::define\fR, each of which may also be used in the \fIsubcommand\fR form: .TP +\fBclassmethod\fI name\fR ?\fIargList bodyScrip\fR? +.VS TIP478 +This creates a class method, or (if \fIargList\fR and \fIbodyScript\fR are +omitted) promotes an existing method on the class object to be a class +method. The \fIname\fR, \fIargList\fR and \fIbodyScript\fR arguments are as in +the \fBmethod\fR definition, below. +.RS +.PP +Class methods can be called on either the class itself or on the instances of +that class. When they are called, the current object (see the \fBself\R and +\fBmy\fR commands) is the class on which they are called or the class of the +instance on which they are called, depending on whether they are called on the +class or an instance of the class, respectively. If called on a subclass or +instance of the subclass, the current object is the subclass. +.PP +In a private definition context, the methods as invoked on classes are +\fInot\fR private, but the methods as invoked on instances of classes are +private. +.RE +.VE TIP478 +.TP \fBconstructor\fI argList bodyScript\fR . This creates or updates the constructor for a class. The formal arguments to @@ -503,6 +524,84 @@ oo::class create B { inst m1 \fI\(-> prints "red brick"\fR inst m2 \fI\(-> prints "blue brick"\fR .CE +.PP +.VS TIP478 +This example shows how to create and use class variables. It is a class that +counts how many instances of itself have been made. +.PP +.CS +oo::class create Counted +\fBoo::define\fR Counted { + \fBinitialise\fR { + variable count 0 + } + + \fBvariable\fR number + \fBconstructor\fR {} { + classvariable count + set number [incr count] + } + + \fBmethod\fR report {} { + classvariable count + puts "This is instance $number of $count" + } +} + +set a [Counted new] +set b [Counted new] +$a report + \fI\(-> This is instance 1 of 2\fR +set c [Counted new] +$b report + \fI\(-> This is instance 2 of 3\fR +$c report + \fI\(-> This is instance 3 of 3\fR +.CE +.PP +This example demonstrates how to use class methods. (Note that the constructor +for \fBoo::class\fR calls \fBoo::define\fR on the class.) +.PP +.CS +oo::class create DBTable { + \fBclassmethod\fR find {description} { + puts "DB: locate row from [self] matching $description" + return [my new] + } + \fBclassmethod\fR insert {description} { + puts "DB: create row in [self] matching $description" + return [my new] + } + \fBmethod\fR update {description} { + puts "DB: update row [self] with $description" + } + \fBmethod\fR delete {} { + puts "DB: delete row [self]" + my destroy; # Just delete the object, not the DB row + } +} + +oo::class create Users { + \fBsuperclass\fR DBTable +} +oo::class create Groups { + \fBsuperclass\fR DBTable +} + +set u1 [Users insert "username=abc"] + \fI\(-> DB: create row from ::Users matching username=abc\fR +set u2 [Users insert "username=def"] + \fI\(-> DB: create row from ::Users matching username=def\fR +$u2 update "group=NULL" + \fI\(-> DB: update row ::oo::Obj124 with group=NULL\fR +$u1 delete + \fI\(-> DB: delete row ::oo::Obj123\fR +set g [Group find "groupname=webadmins"] + \fI\(-> DB: locate row ::Group with groupname=webadmins\fR +$g update "emailaddress=admins" + \fI\(-> DB: update row ::oo::Obj125 with emailaddress=admins\fR +.CE +.VE TIP478 .SH "SEE ALSO" next(n), oo::class(n), oo::object(n) .SH KEYWORDS -- cgit v0.12 From da7eafc83b4c8797c24505fd5f2c629821c20c00 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 4 Jul 2018 20:18:39 +0000 Subject: Micro-optimization in Tcl_GetString() and Tcl_GetStringFromObj() --- generic/tclObj.c | 69 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/generic/tclObj.c b/generic/tclObj.c index f93f583..16ef7c3 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -1632,32 +1632,30 @@ Tcl_GetString( register Tcl_Obj *objPtr) /* Object whose string rep byte pointer should * be returned. */ { - if (objPtr->bytes != NULL) { - return objPtr->bytes; - } - - /* - * Note we do not check for objPtr->typePtr == NULL. An invariant of - * a properly maintained Tcl_Obj is that at least one of objPtr->bytes - * and objPtr->typePtr must not be NULL. If broken extensions fail to - * maintain that invariant, we can crash here. - */ - - if (objPtr->typePtr->updateStringProc == NULL) { + if (objPtr->bytes == NULL) { /* - * Those Tcl_ObjTypes which choose not to define an updateStringProc - * must be written in such a way that (objPtr->bytes) never becomes - * NULL. This panic was added in Tcl 8.1. + * Note we do not check for objPtr->typePtr == NULL. An invariant + * of a properly maintained Tcl_Obj is that at least one of + * objPtr->bytes and objPtr->typePtr must not be NULL. If broken + * extensions fail to maintain that invariant, we can crash here. */ - Tcl_Panic("UpdateStringProc should not be invoked for type %s", - objPtr->typePtr->name); - } - objPtr->typePtr->updateStringProc(objPtr); - if (objPtr->bytes == NULL || objPtr->length < 0 - || objPtr->bytes[objPtr->length] != '\0') { - Tcl_Panic("UpdateStringProc for type '%s' " - "failed to create a valid string rep", objPtr->typePtr->name); + if (objPtr->typePtr->updateStringProc == NULL) { + /* + * Those Tcl_ObjTypes which choose not to define an + * updateStringProc must be written in such a way that + * (objPtr->bytes) never becomes NULL. + */ + Tcl_Panic("UpdateStringProc should not be invoked for type %s", + objPtr->typePtr->name); + } + objPtr->typePtr->updateStringProc(objPtr); + if (objPtr->bytes == NULL || objPtr->length < 0 + || objPtr->bytes[objPtr->length] != '\0') { + Tcl_Panic("UpdateStringProc for type '%s' " + "failed to create a valid string rep", + objPtr->typePtr->name); + } } return objPtr->bytes; } @@ -1693,8 +1691,31 @@ Tcl_GetStringFromObj( * rep's byte array length should * be stored. * If NULL, no length is stored. */ { - (void) TclGetString(objPtr); + if (objPtr->bytes == NULL) { + /* + * Note we do not check for objPtr->typePtr == NULL. An invariant + * of a properly maintained Tcl_Obj is that at least one of + * objPtr->bytes and objPtr->typePtr must not be NULL. If broken + * extensions fail to maintain that invariant, we can crash here. + */ + if (objPtr->typePtr->updateStringProc == NULL) { + /* + * Those Tcl_ObjTypes which choose not to define an + * updateStringProc must be written in such a way that + * (objPtr->bytes) never becomes NULL. + */ + Tcl_Panic("UpdateStringProc should not be invoked for type %s", + objPtr->typePtr->name); + } + objPtr->typePtr->updateStringProc(objPtr); + if (objPtr->bytes == NULL || objPtr->length < 0 + || objPtr->bytes[objPtr->length] != '\0') { + Tcl_Panic("UpdateStringProc for type '%s' " + "failed to create a valid string rep", + objPtr->typePtr->name); + } + } if (lengthPtr != NULL) { *lengthPtr = objPtr->length; } -- cgit v0.12 From 6982ae0ca7a42a53c0fbdf2fddf9296537b7bfa0 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 4 Jul 2018 20:20:28 +0000 Subject: Make Tcl_GetUnicode() a macro. Mark many other stub-entries which are no longer are in use (because they were converted to macros) as deprecated, since they will be removed in Tcl 9.0 --- generic/tcl.decls | 48 +++++++++---------- generic/tclDecls.h | 126 +++++++++++++++++++++++++++++-------------------- generic/tclStringObj.c | 3 ++ generic/tclStubInit.c | 2 + 4 files changed, 105 insertions(+), 74 deletions(-) diff --git a/generic/tcl.decls b/generic/tcl.decls index da551bb..60effc4 100644 --- a/generic/tcl.decls +++ b/generic/tcl.decls @@ -104,7 +104,7 @@ declare 20 { declare 21 { int Tcl_DbIsShared(Tcl_Obj *objPtr, const char *file, int line) } -declare 22 { +declare 22 {deprecated {No longer in use, changed to macro}} { Tcl_Obj *Tcl_DbNewBooleanObj(int boolValue, const char *file, int line) } declare 23 { @@ -119,7 +119,7 @@ declare 25 { Tcl_Obj *Tcl_DbNewListObj(int objc, Tcl_Obj *const *objv, const char *file, int line) } -declare 26 { +declare 26 {deprecated {No longer in use, changed to macro}} { Tcl_Obj *Tcl_DbNewLongObj(long longValue, const char *file, int line) } declare 27 { @@ -152,7 +152,7 @@ declare 35 { int Tcl_GetDoubleFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, double *doublePtr) } -declare 36 { +declare 36 {deprecated {No longer in use, changed to macro}} { int Tcl_GetIndexFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, const char *const *tablePtr, const char *msg, int flags, int *indexPtr) } @@ -198,7 +198,7 @@ declare 48 { int Tcl_ListObjReplace(Tcl_Interp *interp, Tcl_Obj *listPtr, int first, int count, int objc, Tcl_Obj *const objv[]) } -declare 49 { +declare 49 {deprecated {No longer in use, changed to macro}} { Tcl_Obj *Tcl_NewBooleanObj(int boolValue) } declare 50 { @@ -207,13 +207,13 @@ declare 50 { declare 51 { Tcl_Obj *Tcl_NewDoubleObj(double doubleValue) } -declare 52 { +declare 52 {deprecated {No longer in use, changed to macro}} { Tcl_Obj *Tcl_NewIntObj(int intValue) } declare 53 { Tcl_Obj *Tcl_NewListObj(int objc, Tcl_Obj *const objv[]) } -declare 54 { +declare 54 {deprecated {No longer in use, changed to macro}} { Tcl_Obj *Tcl_NewLongObj(long longValue) } declare 55 { @@ -222,7 +222,7 @@ declare 55 { declare 56 { Tcl_Obj *Tcl_NewStringObj(const char *bytes, int length) } -declare 57 { +declare 57 {deprecated {No longer in use, changed to macro}} { void Tcl_SetBooleanObj(Tcl_Obj *objPtr, int boolValue) } declare 58 { @@ -235,13 +235,13 @@ declare 59 { declare 60 { void Tcl_SetDoubleObj(Tcl_Obj *objPtr, double doubleValue) } -declare 61 { +declare 61 {deprecated {No longer in use, changed to macro}} { void Tcl_SetIntObj(Tcl_Obj *objPtr, int intValue) } declare 62 { void Tcl_SetListObj(Tcl_Obj *objPtr, int objc, Tcl_Obj *const objv[]) } -declare 63 { +declare 63 {deprecated {No longer in use, changed to macro}} { void Tcl_SetLongObj(Tcl_Obj *objPtr, long longValue) } declare 64 { @@ -250,10 +250,10 @@ declare 64 { declare 65 { void Tcl_SetStringObj(Tcl_Obj *objPtr, const char *bytes, int length) } -declare 66 { +declare 66 {deprecated {No longer in use, changed to macro}} { void Tcl_AddErrorInfo(Tcl_Interp *interp, const char *message) } -declare 67 { +declare 67 {deprecated {No longer in use, changed to macro}} { void Tcl_AddObjErrorInfo(Tcl_Interp *interp, const char *message, int length) } @@ -472,7 +472,7 @@ declare 129 { declare 130 { int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName) } -declare 131 { +declare 131 {deprecated {No longer in use, changed to macro}} { int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr) } declare 132 { @@ -624,7 +624,7 @@ declare 173 { declare 174 { const char *Tcl_GetStringResult(Tcl_Interp *interp) } -declare 175 { +declare 175 {deprecated {No longer in use, changed to macro}} { const char *Tcl_GetVar(Tcl_Interp *interp, const char *varName, int flags) } @@ -635,7 +635,7 @@ declare 176 { declare 177 { int Tcl_GlobalEval(Tcl_Interp *interp, const char *command) } -declare 178 { +declare 178 {deprecated {No longer in use, changed to macro}} { int Tcl_GlobalEvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr) } declare 179 { @@ -834,7 +834,7 @@ declare 235 { declare 236 { void Tcl_SetStdChannel(Tcl_Channel channel, int type) } -declare 237 { +declare 237 {deprecated {No longer in use, changed to macro}} { const char *Tcl_SetVar(Tcl_Interp *interp, const char *varName, const char *newValue, int flags) } @@ -869,7 +869,7 @@ declare 245 { declare 246 {deprecated {}} { int Tcl_TellOld(Tcl_Channel chan) } -declare 247 { +declare 247 {deprecated {No longer in use, changed to macro}} { int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData) } @@ -890,14 +890,14 @@ declare 251 { declare 252 { int Tcl_UnregisterChannel(Tcl_Interp *interp, Tcl_Channel chan) } -declare 253 { +declare 253 {deprecated {No longer in use, changed to macro}} { int Tcl_UnsetVar(Tcl_Interp *interp, const char *varName, int flags) } declare 254 { int Tcl_UnsetVar2(Tcl_Interp *interp, const char *part1, const char *part2, int flags) } -declare 255 { +declare 255 {deprecated {No longer in use, changed to macro}} { void Tcl_UntraceVar(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData) } @@ -909,7 +909,7 @@ declare 256 { declare 257 { void Tcl_UpdateLinkedVar(Tcl_Interp *interp, const char *varName) } -declare 258 { +declare 258 {deprecated {No longer in use, changed to macro}} { int Tcl_UpVar(Tcl_Interp *interp, const char *frameName, const char *varName, const char *localName, int flags) } @@ -920,7 +920,7 @@ declare 259 { declare 260 { int Tcl_VarEval(Tcl_Interp *interp, ...) } -declare 261 { +declare 261 {deprecated {No longer in use, changed to macro}} { ClientData Tcl_VarTraceInfo(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData) } @@ -955,7 +955,7 @@ declare 270 { const char *Tcl_ParseVar(Tcl_Interp *interp, const char *start, const char **termPtr) } -declare 271 { +declare 271 {deprecated {No longer in use, changed to macro}} { const char *Tcl_PkgPresent(Tcl_Interp *interp, const char *name, const char *version, int exact) } @@ -964,12 +964,12 @@ declare 272 { const char *name, const char *version, int exact, void *clientDataPtr) } -declare 273 { +declare 273 {deprecated {No longer in use, changed to macro}} { int Tcl_PkgProvide(Tcl_Interp *interp, const char *name, const char *version) } # TIP #268: The internally used new Require function is in slot 573. -declare 274 { +declare 274 {deprecated {No longer in use, changed to macro}} { const char *Tcl_PkgRequire(Tcl_Interp *interp, const char *name, const char *version, int exact) } @@ -1350,7 +1350,7 @@ declare 380 { declare 381 { int Tcl_GetUniChar(Tcl_Obj *objPtr, int index) } -declare 382 { +declare 382 {deprecated {No longer in use, changed to macro}} { Tcl_UniChar *Tcl_GetUnicode(Tcl_Obj *objPtr) } declare 383 { diff --git a/generic/tclDecls.h b/generic/tclDecls.h index 592d945..3f7f343 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -119,7 +119,8 @@ EXTERN void Tcl_DbIncrRefCount(Tcl_Obj *objPtr, const char *file, EXTERN int Tcl_DbIsShared(Tcl_Obj *objPtr, const char *file, int line); /* 22 */ -EXTERN Tcl_Obj * Tcl_DbNewBooleanObj(int boolValue, const char *file, +TCL_DEPRECATED("No longer in use, changed to macro") +Tcl_Obj * Tcl_DbNewBooleanObj(int boolValue, const char *file, int line); /* 23 */ EXTERN Tcl_Obj * Tcl_DbNewByteArrayObj(const unsigned char *bytes, @@ -131,7 +132,8 @@ EXTERN Tcl_Obj * Tcl_DbNewDoubleObj(double doubleValue, EXTERN Tcl_Obj * Tcl_DbNewListObj(int objc, Tcl_Obj *const *objv, const char *file, int line); /* 26 */ -EXTERN Tcl_Obj * Tcl_DbNewLongObj(long longValue, const char *file, +TCL_DEPRECATED("No longer in use, changed to macro") +Tcl_Obj * Tcl_DbNewLongObj(long longValue, const char *file, int line); /* 27 */ EXTERN Tcl_Obj * Tcl_DbNewObj(const char *file, int line); @@ -158,7 +160,8 @@ EXTERN int Tcl_GetDouble(Tcl_Interp *interp, const char *src, EXTERN int Tcl_GetDoubleFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, double *doublePtr); /* 36 */ -EXTERN int Tcl_GetIndexFromObj(Tcl_Interp *interp, +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_GetIndexFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, const char *const *tablePtr, const char *msg, int flags, int *indexPtr); /* 37 */ @@ -198,24 +201,28 @@ EXTERN int Tcl_ListObjReplace(Tcl_Interp *interp, Tcl_Obj *listPtr, int first, int count, int objc, Tcl_Obj *const objv[]); /* 49 */ -EXTERN Tcl_Obj * Tcl_NewBooleanObj(int boolValue); +TCL_DEPRECATED("No longer in use, changed to macro") +Tcl_Obj * Tcl_NewBooleanObj(int boolValue); /* 50 */ EXTERN Tcl_Obj * Tcl_NewByteArrayObj(const unsigned char *bytes, int length); /* 51 */ EXTERN Tcl_Obj * Tcl_NewDoubleObj(double doubleValue); /* 52 */ -EXTERN Tcl_Obj * Tcl_NewIntObj(int intValue); +TCL_DEPRECATED("No longer in use, changed to macro") +Tcl_Obj * Tcl_NewIntObj(int intValue); /* 53 */ EXTERN Tcl_Obj * Tcl_NewListObj(int objc, Tcl_Obj *const objv[]); /* 54 */ -EXTERN Tcl_Obj * Tcl_NewLongObj(long longValue); +TCL_DEPRECATED("No longer in use, changed to macro") +Tcl_Obj * Tcl_NewLongObj(long longValue); /* 55 */ EXTERN Tcl_Obj * Tcl_NewObj(void); /* 56 */ EXTERN Tcl_Obj * Tcl_NewStringObj(const char *bytes, int length); /* 57 */ -EXTERN void Tcl_SetBooleanObj(Tcl_Obj *objPtr, int boolValue); +TCL_DEPRECATED("No longer in use, changed to macro") +void Tcl_SetBooleanObj(Tcl_Obj *objPtr, int boolValue); /* 58 */ EXTERN unsigned char * Tcl_SetByteArrayLength(Tcl_Obj *objPtr, int length); /* 59 */ @@ -224,22 +231,26 @@ EXTERN void Tcl_SetByteArrayObj(Tcl_Obj *objPtr, /* 60 */ EXTERN void Tcl_SetDoubleObj(Tcl_Obj *objPtr, double doubleValue); /* 61 */ -EXTERN void Tcl_SetIntObj(Tcl_Obj *objPtr, int intValue); +TCL_DEPRECATED("No longer in use, changed to macro") +void Tcl_SetIntObj(Tcl_Obj *objPtr, int intValue); /* 62 */ EXTERN void Tcl_SetListObj(Tcl_Obj *objPtr, int objc, Tcl_Obj *const objv[]); /* 63 */ -EXTERN void Tcl_SetLongObj(Tcl_Obj *objPtr, long longValue); +TCL_DEPRECATED("No longer in use, changed to macro") +void Tcl_SetLongObj(Tcl_Obj *objPtr, long longValue); /* 64 */ EXTERN void Tcl_SetObjLength(Tcl_Obj *objPtr, int length); /* 65 */ EXTERN void Tcl_SetStringObj(Tcl_Obj *objPtr, const char *bytes, int length); /* 66 */ -EXTERN void Tcl_AddErrorInfo(Tcl_Interp *interp, +TCL_DEPRECATED("No longer in use, changed to macro") +void Tcl_AddErrorInfo(Tcl_Interp *interp, const char *message); /* 67 */ -EXTERN void Tcl_AddObjErrorInfo(Tcl_Interp *interp, +TCL_DEPRECATED("No longer in use, changed to macro") +void Tcl_AddObjErrorInfo(Tcl_Interp *interp, const char *message, int length); /* 68 */ EXTERN void Tcl_AllowExceptions(Tcl_Interp *interp); @@ -422,7 +433,8 @@ EXTERN int Tcl_Eval(Tcl_Interp *interp, const char *script); EXTERN int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName); /* 131 */ -EXTERN int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr); +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_EvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr); /* 132 */ EXTERN void Tcl_EventuallyFree(ClientData clientData, Tcl_FreeProc *freeProc); @@ -549,7 +561,8 @@ EXTERN Tcl_Channel Tcl_GetStdChannel(int type); /* 174 */ EXTERN const char * Tcl_GetStringResult(Tcl_Interp *interp); /* 175 */ -EXTERN const char * Tcl_GetVar(Tcl_Interp *interp, const char *varName, +TCL_DEPRECATED("No longer in use, changed to macro") +const char * Tcl_GetVar(Tcl_Interp *interp, const char *varName, int flags); /* 176 */ EXTERN const char * Tcl_GetVar2(Tcl_Interp *interp, const char *part1, @@ -558,7 +571,8 @@ EXTERN const char * Tcl_GetVar2(Tcl_Interp *interp, const char *part1, EXTERN int Tcl_GlobalEval(Tcl_Interp *interp, const char *command); /* 178 */ -EXTERN int Tcl_GlobalEvalObj(Tcl_Interp *interp, +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_GlobalEvalObj(Tcl_Interp *interp, Tcl_Obj *objPtr); /* 179 */ EXTERN int Tcl_HideCommand(Tcl_Interp *interp, @@ -713,7 +727,8 @@ EXTERN void Tcl_SetObjResult(Tcl_Interp *interp, /* 236 */ EXTERN void Tcl_SetStdChannel(Tcl_Channel channel, int type); /* 237 */ -EXTERN const char * Tcl_SetVar(Tcl_Interp *interp, const char *varName, +TCL_DEPRECATED("No longer in use, changed to macro") +const char * Tcl_SetVar(Tcl_Interp *interp, const char *varName, const char *newValue, int flags); /* 238 */ EXTERN const char * Tcl_SetVar2(Tcl_Interp *interp, const char *part1, @@ -743,7 +758,8 @@ EXTERN int Tcl_StringMatch(const char *str, const char *pattern); TCL_DEPRECATED("") int Tcl_TellOld(Tcl_Channel chan); /* 247 */ -EXTERN int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 248 */ @@ -764,13 +780,15 @@ EXTERN void Tcl_UnlinkVar(Tcl_Interp *interp, EXTERN int Tcl_UnregisterChannel(Tcl_Interp *interp, Tcl_Channel chan); /* 253 */ -EXTERN int Tcl_UnsetVar(Tcl_Interp *interp, const char *varName, +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_UnsetVar(Tcl_Interp *interp, const char *varName, int flags); /* 254 */ EXTERN int Tcl_UnsetVar2(Tcl_Interp *interp, const char *part1, const char *part2, int flags); /* 255 */ -EXTERN void Tcl_UntraceVar(Tcl_Interp *interp, +TCL_DEPRECATED("No longer in use, changed to macro") +void Tcl_UntraceVar(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); @@ -783,7 +801,8 @@ EXTERN void Tcl_UntraceVar2(Tcl_Interp *interp, EXTERN void Tcl_UpdateLinkedVar(Tcl_Interp *interp, const char *varName); /* 258 */ -EXTERN int Tcl_UpVar(Tcl_Interp *interp, const char *frameName, +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_UpVar(Tcl_Interp *interp, const char *frameName, const char *varName, const char *localName, int flags); /* 259 */ @@ -793,7 +812,8 @@ EXTERN int Tcl_UpVar2(Tcl_Interp *interp, const char *frameName, /* 260 */ EXTERN int Tcl_VarEval(Tcl_Interp *interp, ...); /* 261 */ -EXTERN ClientData Tcl_VarTraceInfo(Tcl_Interp *interp, +TCL_DEPRECATED("No longer in use, changed to macro") +ClientData Tcl_VarTraceInfo(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData); @@ -825,17 +845,20 @@ EXTERN char * Tcl_HashStats(Tcl_HashTable *tablePtr); EXTERN const char * Tcl_ParseVar(Tcl_Interp *interp, const char *start, const char **termPtr); /* 271 */ -EXTERN const char * Tcl_PkgPresent(Tcl_Interp *interp, const char *name, +TCL_DEPRECATED("No longer in use, changed to macro") +const char * Tcl_PkgPresent(Tcl_Interp *interp, const char *name, const char *version, int exact); /* 272 */ EXTERN const char * Tcl_PkgPresentEx(Tcl_Interp *interp, const char *name, const char *version, int exact, void *clientDataPtr); /* 273 */ -EXTERN int Tcl_PkgProvide(Tcl_Interp *interp, const char *name, +TCL_DEPRECATED("No longer in use, changed to macro") +int Tcl_PkgProvide(Tcl_Interp *interp, const char *name, const char *version); /* 274 */ -EXTERN const char * Tcl_PkgRequire(Tcl_Interp *interp, const char *name, +TCL_DEPRECATED("No longer in use, changed to macro") +const char * Tcl_PkgRequire(Tcl_Interp *interp, const char *name, const char *version, int exact); /* 275 */ TCL_DEPRECATED("see TIP #422") @@ -1125,7 +1148,8 @@ EXTERN int Tcl_GetCharLength(Tcl_Obj *objPtr); /* 381 */ EXTERN int Tcl_GetUniChar(Tcl_Obj *objPtr, int index); /* 382 */ -EXTERN Tcl_UniChar * Tcl_GetUnicode(Tcl_Obj *objPtr); +TCL_DEPRECATED("No longer in use, changed to macro") +Tcl_UniChar * Tcl_GetUnicode(Tcl_Obj *objPtr); /* 383 */ EXTERN Tcl_Obj * Tcl_GetRange(Tcl_Obj *objPtr, int first, int last); /* 384 */ @@ -1887,11 +1911,11 @@ typedef struct TclStubs { void (*tcl_DbDecrRefCount) (Tcl_Obj *objPtr, const char *file, int line); /* 19 */ void (*tcl_DbIncrRefCount) (Tcl_Obj *objPtr, const char *file, int line); /* 20 */ int (*tcl_DbIsShared) (Tcl_Obj *objPtr, const char *file, int line); /* 21 */ - Tcl_Obj * (*tcl_DbNewBooleanObj) (int boolValue, const char *file, int line); /* 22 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") Tcl_Obj * (*tcl_DbNewBooleanObj) (int boolValue, const char *file, int line); /* 22 */ Tcl_Obj * (*tcl_DbNewByteArrayObj) (const unsigned char *bytes, int length, const char *file, int line); /* 23 */ Tcl_Obj * (*tcl_DbNewDoubleObj) (double doubleValue, const char *file, int line); /* 24 */ Tcl_Obj * (*tcl_DbNewListObj) (int objc, Tcl_Obj *const *objv, const char *file, int line); /* 25 */ - Tcl_Obj * (*tcl_DbNewLongObj) (long longValue, const char *file, int line); /* 26 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") Tcl_Obj * (*tcl_DbNewLongObj) (long longValue, const char *file, int line); /* 26 */ Tcl_Obj * (*tcl_DbNewObj) (const char *file, int line); /* 27 */ Tcl_Obj * (*tcl_DbNewStringObj) (const char *bytes, int length, const char *file, int line); /* 28 */ Tcl_Obj * (*tcl_DuplicateObj) (Tcl_Obj *objPtr); /* 29 */ @@ -1901,7 +1925,7 @@ typedef struct TclStubs { unsigned char * (*tcl_GetByteArrayFromObj) (Tcl_Obj *objPtr, int *lengthPtr); /* 33 */ int (*tcl_GetDouble) (Tcl_Interp *interp, const char *src, double *doublePtr); /* 34 */ int (*tcl_GetDoubleFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, double *doublePtr); /* 35 */ - int (*tcl_GetIndexFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, const char *const *tablePtr, const char *msg, int flags, int *indexPtr); /* 36 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_GetIndexFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, const char *const *tablePtr, const char *msg, int flags, int *indexPtr); /* 36 */ int (*tcl_GetInt) (Tcl_Interp *interp, const char *src, int *intPtr); /* 37 */ int (*tcl_GetIntFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, int *intPtr); /* 38 */ int (*tcl_GetLongFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, long *longPtr); /* 39 */ @@ -1914,25 +1938,25 @@ typedef struct TclStubs { int (*tcl_ListObjIndex) (Tcl_Interp *interp, Tcl_Obj *listPtr, int index, Tcl_Obj **objPtrPtr); /* 46 */ int (*tcl_ListObjLength) (Tcl_Interp *interp, Tcl_Obj *listPtr, int *lengthPtr); /* 47 */ int (*tcl_ListObjReplace) (Tcl_Interp *interp, Tcl_Obj *listPtr, int first, int count, int objc, Tcl_Obj *const objv[]); /* 48 */ - Tcl_Obj * (*tcl_NewBooleanObj) (int boolValue); /* 49 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") Tcl_Obj * (*tcl_NewBooleanObj) (int boolValue); /* 49 */ Tcl_Obj * (*tcl_NewByteArrayObj) (const unsigned char *bytes, int length); /* 50 */ Tcl_Obj * (*tcl_NewDoubleObj) (double doubleValue); /* 51 */ - Tcl_Obj * (*tcl_NewIntObj) (int intValue); /* 52 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") Tcl_Obj * (*tcl_NewIntObj) (int intValue); /* 52 */ Tcl_Obj * (*tcl_NewListObj) (int objc, Tcl_Obj *const objv[]); /* 53 */ - Tcl_Obj * (*tcl_NewLongObj) (long longValue); /* 54 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") Tcl_Obj * (*tcl_NewLongObj) (long longValue); /* 54 */ Tcl_Obj * (*tcl_NewObj) (void); /* 55 */ Tcl_Obj * (*tcl_NewStringObj) (const char *bytes, int length); /* 56 */ - void (*tcl_SetBooleanObj) (Tcl_Obj *objPtr, int boolValue); /* 57 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") void (*tcl_SetBooleanObj) (Tcl_Obj *objPtr, int boolValue); /* 57 */ unsigned char * (*tcl_SetByteArrayLength) (Tcl_Obj *objPtr, int length); /* 58 */ void (*tcl_SetByteArrayObj) (Tcl_Obj *objPtr, const unsigned char *bytes, int length); /* 59 */ void (*tcl_SetDoubleObj) (Tcl_Obj *objPtr, double doubleValue); /* 60 */ - void (*tcl_SetIntObj) (Tcl_Obj *objPtr, int intValue); /* 61 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") void (*tcl_SetIntObj) (Tcl_Obj *objPtr, int intValue); /* 61 */ void (*tcl_SetListObj) (Tcl_Obj *objPtr, int objc, Tcl_Obj *const objv[]); /* 62 */ - void (*tcl_SetLongObj) (Tcl_Obj *objPtr, long longValue); /* 63 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") void (*tcl_SetLongObj) (Tcl_Obj *objPtr, long longValue); /* 63 */ void (*tcl_SetObjLength) (Tcl_Obj *objPtr, int length); /* 64 */ void (*tcl_SetStringObj) (Tcl_Obj *objPtr, const char *bytes, int length); /* 65 */ - void (*tcl_AddErrorInfo) (Tcl_Interp *interp, const char *message); /* 66 */ - void (*tcl_AddObjErrorInfo) (Tcl_Interp *interp, const char *message, int length); /* 67 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") void (*tcl_AddErrorInfo) (Tcl_Interp *interp, const char *message); /* 66 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") void (*tcl_AddObjErrorInfo) (Tcl_Interp *interp, const char *message, int length); /* 67 */ void (*tcl_AllowExceptions) (Tcl_Interp *interp); /* 68 */ void (*tcl_AppendElement) (Tcl_Interp *interp, const char *element); /* 69 */ void (*tcl_AppendResult) (Tcl_Interp *interp, ...); /* 70 */ @@ -1996,7 +2020,7 @@ typedef struct TclStubs { const char * (*tcl_ErrnoMsg) (int err); /* 128 */ int (*tcl_Eval) (Tcl_Interp *interp, const char *script); /* 129 */ int (*tcl_EvalFile) (Tcl_Interp *interp, const char *fileName); /* 130 */ - int (*tcl_EvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 131 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_EvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 131 */ void (*tcl_EventuallyFree) (ClientData clientData, Tcl_FreeProc *freeProc); /* 132 */ TCL_NORETURN1 void (*tcl_Exit) (int status); /* 133 */ int (*tcl_ExposeCommand) (Tcl_Interp *interp, const char *hiddenCmdToken, const char *cmdName); /* 134 */ @@ -2048,10 +2072,10 @@ typedef struct TclStubs { Tcl_Interp * (*tcl_GetSlave) (Tcl_Interp *interp, const char *slaveName); /* 172 */ Tcl_Channel (*tcl_GetStdChannel) (int type); /* 173 */ const char * (*tcl_GetStringResult) (Tcl_Interp *interp); /* 174 */ - const char * (*tcl_GetVar) (Tcl_Interp *interp, const char *varName, int flags); /* 175 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") const char * (*tcl_GetVar) (Tcl_Interp *interp, const char *varName, int flags); /* 175 */ const char * (*tcl_GetVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags); /* 176 */ int (*tcl_GlobalEval) (Tcl_Interp *interp, const char *command); /* 177 */ - int (*tcl_GlobalEvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 178 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_GlobalEvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 178 */ int (*tcl_HideCommand) (Tcl_Interp *interp, const char *cmdName, const char *hiddenCmdToken); /* 179 */ int (*tcl_Init) (Tcl_Interp *interp); /* 180 */ void (*tcl_InitHashTable) (Tcl_HashTable *tablePtr, int keyType); /* 181 */ @@ -2110,7 +2134,7 @@ typedef struct TclStubs { void (*tcl_SetObjErrorCode) (Tcl_Interp *interp, Tcl_Obj *errorObjPtr); /* 234 */ void (*tcl_SetObjResult) (Tcl_Interp *interp, Tcl_Obj *resultObjPtr); /* 235 */ void (*tcl_SetStdChannel) (Tcl_Channel channel, int type); /* 236 */ - const char * (*tcl_SetVar) (Tcl_Interp *interp, const char *varName, const char *newValue, int flags); /* 237 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") const char * (*tcl_SetVar) (Tcl_Interp *interp, const char *varName, const char *newValue, int flags); /* 237 */ const char * (*tcl_SetVar2) (Tcl_Interp *interp, const char *part1, const char *part2, const char *newValue, int flags); /* 238 */ const char * (*tcl_SignalId) (int sig); /* 239 */ const char * (*tcl_SignalMsg) (int sig); /* 240 */ @@ -2120,21 +2144,21 @@ typedef struct TclStubs { void (*tcl_StaticPackage) (Tcl_Interp *interp, const char *pkgName, Tcl_PackageInitProc *initProc, Tcl_PackageInitProc *safeInitProc); /* 244 */ int (*tcl_StringMatch) (const char *str, const char *pattern); /* 245 */ TCL_DEPRECATED_API("") int (*tcl_TellOld) (Tcl_Channel chan); /* 246 */ - int (*tcl_TraceVar) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 247 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_TraceVar) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 247 */ int (*tcl_TraceVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 248 */ char * (*tcl_TranslateFileName) (Tcl_Interp *interp, const char *name, Tcl_DString *bufferPtr); /* 249 */ int (*tcl_Ungets) (Tcl_Channel chan, const char *str, int len, int atHead); /* 250 */ void (*tcl_UnlinkVar) (Tcl_Interp *interp, const char *varName); /* 251 */ int (*tcl_UnregisterChannel) (Tcl_Interp *interp, Tcl_Channel chan); /* 252 */ - int (*tcl_UnsetVar) (Tcl_Interp *interp, const char *varName, int flags); /* 253 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_UnsetVar) (Tcl_Interp *interp, const char *varName, int flags); /* 253 */ int (*tcl_UnsetVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags); /* 254 */ - void (*tcl_UntraceVar) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 255 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") void (*tcl_UntraceVar) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 255 */ void (*tcl_UntraceVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 256 */ void (*tcl_UpdateLinkedVar) (Tcl_Interp *interp, const char *varName); /* 257 */ - int (*tcl_UpVar) (Tcl_Interp *interp, const char *frameName, const char *varName, const char *localName, int flags); /* 258 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_UpVar) (Tcl_Interp *interp, const char *frameName, const char *varName, const char *localName, int flags); /* 258 */ int (*tcl_UpVar2) (Tcl_Interp *interp, const char *frameName, const char *part1, const char *part2, const char *localName, int flags); /* 259 */ int (*tcl_VarEval) (Tcl_Interp *interp, ...); /* 260 */ - ClientData (*tcl_VarTraceInfo) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData); /* 261 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") ClientData (*tcl_VarTraceInfo) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData); /* 261 */ ClientData (*tcl_VarTraceInfo2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *procPtr, ClientData prevClientData); /* 262 */ int (*tcl_Write) (Tcl_Channel chan, const char *s, int slen); /* 263 */ void (*tcl_WrongNumArgs) (Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], const char *message); /* 264 */ @@ -2144,10 +2168,10 @@ typedef struct TclStubs { TCL_DEPRECATED_API("see TIP #422") void (*tcl_AppendStringsToObjVA) (Tcl_Obj *objPtr, va_list argList); /* 268 */ char * (*tcl_HashStats) (Tcl_HashTable *tablePtr); /* 269 */ const char * (*tcl_ParseVar) (Tcl_Interp *interp, const char *start, const char **termPtr); /* 270 */ - const char * (*tcl_PkgPresent) (Tcl_Interp *interp, const char *name, const char *version, int exact); /* 271 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") const char * (*tcl_PkgPresent) (Tcl_Interp *interp, const char *name, const char *version, int exact); /* 271 */ const char * (*tcl_PkgPresentEx) (Tcl_Interp *interp, const char *name, const char *version, int exact, void *clientDataPtr); /* 272 */ - int (*tcl_PkgProvide) (Tcl_Interp *interp, const char *name, const char *version); /* 273 */ - const char * (*tcl_PkgRequire) (Tcl_Interp *interp, const char *name, const char *version, int exact); /* 274 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") int (*tcl_PkgProvide) (Tcl_Interp *interp, const char *name, const char *version); /* 273 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") const char * (*tcl_PkgRequire) (Tcl_Interp *interp, const char *name, const char *version, int exact); /* 274 */ TCL_DEPRECATED_API("see TIP #422") void (*tcl_SetErrorCodeVA) (Tcl_Interp *interp, va_list argList); /* 275 */ TCL_DEPRECATED_API("see TIP #422") int (*tcl_VarEvalVA) (Tcl_Interp *interp, va_list argList); /* 276 */ Tcl_Pid (*tcl_WaitPid) (Tcl_Pid pid, int *statPtr, int options); /* 277 */ @@ -2255,7 +2279,7 @@ typedef struct TclStubs { void (*tcl_SetUnicodeObj) (Tcl_Obj *objPtr, const Tcl_UniChar *unicode, int numChars); /* 379 */ int (*tcl_GetCharLength) (Tcl_Obj *objPtr); /* 380 */ int (*tcl_GetUniChar) (Tcl_Obj *objPtr, int index); /* 381 */ - Tcl_UniChar * (*tcl_GetUnicode) (Tcl_Obj *objPtr); /* 382 */ + TCL_DEPRECATED_API("No longer in use, changed to macro") Tcl_UniChar * (*tcl_GetUnicode) (Tcl_Obj *objPtr); /* 382 */ Tcl_Obj * (*tcl_GetRange) (Tcl_Obj *objPtr, int first, int last); /* 383 */ void (*tcl_AppendUnicodeToObj) (Tcl_Obj *objPtr, const Tcl_UniChar *unicode, int length); /* 384 */ int (*tcl_RegExpMatchObj) (Tcl_Interp *interp, Tcl_Obj *textObj, Tcl_Obj *patternObj); /* 385 */ @@ -3974,9 +3998,11 @@ extern const TclStubs *tclStubsPtr; #undef Tcl_DbNewLongObj #define Tcl_DbNewLongObj(value, file, line) Tcl_DbNewWideIntObj((long)(value), file, line) #undef Tcl_SetIntObj -#define Tcl_SetIntObj(objPtr, value) Tcl_SetWideIntObj(objPtr, (int)(value)) +#define Tcl_SetIntObj(objPtr, value) Tcl_SetWideIntObj((objPtr), (int)(value)) #undef Tcl_SetLongObj -#define Tcl_SetLongObj(objPtr, value) Tcl_SetWideIntObj(objPtr, (long)(value)) +#define Tcl_SetLongObj(objPtr, value) Tcl_SetWideIntObj((objPtr), (long)(value)) +#undef Tcl_GetUnicode +#define Tcl_GetUnicode(objPtr) Tcl_GetUnicodeFromObj((objPtr), NULL) /* * Deprecated Tcl procedures: diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index bed23a0..3bb6112 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -606,6 +606,8 @@ Tcl_GetUniChar( *---------------------------------------------------------------------- */ +#ifndef TCL_NO_DEPRECATED +#undef Tcl_GetUnicode Tcl_UniChar * Tcl_GetUnicode( Tcl_Obj *objPtr) /* The object to find the unicode string @@ -613,6 +615,7 @@ Tcl_GetUnicode( { return Tcl_GetUnicodeFromObj(objPtr, NULL); } +#endif /* TCL_NO_DEPRECATED */ /* *---------------------------------------------------------------------- diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 7ce0758..2bd4de9 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -34,6 +34,7 @@ #undef Tcl_DbNewLongObj #undef Tcl_NewObj #undef Tcl_NewStringObj +#undef Tcl_GetUnicode #undef Tcl_DumpActiveMemory #undef Tcl_ValidateAllMemory #undef Tcl_FindHashEntry @@ -402,6 +403,7 @@ static int uniCharNcasecmp(const Tcl_UniChar *ucs, const Tcl_UniChar *uct, unsig # define TclpGmtime 0 # define TclpLocaltime_unix 0 # define TclpGmtime_unix 0 +# define Tcl_GetUnicode 0 #else /* TCL_NO_DEPRECATED */ # define Tcl_SeekOld seekOld # define Tcl_TellOld tellOld -- cgit v0.12 From 367ce9ad482394057c4d895abb67ffe50f1ac015 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 5 Jul 2018 19:39:19 +0000 Subject: tclDictObj.c:366: warning: dereferencing type-punned pointer will break strict-aliasing rules Prevent this warning, which gcc 4.4 (a.o.) gives on this construct. void pointers work well already in whatever assignment. --- generic/tclDictObj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c index 2eff1ff..32234a3 100644 --- a/generic/tclDictObj.c +++ b/generic/tclDictObj.c @@ -153,7 +153,7 @@ typedef struct Dict { * must be assignable as well as readable. */ -#define DICT(dictObj) (*((Dict **)&(dictObj)->internalRep.twoPtrValue.ptr1)) +#define DICT(dictObj) ((dictObj)->internalRep.twoPtrValue.ptr1) /* * The structure below defines the dictionary object type by means of -- cgit v0.12 From 969f9f571cda6f6b8db32f8b9cdf922715b37c43 Mon Sep 17 00:00:00 2001 From: dkf Date: Fri, 6 Jul 2018 13:50:54 +0000 Subject: Improving the singleton --- doc/abstract.n | 4 +++- doc/define.n | 2 +- doc/singleton.n | 20 +++++++++++++------- generic/tclOOScript.h | 7 ++++++- tests/ooUtil.test | 25 +++++++++++++++++++++++-- 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/doc/abstract.n b/doc/abstract.n index c11202b..022c24b 100644 --- a/doc/abstract.n +++ b/doc/abstract.n @@ -36,7 +36,9 @@ The \fBoo::abstract\fR class does not define an explicit constructor; this means that it is effectively the same as the constructor of the \fBoo::class\fR class. .SS DESTRUCTOR -The \fBoo::abstract\fR class does not define an explicit destructor. +The \fBoo::abstract\fR class does not define an explicit destructor; +destroying an instance of it is just like destroying an ordinary class (and +will destroy all its subclasses). .SS "EXPORTED METHODS" The \fBoo::abstract\fR class defines no new exported methods. .SS "NON-EXPORTED METHODS" diff --git a/doc/define.n b/doc/define.n index 099e59f..860218f 100644 --- a/doc/define.n +++ b/doc/define.n @@ -1,5 +1,5 @@ '\" -'\" Copyright (c) 2007 Donal K. Fellows +'\" Copyright (c) 2007-2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. diff --git a/doc/singleton.n b/doc/singleton.n index 6319abe..568a8bd 100644 --- a/doc/singleton.n +++ b/doc/singleton.n @@ -32,16 +32,20 @@ not recommended to inherit from a singleton class; singleton-ness is \fInot\fR inherited. It is not recommended that a singleton class's constructor take any arguments. .PP -Instances have their\fB destroy\fR method (from \fBoo::object\fR) unexported -in order to discourage destruction of the object, but destruction remains -possible if strictly necessary (e.g., by destroying the class or using -\fBrename\fR to delete it). +Instances have their\fB destroy\fR method overridden with a method that always +returns an error in order to discourage destruction of the object, but +destruction remains possible if strictly necessary (e.g., by destroying the +class or using \fBrename\fR to delete it). They also have a (non-exported) +\fB\fR method defined on them that similarly always returns errors to +make attempts to use the singleton instance with \fBoo::copy\fR fail. .SS CONSTRUCTOR The \fBoo::singleton\fR class does not define an explicit constructor; this means that it is effectively the same as the constructor of the \fBoo::class\fR class. .SS DESTRUCTOR -The \fBoo::singleton\fR class does not define an explicit destructor. +The \fBoo::singleton\fR class does not define an explicit destructor; +destroying an instance of it is just like destroying an ordinary class (and +will destroy the singleton object). .SS "EXPORTED METHODS" .TP \fIcls \fBnew \fR?\fIarg ...\fR? @@ -53,11 +57,13 @@ manufactured; that construction is via the \fBoo::class\fR class's \fBnew\fR method. .RS .PP -This is an override of the behaviour of a superclass's method. +This is an override of the behaviour of a superclass's method with an +identical call signature to the superclass's implementation. .RE .SS "NON-EXPORTED METHODS" The \fBoo::singleton\fR class explicitly states that \fBcreate\fR and -\fBcreateWithNamespace\fR are unexported. +\fBcreateWithNamespace\fR are unexported; callers should not assume that they +have control over either the name or the namespace name of the singleton instance. .SH EXAMPLE .PP This example demonstrates that there is only one instance even though the diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 237bff5..d96ee76 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -161,7 +161,12 @@ static const char *tclOOSetupScript = " method new args {\n" " if {![info exists object] || ![info object isa object $object]} {\n" " set object [next {*}$args]\n" -" ::oo::objdefine $object unexport destroy\n" +" ::oo::objdefine $object method destroy {} {\n" +" return -code error {may not destroy a singleton object}\n" +" }\n" +" ::oo::objdefine $object method {originObject} {\n" +" return -code error {may not clone a singleton object}\n" +" }\n" " }\n" " return $object\n" " }\n" diff --git a/tests/ooUtil.test b/tests/ooUtil.test index 28ab9c7..e00c70c 100644 --- a/tests/ooUtil.test +++ b/tests/ooUtil.test @@ -298,12 +298,33 @@ test ooUtil-4.1 {TIP 478: singleton} -setup { set z [xyz new] set code [catch {$x destroy} msg] set p [xyz new] - lappend code $msg [catch {rename $x ""}] + lappend code [catch {rename $x ""}] set q [xyz new] string map [list $x ONE $q TWO] [list {*}$code $x $y $z $p $q [xyz new]] } -cleanup { parent destroy -} -result {1 {object "ONE" has no visible methods} 0 ONE ONE ONE ONE TWO TWO} +} -result {1 0 ONE ONE ONE ONE TWO TWO} +test ooUtil-4.2 {TIP 478: singleton errors} -setup { + oo::class create parent +} -body { + oo::singleton create xyz { + superclass parent + } + [xyz new] destroy +} -returnCodes error -cleanup { + parent destroy +} -result {may not destroy a singleton object} +test ooUtil-4.3 {TIP 478: singleton errors} -setup { + oo::class create parent +} -body { + oo::singleton create xyz { + superclass parent + } + oo::copy [xyz new] +} -returnCodes error -cleanup { + parent destroy +} -result {may not clone a singleton object} + test ooUtil-5.1 {TIP 478: abstract} -setup { oo::class create parent -- cgit v0.12 From 5a06fd4bcf87ea7fc607798714be8886927c1b15 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 7 Jul 2018 08:22:13 +0000 Subject: Document the [myclass] command; someone might find it useful besides me. --- doc/my.n | 60 +++++++++++++++++++++++++++++++++++++++++++++------ generic/tclOO.c | 34 ++++++++++++++--------------- generic/tclOOScript.h | 2 +- 3 files changed, 72 insertions(+), 24 deletions(-) diff --git a/doc/my.n b/doc/my.n index 26d861a..262186f 100644 --- a/doc/my.n +++ b/doc/my.n @@ -9,30 +9,45 @@ .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME -my \- invoke any method of current object +my, myclass \- invoke any method of current object or its class .SH SYNOPSIS .nf package require TclOO \fBmy\fI methodName\fR ?\fIarg ...\fR? +\fBmyclass\fI methodName\fR ?\fIarg ...\fR? .fi .BE .SH DESCRIPTION .PP The \fBmy\fR command is used to allow methods of objects to invoke methods -of the object (or its class). In particular, the set of valid values for +of the object (or its class), +.VS TIP478 +and he \fBmyclass\fR command is used to allow methods of objects to invoke +methods of the current class of the object \fIas an object\fR. +.VE TIP478 +In particular, the set of valid values for \fImethodName\fR is the set of all methods supported by an object and its superclasses, including those that are not exported .VS TIP500 and private methods of the object or class when used within another method defined by that object or class. .VE TIP500 -The object upon which the method is invoked is the one that owns the namespace -that the \fBmy\fR command is contained in initially (\fBNB:\fR the link +.PP +The object upon which the method is invoked via \fBmy\fR is the one that owns +the namespace that the \fBmy\fR command is contained in initially (\fBNB:\fR the link remains if the command is renamed), which is the currently invoked object by default. +.VS TIP478 +Similarly, the object on which the method is invoked via \fBmyclass\fR is the +object that is the current class of the object that owns the namespace that +the \fBmyclass\fR command is contained in initially. As with \fBmy\fR, the +link remains even if the command is renamed into another namespace, and +defaults to being the manufacturing class of the current object. +.VE TIP478 .PP -Each object has its own \fBmy\fR command, contained in its instance namespace. +Each object has its own \fBmy\fR and \fBmyclass\fR commands, contained in its +instance namespace. .SH EXAMPLES .PP This example shows basic use of \fBmy\fR to use the \fBvariables\fR method of @@ -54,7 +69,8 @@ o count \fI\(-> prints "3"\fR .PP This example shows how you can use \fBmy\fR to make callbacks to private methods from outside the object (from a \fBtrace\fR), using -\fBnamespace code\fR to enter the correct context: +\fBnamespace code\fR to enter the correct context. (See the \fBcallback\fR +command for the recommended way of doing this.) .PP .CS oo::class create HasCallback { @@ -73,6 +89,38 @@ set o [HasCallback new] trace add variable xyz write [$o makeCallback] set xyz "called" \fI\(-> prints "callback: xyz {} write"\fR .CE +.PP +.VS TIP478 +This example shows how to access a private method of a class from an instance +of that class. (See the \fBclassmethod\fR declaration in \fBoo::define\fR for +a higher level interface for doing this.) +.PP +.CS +oo::class create CountedSteps { + self { + variable count + method Count {} { + return [incr count] + } + } + method advanceTwice {} { + puts "in [self] step A: [\fBmyclass\fR Count]" + puts "in [self] step B: [\fBmyclass\fR Count]" + } +} + +CountedSteps create x +CountedSteps create y +x advanceTwice \fI\(-> prints "in ::x step A: 1"\fR + \fI\(-> prints "in ::x step B: 2"\fR +y advanceTwice \fI\(-> prints "in ::y step A: 3"\fR + \fI\(-> prints "in ::y step B: 4"\fR +x advanceTwice \fI\(-> prints "in ::x step A: 5"\fR + \fI\(-> prints "in ::x step B: 6"\fR +y advanceTwice \fI\(-> prints "in ::y step A: 7"\fR + \fI\(-> prints "in ::y step B: 8"\fR +.CE +.VE TIP478 .SH "SEE ALSO" next(n), oo::object(n), self(n) .SH KEYWORDS diff --git a/generic/tclOO.c b/generic/tclOO.c index 8229dc1..630e977 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -108,7 +108,7 @@ static int MyClassObjCmd(ClientData clientData, static int MyClassNRObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const *objv); -static void MyClassDeletedCmd(ClientData clientData); +static void MyClassDeleted(ClientData clientData); /* * Methods in the oo::object and oo::class classes. First, we define a helper @@ -754,9 +754,9 @@ AllocObject( oPtr->myCommand = TclNRCreateCommandInNs(interp, "my", oPtr->namespacePtr, PrivateObjectCmd, PrivateNRObjectCmd, oPtr, MyDeleted); - oPtr->myclassCommand = TclNRCreateCommandInNs(interp, " :my:class", + oPtr->myclassCommand = TclNRCreateCommandInNs(interp, "myclass", oPtr->namespacePtr, MyClassObjCmd, MyClassNRObjCmd, oPtr, - MyClassDeletedCmd); + MyClassDeleted); return oPtr; } @@ -784,12 +784,12 @@ SquelchCachedName( /* * ---------------------------------------------------------------------- * - * MyDeleted -- + * MyDeleted, MyClassDeleted -- * - * This callback is triggered when the object's [my] command is deleted - * by any mechanism. It just marks the object as not having a [my] - * command, and so prevents cleanup of that when the object itself is - * deleted. + * These callbacks are triggered when the object's [my] or [myclass] + * commands are deleted by any mechanism. They just mark the object as + * not having a [my] command or [myclass] command, and so prevent cleanup + * of those commands when the object itself is deleted. * * ---------------------------------------------------------------------- */ @@ -803,6 +803,14 @@ MyDeleted( oPtr->myCommand = NULL; } + +static void +MyClassDeleted( + ClientData clientData) +{ + Object *oPtr = clientData; + oPtr->myclassCommand = NULL; +} /* * ---------------------------------------------------------------------- @@ -2501,7 +2509,7 @@ TclOOInvokeObject( /* * ---------------------------------------------------------------------- * - * MyClassObjCmd, MyClassNRObjCmd, MyClassDeletedCmd -- + * MyClassObjCmd, MyClassNRObjCmd -- * * Special trap door to allow an object to delegate simply to its class. * @@ -2534,14 +2542,6 @@ MyClassNRObjCmd( return TclOOObjectCmdCore(oPtr->selfCls->thisPtr, interp, objc, objv, 0, NULL); } - -static void -MyClassDeletedCmd( - ClientData clientData) -{ - Object *oPtr = clientData; - oPtr->myclassCommand = NULL; -} /* * ---------------------------------------------------------------------- diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index d96ee76..4b58337 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -85,7 +85,7 @@ static const char *tclOOSetupScript = " ::oo::define [::oo::DelegateName $cls] method $name $args $body\n" " }\n" " # Make the connection by forwarding\n" -" tailcall forward $name { :my:class} $name\n" +" tailcall forward $name myclass $name\n" "}\n" "proc ::oo::MixinClassDelegates {class} {\n" -- cgit v0.12 From 27110774bd87b00612e7c3ff97d7af542d364d42 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 7 Jul 2018 08:45:00 +0000 Subject: Added direct tests for [myclass] --- tests/oo.test | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tests/oo.test b/tests/oo.test index 7e0f12e..b2c269b 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4845,6 +4845,59 @@ test oo-40.3 {TIP 500: private and unexport} -setup { } -cleanup { cls destroy } -result {{} {} foo {} foo {}} + +test oo-41.1 {TIP 478: myclass command, including class morphing} -setup { + oo::class create parent + set result {} +} -body { + oo::class create cls1 { + superclass parent + self method count {} { + my variable c + incr c + } + method act {} { + myclass count + } + } + cls1 create x + lappend result [x act] [x act] + cls1 create y + lappend result [y act] [y act] [x act] + oo::class create cls2 { + superclass cls1 + self method count {} { + my variable d + expr {1.0 * [incr d]} + } + } + oo::objdefine x {class cls2} + lappend result [x act] [y act] [x act] [y act] +} -cleanup { + parent destroy +} -result {1 2 3 4 5 1.0 6 2.0 7} +test oo-41.2 {TIP 478: myclass command cleanup} -setup { + oo::class create parent + set result {} +} -body { + oo::class create cls1 { + superclass parent + self method hi {} { + return "this is [self]" + } + method hi {} { + return "this is [self]" + } + } + cls1 create x + rename [info object namespace x]::my foo + rename [info object namespace x]::myclass bar + lappend result [cls1 hi] [x hi] [foo hi] [bar hi] + x destroy + lappend result [catch {foo hi}] [catch {bar hi}] +} -cleanup { + parent destroy +} -result {{this is ::cls1} {this is ::x} {this is ::x} {this is ::cls1} 1 1} cleanupTests return -- cgit v0.12 From d0f8889c8f63ea1c95b2d89ad98354657cf2f10f Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 7 Jul 2018 08:57:49 +0000 Subject: And another test --- tests/oo.test | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/oo.test b/tests/oo.test index b2c269b..e49ecb3 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -4898,6 +4898,22 @@ test oo-41.2 {TIP 478: myclass command cleanup} -setup { } -cleanup { parent destroy } -result {{this is ::cls1} {this is ::x} {this is ::x} {this is ::cls1} 1 1} +test oo-41.3 {TIP 478: myclass command calls unexported methods, via forward} -setup { + oo::class create parent + set result {} +} -body { + oo::class create cls1 { + superclass parent + self method Hi {} { + return "this is [self]" + } + forward poke myclass Hi + } + cls1 create x + lappend result [catch {cls1 Hi}] [x poke] +} -cleanup { + parent destroy +} -result {1 {this is ::cls1}} cleanupTests return -- cgit v0.12 From 51aecf205dab16072098f2f5119d6b9026f73e65 Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 9 Jul 2018 17:18:07 +0000 Subject: closes [270f78ca95b642fb]: fix the race condition for `file mkdir` if some worker deletes directory immediately after the succeded create inside 3rd worker. --- generic/tclFCmd.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c index 1363829..da15262 100644 --- a/generic/tclFCmd.c +++ b/generic/tclFCmd.c @@ -243,9 +243,13 @@ TclFileMakeDirsCmd( break; } for (j = 0; j < pobjc; j++) { + int errCount = 2; + target = Tcl_FSJoinPath(split, j + 1); Tcl_IncrRefCount(target); + createDir: + /* * Call Tcl_FSStat() so that if target is a symlink that points to * a directory we will create subdirectories in that directory. @@ -273,24 +277,24 @@ TclFileMakeDirsCmd( */ if (errno == EEXIST) { - if ((Tcl_FSStat(target, &statBuf) == 0) - && S_ISDIR(statBuf.st_mode)) { - /* - * It is a directory that wasn't there before, so keep - * going without error. - */ - - Tcl_ResetResult(interp); - } else { - errfile = target; - goto done; + /* Be aware other workers could delete it immediately after + * creation, so give this worker still one chance (repeat once), + * see [270f78ca95] for description of the race-condition. + * Don't repeat the create always (to avoid endless loop). */ + if (--errCount > 0) { + goto createDir; } - } else { - errfile = target; - goto done; + /* Already tried, with delete in-between directly after + * creation, so just continue (assume created successful). */ + goto nextPart; } + + /* return with error */ + errfile = target; + goto done; } + nextPart: /* * Forget about this sub-path. */ -- cgit v0.12 From 87e508c590246b8559502d220a5e2c7d618ef338 Mon Sep 17 00:00:00 2001 From: sebres Date: Tue, 10 Jul 2018 08:19:08 +0000 Subject: amend to [1830f9f520e2abdd], fixed package.test if built without test - avoids test file error: package "Tcltest" isn't loaded statically --- tests/package.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/package.test b/tests/package.test index 2843701..69d9ddb 100644 --- a/tests/package.test +++ b/tests/package.test @@ -23,7 +23,7 @@ catch [list package require -exact Tcltest [info patchlevel]] # Do all this in a slave interp to avoid garbaging the package list set i [interp create] tcltest::loadIntoSlaveInterpreter $i {*}$argv -load {} Tcltest $i +catch [list load {} Tcltest $i] interp eval $i { namespace import -force ::tcltest::* #package forget {*}[package names] -- cgit v0.12 From 885a163b3c4ec29beb88d95cf6ff60687aa25223 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 12 Jul 2018 14:17:57 +0000 Subject: win: closes [3f7af0e21e13f1f5] - avoid "permissions denied" by `file delete`, if file stat (TclpObjStat) used internally in other worker, for example by usage of `file mkdir` etc. --- win/tclWinFile.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 1536bc0..cbd8814 100755 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -2093,7 +2093,8 @@ NativeStat( */ fileHandle = (tclWinProcs->createFileProc)(nativePath, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL); if (fileHandle != INVALID_HANDLE_VALUE) { -- cgit v0.12 From 77aceb5c5fa1c705713e90b474e94be2799f233a Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 15 Jul 2018 15:46:33 +0000 Subject: Added more tests and made [initialize] an alternate spelling for [initialise]. --- doc/define.n | 2 ++ generic/tclOOScript.h | 45 +++++++++++++++++++++++++++------------------ tests/ooUtil.test | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 18 deletions(-) diff --git a/doc/define.n b/doc/define.n index 860218f..6353d00 100644 --- a/doc/define.n +++ b/doc/define.n @@ -132,6 +132,8 @@ below), this command creates private forwarded methods. .RE .TP \fBinitialise\fI script\fR +.TP +\fBinitialize\fI script\fR .VS TIP478 This evaluates \fIscript\fR in a context which supports local variables and where the current namespace is the instance namespace of the class object diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 4b58337..ffdedb8 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -73,21 +73,6 @@ static const char *tclOOSetupScript = " string cat [info object namespace $class] {:: oo ::delegate}\n" "}\n" -"proc ::oo::define::classmethod {name {args {}} {body {}}} {\n" -" # Create the method on the class if the caller gave arguments and body\n" -" set argc [llength [info level 0]]\n" -" if {$argc == 3} {\n" -" return -code error [string cat {wrong # args: should be \"}" -" [lindex [info level 0] 0] { name ?args body?\"}]\n" -" }\n" -" set cls [uplevel 1 self]\n" -" if {$argc == 4} {\n" -" ::oo::define [::oo::DelegateName $cls] method $name $args $body\n" -" }\n" -" # Make the connection by forwarding\n" -" tailcall forward $name myclass $name\n" -"}\n" - "proc ::oo::MixinClassDelegates {class} {\n" " if {![info object isa class $class]} {\n" " return\n" @@ -106,9 +91,33 @@ static const char *tclOOSetupScript = " ::oo::objdefine $class mixin -append $delegate\n" "}\n" -"::proc ::oo::define::initialise {body} {\n" -" set clsns [info object namespace [uplevel 1 self]]\n" -" tailcall apply [list {} $body $clsns]\n" +"::namespace eval ::oo::define {" +" ::proc classmethod {name {args {}} {body {}}} {\n" +" # Create the method on the class if the caller gave arguments and body\n" +" ::set argc [::llength [::info level 0]]\n" +" ::if {$argc == 3} {\n" +" ::return -code error [::string cat {wrong # args: should be \"}" +" [::lindex [::info level 0] 0] { name ?args body?\"}]\n" +" }\n" +" ::set cls [::uplevel 1 self]\n" +" ::if {$argc == 4} {\n" +" ::oo::define [::oo::DelegateName $cls] method $name $args $body\n" +" }\n" +" # Make the connection by forwarding\n" +" ::tailcall forward $name myclass $name\n" +" }\n" + +" ::proc initialise {body} {\n" +" ::set clsns [::info object namespace [::uplevel 1 self]]\n" +" ::tailcall apply [::list {} $body $clsns]\n" +" }\n" + +" # Make the initialise command appear with US spelling too\n" +" ::namespace export initialise\n" +" ::namespace eval tmp {::namespace import ::oo::define::initialise}\n" +" ::rename ::oo::define::tmp::initialise initialize\n" +" ::namespace delete tmp\n" +" ::namespace export -clear\n" "}\n" "::oo::define ::oo::Slot {\n" diff --git a/tests/ooUtil.test b/tests/ooUtil.test index e00c70c..e796637 100644 --- a/tests/ooUtil.test +++ b/tests/ooUtil.test @@ -286,6 +286,51 @@ test ooUtil-3.2 {TIP 478: class variables} -setup { } -cleanup { parent destroy } -result {124 125 126 127 128 129} +test ooUtil-3.3 {TIP 478: class initialisation} -setup { + oo::class create parent + catch {rename ::foobar-3.3 {}} +} -body { + oo::class create ::cls { + superclass parent + initialize { + proc foobar-3.3 {} {return ok} + } + method calls {} { + list [catch foobar-3.3 msg] $msg \ + [namespace eval [info object namespace [self class]] foobar-3.3] + } + } + [cls new] calls +} -cleanup { + parent destroy +} -result {1 {invalid command name "foobar-3.3"} ok} +test ooUtil-3.4 {TIP 478: class initialisation} -setup { + oo::class create parent + catch {rename ::appendToResultVar {}} + proc ::appendToResultVar args { + lappend ::result {*}$args + } + set result {} +} -body { + trace add execution oo::define::initialise enter appendToResultVar + oo::class create ::cls { + superclass parent + initialize {proc xyzzy {} {}} + } + return $result +} -cleanup { + catch { + trace remove execution oo::define::initialise enter appendToResultVar + } + rename ::appendToResultVar {} + parent destroy +} -result {{initialize {proc xyzzy {} {}}} enter} +test ooUtil-3.5 {TIP 478: class initialisation} -body { + oo::define oo::object { + ::list [::namespace which initialise] [::namespace which initialize] \ + [::namespace origin initialise] [::namespace origin initialize] + } +} -result {::oo::define::initialise ::oo::define::initialize ::oo::define::initialise ::oo::define::initialise} test ooUtil-4.1 {TIP 478: singleton} -setup { oo::class create parent -- cgit v0.12 From 4a3f32b84a736f51135c5321007ba7c7fa8ed47e Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 16 Jul 2018 13:59:29 +0000 Subject: win: fixed test-cases (see [525ccacaef]) running under windows outside of temp-folder --- tests/cmdAH.test | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/tests/cmdAH.test b/tests/cmdAH.test index e334dff..0377064 100644 --- a/tests/cmdAH.test +++ b/tests/cmdAH.test @@ -1040,7 +1040,7 @@ test cmdAH-20.7.1 { Tcl_FileObjCmd: atime (built-in Windows names with dir path and extension) } -constraints {win} -body { file atime [file join [temporaryDirectory] CON.txt] -} -result "could not get access time for file \"[file join [temporaryDirectory] CON.txt]\"" -returnCodes error +} -match regexp -result {could not (?:get access time|read)} -returnCodes error if {[testConstraint unix] && [file exists /tmp]} { removeFile touch.me /tmp @@ -1281,7 +1281,7 @@ test cmdAH-24.14.1 { Tcl_FileObjCmd: mtime (built-in Windows names with dir path and extension) } -constraints {win} -body { file mtime [file join [temporaryDirectory] CON.txt] -} -result "could not get modification time for file \"[file join [temporaryDirectory] CON.txt]\"" -returnCodes error +} -match regexp -result {could not (?:get modification time|read)} -returnCodes error # owned test cmdAH-25.1 {Tcl_FileObjCmd: owned} -returnCodes error -body { @@ -1345,7 +1345,12 @@ test cmdAH-27.4 { test cmdAH-27.4.1 { Tcl_FileObjCmd: size (built-in Windows names with dir path and extension) } -constraints {win} -body { - file size [file join [temporaryDirectory] con.txt] + try { + set res [file size [file join [temporaryDirectory] con.txt]] + } trap {POSIX ENOENT} {} { + set res 0 + } + set res } -result 0 catch {testsetplatform $platform} @@ -1447,8 +1452,13 @@ test cmdAH-28.13 {Tcl_FileObjCmd: stat (built-in Windows names)} -constraints {w test cmdAH-28.13.1 {Tcl_FileObjCmd: stat (built-in Windows names)} -constraints {win} -setup { unset -nocomplain stat } -body { - file stat [file join [temporaryDirectory] CON.txt] stat - lmap elem {atime ctime dev gid ino mode mtime nlink size type uid} {set stat($elem)} + try { + file stat [file join [temporaryDirectory] CON.txt] stat + set res [lmap elem {atime ctime dev gid ino mode mtime nlink size type uid} {set stat($elem)}] + } trap {POSIX ENOENT} {} { + set res {0 0 -1 0 0 8630 0 0 0 characterSpecial 0} + } + set res } -result {0 0 -1 0 0 8630 0 0 0 characterSpecial 0} unset -nocomplain stat @@ -1498,7 +1508,12 @@ test cmdAH-29.6 { test cmdAH-29.6.1 { Tcl_FileObjCmd: type (built-in Windows names, with dir path and extension) } -constraints {win} -body { - file type [file join [temporaryDirectory] CON.txt] + try { + set res [file type [file join [temporaryDirectory] CON.txt]] + } trap {POSIX ENOENT} {} { + set res {characterSpecial} + } + set res } -result "characterSpecial" # Error conditions -- cgit v0.12 From 7fb72851e8562eb2e68ec94d10e1b88fb40b863e Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 20 Jul 2018 15:54:11 +0000 Subject: win: fixes x64-build within gcc-compile runtime env for (mingw64, etc): "$do64bit" may be "amd64|x64|yes", so it could find & copy wrong zlib.dll. --- win/configure | 2 +- win/configure.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/win/configure b/win/configure index be38dc3..03ad68a 100755 --- a/win/configure +++ b/win/configure @@ -4372,7 +4372,7 @@ if test "$tcl_ok" = "yes"; then ZLIB_DLL_FILE=\${ZLIB_DLL_FILE} - if test "$do64bit" = "yes"; then + if test "$do64bit" != "no"; then if test "$GCC" == "yes"; then diff --git a/win/configure.in b/win/configure.in index 5fc17a3..82351f1 100644 --- a/win/configure.in +++ b/win/configure.in @@ -128,7 +128,7 @@ AS_IF([test "${enable_shared+set}" = "set"], [ ]) AS_IF([test "$tcl_ok" = "yes"], [ AC_SUBST(ZLIB_DLL_FILE,[\${ZLIB_DLL_FILE}]) - AS_IF([test "$do64bit" = "yes"], [ + AS_IF([test "$do64bit" != "no"], [ AS_IF([test "$GCC" == "yes"],[ AC_SUBST(ZLIB_LIBS,[\${ZLIB_DIR_NATIVE}/win64/libz.dll.a]) ], [ -- cgit v0.12 From d00a212e82abf97d0bc54b040a3d0a153980d537 Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 20 Jul 2018 15:58:56 +0000 Subject: win: avoids warning by x64-build in function 'TclWinCPUID' - pointer targets in passing argument 1 of '__cpuid' differ in signedness [-Wpointer-sign] (int* vs unsigned int*) --- win/tclWin32Dll.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/tclWin32Dll.c b/win/tclWin32Dll.c index 6c973df..a85dd0c 100644 --- a/win/tclWin32Dll.c +++ b/win/tclWin32Dll.c @@ -640,7 +640,7 @@ TclWinCPUID( #if defined(HAVE_INTRIN_H) && defined(_WIN64) - __cpuid(regsPtr, index); + __cpuid((int *)regsPtr, index); status = TCL_OK; #elif defined(__GNUC__) -- cgit v0.12 From 814c867db47078736aae2dbe18cbc4191fe90aee Mon Sep 17 00:00:00 2001 From: Kevin B Kenny Date: Sat, 21 Jul 2018 18:45:09 +0000 Subject: Add a note in the 'clock' man page about the interpretation of impossible values on [clock scan] --- doc/clock.n | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/doc/clock.n b/doc/clock.n index 889a5da..6efa722 100644 --- a/doc/clock.n +++ b/doc/clock.n @@ -453,6 +453,19 @@ If this situation occurs, the first occurrence of the time is chosen. (For this reason, it is wise to have the input string contain the time zone when converting local times. This caveat does not apply to UTC times.) +.PP +If the interpretation of the groups yields an impossible time because +a field is out of range, enough of that field's unit will be added to +or subtracted from the time to bring it in range. Thus, if attempting to +scan or format day 0 of the month, one day will be subtracted from day +1 of the month, yielding the last day of the previous month. +.PP +If the interpretation of the groups yields an impossible time because +a Daylight Saving Time change skips over that time, or an ambiguous +time because a Daylight Saving Time change skips back so that the clock +observes the given time twice, and no time zone specifier (\fB%z\fR +or \fB%Z\fR) is present in the format, the time is interpreted as +if the clock had not changed. .SH "FORMAT GROUPS" .PP The following format groups are recognized by the \fBclock scan\fR and -- cgit v0.12 From 772d2da10b02fc06220a92d5f9d4f33b752a9553 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Sun, 22 Jul 2018 20:44:16 +0000 Subject: Fix for [ba921a8d98e02a96] - concatenating binary array with empty string yields the empty string. --- generic/tclStringObj.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 3bb6112..2cda2c4 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -3065,24 +3065,22 @@ TclStringCat( * Result will be pure byte array. Pre-size it */ + int numBytes; ov = objv; oc = objc; do { Tcl_Obj *objPtr = *ov++; - if (objPtr->bytes == NULL) { - int numBytes; + Tcl_GetByteArrayFromObj(objPtr, &numBytes); /* PANIC? */ - Tcl_GetByteArrayFromObj(objPtr, &numBytes); /* PANIC? */ - if (numBytes) { - last = objc - oc; - if (length == 0) { - first = last; - } else if (numBytes > INT_MAX - length) { - goto overflow; - } - length += numBytes; + if (numBytes) { + last = objc - oc; + if (length == 0) { + first = last; + } else if (numBytes > INT_MAX - length) { + goto overflow; } + length += numBytes; } } while (--oc); } else if (allowUniChar && requestUniChar) { -- cgit v0.12 From 164a7f04c03e56a310d9386fd8ddbd6319c0c788 Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 26 Jul 2018 15:51:28 +0000 Subject: New test for [Bug ba921a8d98]. --- tests/string.test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/string.test b/tests/string.test index 868fc25..3f5fd81 100644 --- a/tests/string.test +++ b/tests/string.test @@ -2015,6 +2015,9 @@ test string-29.4 {string cat, many args} { list $r1 $r2 } {0 0} +test string-30.1 {[Bug ba921a8d98]} { + string cat [set data [binary format a* hello]] [encoding convertto $data] [unset data] +} hellohello # cleanup -- cgit v0.12 From 7e727bed70653d181a190d921ea951707ad4078a Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 26 Jul 2018 15:57:38 +0000 Subject: closes [d051b77fc18d7340]: fixed segfault by integer overflow (if width by format like "%4000000000g" overflows to negative values by scan of length) --- generic/tclStringObj.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 996be77..462ef04 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -1938,6 +1938,10 @@ Tcl_AppendFormatToObj( width = 0; if (isdigit(UCHAR(ch))) { width = strtoul(format, &end, 10); + if (width < 0) { + msg = overflow; + goto errorMsg; + } format = end; step = Tcl_UtfToUniChar(format, &ch); } else if (ch == '*') { -- cgit v0.12 From c7cdc550c4e27c7ab0e3d4537cff99167b4509fd Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 26 Jul 2018 16:46:47 +0000 Subject: test cases added to cover width overflow by format (should cause limit exceeded) --- tests/format.test | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/format.test b/tests/format.test index d43b7eb..5797f2b 100644 --- a/tests/format.test +++ b/tests/format.test @@ -565,6 +565,20 @@ test format-19.3 {Bug 2830354} { string length [format %340f 0] } 340 +test format-19.4.1 {Bug d498578df4: width overflow should cause limit exceeded} \ +-constraints {longIs32bit} -body { + # in case of overflow into negative, it produces width -2 (and limit exceeded), + # in case of width will be unsigned, it will be outside limit (2GB for 32bit)... + # and it don't throw an error in case the bug is not fixed (and probably no segfault). + format %[expr {0xffffffff - 1}]g 0 +} -returnCodes error -result "max size for a Tcl value exceeded" + +test format-19.4.2 {Bug d498578df4: width overflow should cause limit exceeded} -body { + # limit should exceeds in any case, + # and it don't throw an error in case the bug is not fixed (and probably no segfault). + format %[expr {0xffffffffffffffff - 1}]g 0 +} -returnCodes error -result "max size for a Tcl value exceeded" + # cleanup catch {unset a} catch {unset b} -- cgit v0.12 From 2133e40e589348c5df1b721c1d0e0ac2f2385505 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 26 Jul 2018 18:07:34 +0000 Subject: amend to [d498578df4], still one test for [Bug ba921a8d98] with inplace by subst inside string (compiled as "strcat" instruction) --- tests/string.test | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/string.test b/tests/string.test index 3f5fd81..8fc5b0e 100644 --- a/tests/string.test +++ b/tests/string.test @@ -2015,9 +2015,12 @@ test string-29.4 {string cat, many args} { list $r1 $r2 } {0 0} -test string-30.1 {[Bug ba921a8d98]} { +test string-30.1.1 {[Bug ba921a8d98]: string cat} { string cat [set data [binary format a* hello]] [encoding convertto $data] [unset data] } hellohello +test string-30.1.2 {[Bug ba921a8d98]: inplace cat by subst (compiled to "strcat" instruction)} { + set x "[set data [binary format a* hello]][encoding convertto $data][unset data]" +} hellohello # cleanup -- cgit v0.12 From 590288982511400f0dd0f244fb753b01a8bae140 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 26 Jul 2018 18:56:41 +0000 Subject: amend after merge: 8.6th provide additionally an error-code (so missing `errCode = "OVERFLOW"`) --- generic/tclStringObj.c | 1 + 1 file changed, 1 insertion(+) diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 3139be4..493378c 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -1878,6 +1878,7 @@ Tcl_AppendFormatToObj( width = strtoul(format, &end, 10); if (width < 0) { msg = overflow; + errCode = "OVERFLOW"; goto errorMsg; } format = end; -- cgit v0.12 From c1ae69114bfdfe97b4c12ad727e4d5accc0df85f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 31 Jul 2018 19:49:51 +0000 Subject: Remove some actually dead code --- generic/tcl.decls | 4 +++ generic/tclCmdAH.c | 57 ------------------------------------------ generic/tclIOUtil.c | 29 +++------------------- generic/tclInt.h | 2 +- generic/tclOODefineCmds.c | 63 ----------------------------------------------- 5 files changed, 9 insertions(+), 146 deletions(-) diff --git a/generic/tcl.decls b/generic/tcl.decls index db1f892..b62cd28 100644 --- a/generic/tcl.decls +++ b/generic/tcl.decls @@ -2370,6 +2370,10 @@ export { void Tcl_Main(int argc, char **argv, Tcl_AppInitProc *appInitProc) } export { + void Tcl_MainEx(int argc, char **argv, Tcl_AppInitProc *appInitProc, + Tcl_Interp *interp) +} +export { const char *Tcl_InitStubs(Tcl_Interp *interp, const char *version, int exact) } diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index a48dfc7..7e117af 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -513,63 +513,6 @@ Tcl_ContinueObjCmd( } /* - *---------------------------------------------------------------------- - * - * Tcl_EncodingObjCmd -- - * - * This command manipulates encodings. - * - * Results: - * A standard Tcl result. - * - * Side effects: - * See the user documentation. - * - *---------------------------------------------------------------------- - */ - -int -Tcl_EncodingObjCmd( - ClientData dummy, /* Not used. */ - Tcl_Interp *interp, /* Current interpreter. */ - int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument objects. */ -{ - int index; - - static const char *const optionStrings[] = { - "convertfrom", "convertto", "dirs", "names", "system", - NULL - }; - enum options { - ENC_CONVERTFROM, ENC_CONVERTTO, ENC_DIRS, ENC_NAMES, ENC_SYSTEM - }; - - if (objc < 2) { - Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); - return TCL_ERROR; - } - if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, - &index) != TCL_OK) { - return TCL_ERROR; - } - - switch ((enum options) index) { - case ENC_CONVERTTO: - return EncodingConverttoObjCmd(dummy, interp, objc, objv); - case ENC_CONVERTFROM: - return EncodingConvertfromObjCmd(dummy, interp, objc, objv); - case ENC_DIRS: - return EncodingDirsObjCmd(dummy, interp, objc, objv); - case ENC_NAMES: - return EncodingNamesObjCmd(dummy, interp, objc, objv); - case ENC_SYSTEM: - return EncodingSystemObjCmd(dummy, interp, objc, objv); - } - return TCL_OK; -} - -/* *----------------------------------------------------------------------------- * * TclInitEncodingCmd -- diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index 19620e7..27acbbc 100644 --- a/generic/tclIOUtil.c +++ b/generic/tclIOUtil.c @@ -139,7 +139,6 @@ Tcl_FSRenameFileProc TclpObjRenameFile; Tcl_FSCreateDirectoryProc TclpObjCreateDirectory; Tcl_FSCopyDirectoryProc TclpObjCopyDirectory; Tcl_FSRemoveDirectoryProc TclpObjRemoveDirectory; -Tcl_FSUnloadFileProc TclpUnloadFile; Tcl_FSLinkProc TclpObjLink; Tcl_FSListVolumesProc TclpObjListVolumes; @@ -3159,8 +3158,8 @@ Tcl_FSLoadFile( * present and set to true (any integer > 0) then the unlink is skipped. */ -int -TclSkipUnlink (Tcl_Obj* shlibFile) +static int +skipUnlink (Tcl_Obj* shlibFile) { /* Order of testing: * 1. On hpux we generally want to skip unlink in general @@ -3414,7 +3413,7 @@ Tcl_LoadFile( */ if ( - !TclSkipUnlink (copyToPtr) && + !skipUnlink (copyToPtr) && (Tcl_FSDeleteFile(copyToPtr) == TCL_OK)) { Tcl_DecrRefCount(copyToPtr); @@ -3683,30 +3682,10 @@ Tcl_FSUnloadFile( } return TCL_ERROR; } - TclpUnloadFile(handle); - return TCL_OK; -} - -/* - *---------------------------------------------------------------------- - * - * TclpUnloadFile -- - * - * Unloads a library given its handle - * - * This function was once filesystem-specific, but has been made portable by - * having TclpDlopen return a structure that includes procedure pointers. - * - *---------------------------------------------------------------------- - */ - -void -TclpUnloadFile( - Tcl_LoadHandle handle) -{ if (handle->unloadFileProcPtr != NULL) { handle->unloadFileProcPtr(handle); } + return TCL_OK; } /* diff --git a/generic/tclInt.h b/generic/tclInt.h index 0a3285f..432be7a 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -2934,7 +2934,7 @@ MODULE_SCOPE char * TclDStringAppendDString(Tcl_DString *dsPtr, MODULE_SCOPE Tcl_Obj * TclDStringToObj(Tcl_DString *dsPtr); MODULE_SCOPE Tcl_Obj *const * TclFetchEnsembleRoot(Tcl_Interp *interp, Tcl_Obj *const *objv, int objc, int *objcPtr); -Tcl_Namespace * TclEnsureNamespace( +MODULE_SCOPE Tcl_Namespace * TclEnsureNamespace( Tcl_Interp *interp, Tcl_Namespace *namespacePtr); diff --git a/generic/tclOODefineCmds.c b/generic/tclOODefineCmds.c index 648ad02..c924d2b 100644 --- a/generic/tclOODefineCmds.c +++ b/generic/tclOODefineCmds.c @@ -1542,69 +1542,6 @@ TclOODefineMethodObjCmd( /* * ---------------------------------------------------------------------- * - * TclOODefineMixinObjCmd -- - * Implementation of the "mixin" subcommand of the "oo::define" and - * "oo::objdefine" commands. - * - * ---------------------------------------------------------------------- - */ - -int -TclOODefineMixinObjCmd( - ClientData clientData, - Tcl_Interp *interp, - const int objc, - Tcl_Obj *const *objv) -{ - int isInstanceMixin = (clientData != NULL); - Object *oPtr = (Object *) TclOOGetDefineCmdContext(interp); - Class **mixins; - int i; - - if (oPtr == NULL) { - return TCL_ERROR; - } - if (!isInstanceMixin && !oPtr->classPtr) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "attempt to misuse API", -1)); - Tcl_SetErrorCode(interp, "TCL", "OO", "MONKEY_BUSINESS", NULL); - return TCL_ERROR; - } - mixins = TclStackAlloc(interp, sizeof(Class *) * (objc-1)); - - for (i=1 ; iclassPtr, clsPtr)) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "may not mix a class into itself", -1)); - Tcl_SetErrorCode(interp, "TCL", "OO", "SELF_MIXIN", NULL); - goto freeAndError; - } - mixins[i-1] = clsPtr; - } - - if (isInstanceMixin) { - TclOOObjectSetMixins(oPtr, objc-1, mixins); - } else { - TclOOClassSetMixins(interp, oPtr->classPtr, objc-1, mixins); - } - - TclStackFree(interp, mixins); - return TCL_OK; - - freeAndError: - TclStackFree(interp, mixins); - return TCL_ERROR; -} - -/* - * ---------------------------------------------------------------------- - * * TclOODefineRenameMethodObjCmd -- * Implementation of the "renamemethod" subcommand of the "oo::define" * and "oo::objdefine" commands. -- cgit v0.12 From 40947c7d3eeb124dfd51a08dbdfc556a7a402bd6 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 2 Aug 2018 22:37:00 +0000 Subject: Purge end-of-line spacing --- doc/NRE.3 | 2 +- doc/clock.n | 2 +- doc/process.n | 10 +++---- generic/tclAssembly.c | 2 +- generic/tclCmdIL.c | 4 +-- generic/tclCompCmdsGR.c | 4 +-- generic/tclCompCmdsSZ.c | 14 +++++----- generic/tclOOInt.h | 2 +- generic/tclPkg.c | 2 +- generic/tclProcess.c | 70 +++++++++++++++++++++++------------------------ generic/tclStringObj.c | 8 +++--- generic/tclUtil.c | 10 +++---- library/msgcat/msgcat.tcl | 8 +++--- tests/chanio.test | 4 +-- tests/env.test | 4 +-- tests/expr.test | 2 +- tests/msgcat.test | 24 ++++++++-------- tests/namespace.test | 2 +- tests/oo.test | 2 +- tests/package.test | 4 +-- tests/process.test | 4 +-- tests/string.test | 4 +-- tests/tcltest.test | 4 +-- unix/tclEpollNotfy.c | 2 +- win/makefile.vc | 2 +- win/nmakehlp.c | 12 ++++---- win/tclWinFile.c | 10 +++---- 27 files changed, 109 insertions(+), 109 deletions(-) diff --git a/doc/NRE.3 b/doc/NRE.3 index 6078a53..6024b6a 100644 --- a/doc/NRE.3 +++ b/doc/NRE.3 @@ -1,6 +1,6 @@ .\" .\" Copyright (c) 2008 by Kevin B. Kenny. -.\" Copyright (c) 2018 by Nathan Coulter. +.\" Copyright (c) 2018 by Nathan Coulter. .\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. diff --git a/doc/clock.n b/doc/clock.n index dd7115b..e8fb8f7 100644 --- a/doc/clock.n +++ b/doc/clock.n @@ -464,7 +464,7 @@ a Daylight Saving Time change skips over that time, or an ambiguous time because a Daylight Saving Time change skips back so that the clock observes the given time twice, and no time zone specifier (\fB%z\fR or \fB%Z\fR) is present in the format, the time is interpreted as -if the clock had not changed. +if the clock had not changed. .SH "FORMAT GROUPS" .PP The following format groups are recognized by the \fBclock scan\fR and diff --git a/doc/process.n b/doc/process.n index fbe307b..536b98b 100644 --- a/doc/process.n +++ b/doc/process.n @@ -24,11 +24,11 @@ Returns the list of subprocess PIDs. .TP \fB::tcl::process status\fR ?\fIswitches\fR? ?\fIpids\fR? . -Returns a dictionary mapping subprocess PIDs to their respective status. If -\fIpids\fR is specified as a list of PIDs then the command only returns the -status of the matching subprocesses if they exist, and raises an error +Returns a dictionary mapping subprocess PIDs to their respective status. If +\fIpids\fR is specified as a list of PIDs then the command only returns the +status of the matching subprocesses if they exist, and raises an error otherwise. For active processes, the status is an empty value. For terminated -processes, the status is a list with the following format: +processes, the status is a list with the following format: .QW "{code ?\fImsg errorCode\fR?}" , where: .RS @@ -45,7 +45,7 @@ is the human-readable error message, . uses the same format as the \fBerrorCode\fR global variable .RE -Note that \fBmsg\fR and \fBerrorCode\fR are only present for abnormally +Note that \fBmsg\fR and \fBerrorCode\fR are only present for abnormally terminated processes (i.e. those where \fBcode\fR is nonzero). Under the hood this command calls \fBTcl_WaitPid\fR with the \fBWNOHANG\fR flag set for non-blocking behavior, unless the \fB\-wait\fR switch is set (see below). diff --git a/generic/tclAssembly.c b/generic/tclAssembly.c index 7368f97..6356a00 100644 --- a/generic/tclAssembly.c +++ b/generic/tclAssembly.c @@ -2253,7 +2253,7 @@ GetListIndexOperand( if (GetNextOperand(assemEnvPtr, tokenPtrPtr, &value) != TCL_OK) { return TCL_ERROR; } - + /* Convert to an integer, advance to the next token and return. */ /* * NOTE: Indexing a list with an index before it yields the diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index 3d058a4..3faaa5a 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -3333,7 +3333,7 @@ Tcl_LsearchObjCmd( * sense in doing this when the match sense is inverted. */ - /* + /* * With -stride, lower, upper and i are kept as multiples of groupSize. */ @@ -4015,7 +4015,7 @@ Tcl_LsortObjCmd( /* * Do not shrink the actual memory block used; that doesn't * work with TclStackAlloc-allocated memory. [Bug 2918962] - * + * * TODO: Consider a pointer increment to replace this * array shift. */ diff --git a/generic/tclCompCmdsGR.c b/generic/tclCompCmdsGR.c index 858a0c5..1209caf 100644 --- a/generic/tclCompCmdsGR.c +++ b/generic/tclCompCmdsGR.c @@ -34,7 +34,7 @@ static int IndexTailVarIfKnown(Tcl_Interp *interp, * TclGetIndexFromToken -- * * Parse a token to determine if an index value is known at - * compile time. + * compile time. * * Returns: * TCL_OK if parsing succeeded, and TCL_ERROR if it failed. @@ -1553,7 +1553,7 @@ TclCompileLreplaceCmd( emptyPrefix = 0; } - + /* * [lreplace] raises an error when idx1 points after the list, but * only when the list is not empty. This is maximum stupidity. diff --git a/generic/tclCompCmdsSZ.c b/generic/tclCompCmdsSZ.c index cf088bb..9434e54 100644 --- a/generic/tclCompCmdsSZ.c +++ b/generic/tclCompCmdsSZ.c @@ -1002,13 +1002,13 @@ TclCompileStringReplaceCmd( if (parsePtr->numWords < 4 || parsePtr->numWords > 5) { return TCL_ERROR; } - + /* Bytecode to compute/push string argument being replaced */ valueTokenPtr = TokenAfter(parsePtr->tokenPtr); CompileWord(envPtr, valueTokenPtr, interp, 1); /* - * Check for first index known and useful at compile time. + * Check for first index known and useful at compile time. */ tokenPtr = TokenAfter(valueTokenPtr); if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_AFTER, @@ -1017,7 +1017,7 @@ TclCompileStringReplaceCmd( } /* - * Check for last index known and useful at compile time. + * Check for last index known and useful at compile time. */ tokenPtr = TokenAfter(tokenPtr); if (TclGetIndexFromToken(tokenPtr, TCL_INDEX_BEFORE, TCL_INDEX_AFTER, @@ -1025,7 +1025,7 @@ TclCompileStringReplaceCmd( goto genericReplace; } - /* + /* * [string replace] is an odd bird. For many arguments it is * a conventional substring replacer. However it also goes out * of its way to become a no-op for many cases where it would be @@ -1108,12 +1108,12 @@ TclCompileStringReplaceCmd( * Finally we need, third: * * (first <= last) - * + * * Considered in combination with the constraints we already have, * we see that we can proceed when (first == TCL_INDEX_BEFORE) * or (last == TCL_INDEX_AFTER). These also permit simplification * of the prefix|replace|suffix construction. The other constraints, - * though, interfere with getting a guarantee that first <= last. + * though, interfere with getting a guarantee that first <= last. */ if ((first == TCL_INDEX_BEFORE) && (last >= TCL_INDEX_START)) { @@ -1141,7 +1141,7 @@ TclCompileStringReplaceCmd( /* FLOW THROUGH TO genericReplace */ } else { - /* + /* * When we have no replacement string to worry about, we may * have more luck, because the forbidden empty string replacements * are harmless when they are replaced by another empty string. diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h index a43ab76..acbd2c5 100644 --- a/generic/tclOOInt.h +++ b/generic/tclOOInt.h @@ -597,7 +597,7 @@ MODULE_SCOPE void TclOOSetupVariableResolver(Tcl_Namespace *nsPtr); #define FOREACH(var,ary) \ for(i=0 ; i<(ary).num; i++) if ((ary).list[i] == NULL) { \ continue; \ - } else if (var = (ary).list[i], 1) + } else if (var = (ary).list[i], 1) /* * A variation where the array is an array of structs. There's no issue with diff --git a/generic/tclPkg.c b/generic/tclPkg.c index 223ef93..2c16458 100644 --- a/generic/tclPkg.c +++ b/generic/tclPkg.c @@ -577,7 +577,7 @@ SelectPackage(ClientData data[], Tcl_Interp *interp, int result) { PkgAvail *availPtr, *bestPtr, *bestStablePtr; char *availVersion, *bestVersion, *bestStableVersion; /* Internal rep. of versions */ - int availStable, satisfies; + int availStable, satisfies; Require *reqPtr = data[0]; int reqc = PTR2INT(data[1]); Tcl_Obj **const reqv = data[2]; diff --git a/generic/tclProcess.c b/generic/tclProcess.c index 604b7ce..a781386 100644 --- a/generic/tclProcess.c +++ b/generic/tclProcess.c @@ -1,7 +1,7 @@ /* * tclProcess.c -- * - * This file implements the "tcl::process" ensemble for subprocess + * This file implements the "tcl::process" ensemble for subprocess * management as defined by TIP #462. * * Copyright (c) 2017 Frederic Bonnet. @@ -13,14 +13,14 @@ #include "tclInt.h" /* - * Autopurge flag. Process-global because of the way Tcl manages child + * Autopurge flag. Process-global because of the way Tcl manages child * processes (see tclPipe.c). */ static int autopurge = 1; /* Autopurge flag. */ /* - * Hash tables that keeps track of all child process statuses. Keys are the + * Hash tables that keeps track of all child process statuses. Keys are the * child process ids and resolved pids, values are (ProcessInfo *). */ @@ -29,7 +29,7 @@ typedef struct ProcessInfo { int resolvedPid; /* Resolved process id. */ int purge; /* Purge eventualy. */ TclProcessWaitStatus status;/* Process status. */ - int code; /* Error code, exit status or signal + int code; /* Error code, exit status or signal number. */ Tcl_Obj *msg; /* Error message. */ Tcl_Obj *error; /* Error code. */ @@ -47,7 +47,7 @@ static void InitProcessInfo(ProcessInfo *info, Tcl_Pid pid, int resolvedPid); static void FreeProcessInfo(ProcessInfo *info); static int RefreshProcessInfo(ProcessInfo *info, int options); -static TclProcessWaitStatus WaitProcessStatus(Tcl_Pid pid, int resolvedPid, +static TclProcessWaitStatus WaitProcessStatus(Tcl_Pid pid, int resolvedPid, int options, int *codePtr, Tcl_Obj **msgPtr, Tcl_Obj **errorObjPtr); static Tcl_Obj * BuildProcessStatusObj(ProcessInfo *info); @@ -160,7 +160,7 @@ RefreshProcessInfo( * Refresh & store status. */ - info->status = WaitProcessStatus(info->pid, info->resolvedPid, + info->status = WaitProcessStatus(info->pid, info->resolvedPid, options, &info->code, &info->msg, &info->error); if (info->msg) Tcl_IncrRefCount(info->msg); if (info->error) Tcl_IncrRefCount(info->error); @@ -214,7 +214,7 @@ WaitProcessStatus( /* * No change. */ - + return TCL_PROCESS_UNCHANGED; } @@ -370,7 +370,7 @@ BuildProcessStatusObj( /* * Normal exit, return TCL_OK. */ - + return Tcl_NewIntObj(TCL_OK); } @@ -388,7 +388,7 @@ BuildProcessStatusObj( * * ProcessListObjCmd -- * - * This function implements the 'tcl::process list' Tcl command. + * This function implements the 'tcl::process list' Tcl command. * Refer to the user documentation for details on what it does. * * Results: @@ -423,10 +423,10 @@ ProcessListObjCmd( list = Tcl_NewListObj(0, NULL); Tcl_MutexLock(&infoTablesMutex); - for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search); + for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search); entry != NULL; entry = Tcl_NextHashEntry(&search)) { info = (ProcessInfo *) Tcl_GetHashValue(entry); - Tcl_ListObjAppendElement(interp, list, + Tcl_ListObjAppendElement(interp, list, Tcl_NewIntObj(info->resolvedPid)); } Tcl_MutexUnlock(&infoTablesMutex); @@ -438,7 +438,7 @@ ProcessListObjCmd( * * ProcessStatusObjCmd -- * - * This function implements the 'tcl::process status' Tcl command. + * This function implements the 'tcl::process status' Tcl command. * Refer to the user documentation for details on what it does. * * Results: @@ -504,7 +504,7 @@ ProcessStatusObjCmd( dict = Tcl_NewDictObj(); Tcl_MutexLock(&infoTablesMutex); - for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search); + for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search); entry != NULL; entry = Tcl_NextHashEntry(&search)) { info = (ProcessInfo *) Tcl_GetHashValue(entry); RefreshProcessInfo(info, options); @@ -513,7 +513,7 @@ ProcessStatusObjCmd( /* * Purge entry. */ - + Tcl_DeleteHashEntry(entry); entry = Tcl_FindHashEntry(&infoTablePerPid, info->pid); Tcl_DeleteHashEntry(entry); @@ -523,7 +523,7 @@ ProcessStatusObjCmd( * Add to result. */ - Tcl_DictObjPut(interp, dict, Tcl_NewIntObj(info->resolvedPid), + Tcl_DictObjPut(interp, dict, Tcl_NewIntObj(info->resolvedPid), BuildProcessStatusObj(info)); } } @@ -532,7 +532,7 @@ ProcessStatusObjCmd( /* * Only return statuses of provided processes. */ - + result = Tcl_ListObjGetElements(interp, objv[1], &numPids, &pidObjs); if (result != TCL_OK) { return result; @@ -552,10 +552,10 @@ ProcessStatusObjCmd( /* * Skip unknown process. */ - + continue; } - + info = (ProcessInfo *) Tcl_GetHashValue(entry); RefreshProcessInfo(info, options); @@ -563,7 +563,7 @@ ProcessStatusObjCmd( /* * Purge entry. */ - + Tcl_DeleteHashEntry(entry); entry = Tcl_FindHashEntry(&infoTablePerPid, info->pid); Tcl_DeleteHashEntry(entry); @@ -573,7 +573,7 @@ ProcessStatusObjCmd( * Add to result. */ - Tcl_DictObjPut(interp, dict, Tcl_NewIntObj(info->resolvedPid), + Tcl_DictObjPut(interp, dict, Tcl_NewIntObj(info->resolvedPid), BuildProcessStatusObj(info)); } } @@ -587,7 +587,7 @@ ProcessStatusObjCmd( * * ProcessPurgeObjCmd -- * - * This function implements the 'tcl::process purge' Tcl command. + * This function implements the 'tcl::process purge' Tcl command. * Refer to the user documentation for details on what it does. * * Results: @@ -632,7 +632,7 @@ ProcessPurgeObjCmd( */ Tcl_MutexLock(&infoTablesMutex); - for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search); + for (entry = Tcl_FirstHashEntry(&infoTablePerResolvedPid, &search); entry != NULL; entry = Tcl_NextHashEntry(&search)) { info = (ProcessInfo *) Tcl_GetHashValue(entry); if (info->purge) { @@ -647,7 +647,7 @@ ProcessPurgeObjCmd( /* * Purge only provided processes. */ - + result = Tcl_ListObjGetElements(interp, objv[1], &numPids, &pidObjs); if (result != TCL_OK) { return result; @@ -665,7 +665,7 @@ ProcessPurgeObjCmd( /* * Skip unknown process. */ - + continue; } @@ -687,7 +687,7 @@ ProcessPurgeObjCmd( * * ProcessAutopurgeObjCmd -- * - * This function implements the 'tcl::process autopurge' Tcl command. + * This function implements the 'tcl::process autopurge' Tcl command. * Refer to the user documentation for details on what it does. * * Results: @@ -715,7 +715,7 @@ ProcessAutopurgeObjCmd( /* * Set given value. */ - + int flag; int result = Tcl_GetBooleanFromObj(interp, objv[1], &flag); if (result != TCL_OK) { @@ -725,8 +725,8 @@ ProcessAutopurgeObjCmd( autopurge = !!flag; } - /* - * Return current value. + /* + * Return current value. */ Tcl_SetObjResult(interp, Tcl_NewBooleanObj(autopurge)); @@ -821,9 +821,9 @@ TclProcessCreated( /* * Pid was reused, free old info and reuse structure. */ - + info = (ProcessInfo *) Tcl_GetHashValue(entry); - entry2 = Tcl_FindHashEntry(&infoTablePerResolvedPid, + entry2 = Tcl_FindHashEntry(&infoTablePerResolvedPid, INT2PTR(resolvedPid)); if (entry2) Tcl_DeleteHashEntry(entry2); FreeProcessInfo(info); @@ -893,8 +893,8 @@ TclProcessWait( /* * Unknown process, just call WaitProcessStatus and return. */ - - result = WaitProcessStatus(pid, TclpGetPid(pid), options, codePtr, + + result = WaitProcessStatus(pid, TclpGetPid(pid), options, codePtr, msgObjPtr, errorObjPtr); if (msgObjPtr && *msgObjPtr) Tcl_IncrRefCount(*msgObjPtr); if (errorObjPtr && *errorObjPtr) Tcl_IncrRefCount(*errorObjPtr); @@ -909,7 +909,7 @@ TclProcessWait( * so report no change. */ Tcl_MutexUnlock(&infoTablesMutex); - + return TCL_PROCESS_UNCHANGED; } @@ -919,7 +919,7 @@ TclProcessWait( * No change, stop there. */ Tcl_MutexUnlock(&infoTablesMutex); - + return TCL_PROCESS_UNCHANGED; } @@ -940,7 +940,7 @@ TclProcessWait( */ Tcl_DeleteHashEntry(entry); - entry = Tcl_FindHashEntry(&infoTablePerResolvedPid, + entry = Tcl_FindHashEntry(&infoTablePerResolvedPid, INT2PTR(info->resolvedPid)); Tcl_DeleteHashEntry(entry); FreeProcessInfo(info); diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index c106f0e..f98180f 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -490,7 +490,7 @@ TclCheckEmptyString( Tcl_DictObjSize(NULL, objPtr, &length); return length == 0; } - + if (objPtr->bytes == NULL) { return TCL_EMPTYSTRING_UNKNOWN; } @@ -3573,7 +3573,7 @@ TclStringFirst( start = 0; } if (ln == 0) { - /* We don't find empty substrings. Bizarre! + /* We don't find empty substrings. Bizarre! * Whenever this routine is turned into a proper substring * finder, change to `return start` after limits imposed. */ return -1; @@ -3970,7 +3970,7 @@ TclStringReplace( result = Tcl_NewByteArrayObj(NULL, numBytes - count + newBytes); /* PANIC? */ Tcl_SetByteArrayLength(result, 0); - TclAppendBytesToByteArray(result, bytes, first); + TclAppendBytesToByteArray(result, bytes, first); TclAppendBytesToByteArray(result, iBytes, newBytes); TclAppendBytesToByteArray(result, bytes + first + count, numBytes - count - first); @@ -3992,7 +3992,7 @@ TclStringReplace( Tcl_UniChar *ustring = Tcl_GetUnicodeFromObj(objPtr, &numChars); /* TODO: Is there an in-place option worth pursuing here? */ - + result = Tcl_NewUnicodeObj(ustring, first); if (insertPtr) { Tcl_AppendObjToObj(result, insertPtr); diff --git a/generic/tclUtil.c b/generic/tclUtil.c index 0ba6c8e..48602c4 100644 --- a/generic/tclUtil.c +++ b/generic/tclUtil.c @@ -120,7 +120,7 @@ static int FindElement(Tcl_Interp *interp, const char *string, /* * The following is the Tcl object type definition for an object that * represents a list index in the form, "end-offset". It is used as a - * performance optimization in TclGetIntForIndex. The internal rep is + * performance optimization in TclGetIntForIndex. The internal rep is * stored directly in the wideValue, so no memory management is required * for it. This is a caching intrep, keeping the result of a parse * around. This type is only created from a pre-existing string, so an @@ -1673,7 +1673,7 @@ UtfWellFormedEnd( if (Tcl_UtfCharComplete(p, l - p)) { return bytes; } - /* + /* * Malformed utf-8 end, be sure we've NTS to safe compare of end-character, * avoid segfault by access violation out of range. */ @@ -3793,7 +3793,7 @@ GetEndOffsetFromObj( return TCL_OK; } - + /* *---------------------------------------------------------------------- * @@ -3976,12 +3976,12 @@ TclIndexEncode( /* usual case, the absolute index value encodes itself */ } else if (TCL_OK == GetEndOffsetFromObj(objPtr, 0, &idx)) { /* - * We parsed an end+offset index value. + * We parsed an end+offset index value. * idx holds the offset value in the range INT_MIN...INT_MAX. */ if (idx > 0) { /* - * All end+postive or end-negative expressions + * All end+postive or end-negative expressions * always indicate "after the end". */ idx = after; diff --git a/library/msgcat/msgcat.tcl b/library/msgcat/msgcat.tcl index 598330d..129cd9c 100644 --- a/library/msgcat/msgcat.tcl +++ b/library/msgcat/msgcat.tcl @@ -49,7 +49,7 @@ namespace eval msgcat { namespace eval msgcat::mcutil { namespace export getsystemlocale getpreferences namespace ensemble create -prefix 0 - + # Map of language codes used in Windows registry to those of ISO-639 if {[info sharedlibextension] eq ".dll"} { variable WinRegToISO639 [dict create {*}{ @@ -292,7 +292,7 @@ proc msgcat::mcexists {args} { } } set src [lindex $args 0] - + if {![info exists ns]} { set ns [PackageNamespaceGet] } set loclist [PackagePreferences $ns] @@ -537,7 +537,7 @@ proc msgcat::mcpackagelocale {subcommand args} { set - preferences { # set a package locale or add a package locale set fSet [expr {$subcommand eq "set"}] - + # Check parameter if {$fSet && 1 < [llength $args] } { return -code error "wrong # args: should be\ @@ -1241,7 +1241,7 @@ proc ::msgcat::PackageNamespaceGet {} { } } } - + # Initialize the default locale proc msgcat::mcutil::getsystemlocale {} { global env diff --git a/tests/chanio.test b/tests/chanio.test index e7f51b3..300c54a 100644 --- a/tests/chanio.test +++ b/tests/chanio.test @@ -33,7 +33,7 @@ namespace eval ::tcl::test::io { loadTestedCommands catch [list package require -exact Tcltest [info patchlevel]] package require tcltests - + testConstraint testbytestring [llength [info commands testbytestring]] testConstraint testchannel [llength [info commands testchannel]] testConstraint openpipe 1 @@ -5957,7 +5957,7 @@ test chan-io-48.3 {testing readability conditions} -setup { chan close $f } -result {done {0 1 0 1 0 1 0 1 0 1 0 1 0 0}} unset path(bar) -removeFile bar +removeFile bar test chan-io-48.4 {lf write, testing readability, ^Z termination, auto read mode} -setup { file delete $path(test1) diff --git a/tests/env.test b/tests/env.test index 2c077b1..8434943 100644 --- a/tests/env.test +++ b/tests/env.test @@ -399,8 +399,8 @@ test env-8.0 { # cleanup -rename getenv {} -rename envrestore {} +rename getenv {} +rename envrestore {} rename envprep {} rename encodingrestore {} rename encodingswitch {} diff --git a/tests/expr.test b/tests/expr.test index abaf31d..713681a 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -7164,7 +7164,7 @@ test expr-52.1 { list [expr {$a eq {}}] [expr {$a < {}}] [expr {$a > {}}] [ string match {*no string representation*} [ ::tcl::unsupported::representation $a]] -} {0 0 1 1} +} {0 0 1 1} diff --git a/tests/msgcat.test b/tests/msgcat.test index 12030fb..3dde124 100644 --- a/tests/msgcat.test +++ b/tests/msgcat.test @@ -999,7 +999,7 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { mcpackagelocale isset } -result {0} - + # Tests msgcat-13.*: [mcpackageconfig subcmds] test msgcat-13.1 {mcpackageconfig no subcommand} -body { @@ -1153,7 +1153,7 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { # Tests msgcat-15.*: tcloo coverage - + # There are 4 use-cases, where 3 must be tested now: # - namespace defined, in class definition, class defined oo, classless @@ -1210,7 +1210,7 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { } -body { bar::ObjCur method1 } -result con2bar - + test msgcat-15.4 {mc in classless object with explicite namespace eval}\ -setup { # full namespace is ::msgcat::test:bar @@ -1236,7 +1236,7 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { } -body { bar::ObjCur method1 } -result con2baz - + # Test msgcat-16.*: command mcpackagenamespaceget test msgcat-16.1 {mcpackagenamespaceget in namespace procedure} -body { @@ -1298,7 +1298,7 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { # Test msgcat-17.*: mcn command - + test msgcat-17.1 {mcn no parameters} -body { mcn } -returnCodes 1\ @@ -1328,26 +1328,26 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { mcutil junk } -returnCodes 1\ -result {unknown subcommand "junk": must be getpreferences, or getsystemlocale} - + test msgcat-18.3 {mcutil - partial argument} -body { mcutil getsystem } -returnCodes 1\ -result {unknown subcommand "getsystem": must be getpreferences, or getsystemlocale} - + test msgcat-18.4 {mcutil getpreferences - no argument} -body { mcutil getpreferences } -returnCodes 1\ -result {wrong # args: should be "mcutil getpreferences locale"} - + test msgcat-18.5 {mcutil getpreferences - DE_de} -body { mcutil getpreferences DE_de } -result {de_de de {}} - + test msgcat-18.6 {mcutil getsystemlocale - wrong argument} -body { mcutil getsystemlocale DE_de } -returnCodes 1\ -result {wrong # args: should be "mcutil getsystemlocale"} - + # The result is system dependent # So just test if it runs # The environment variable version was test with test 0.x @@ -1355,8 +1355,8 @@ if {[package vsatisfies [package provide msgcat] 1.7]} { mcutil getsystemlocale set ok ok } -result {ok} - - + + cleanupTests } namespace delete ::msgcat::test diff --git a/tests/namespace.test b/tests/namespace.test index b9e6ead..606139f 100644 --- a/tests/namespace.test +++ b/tests/namespace.test @@ -205,7 +205,7 @@ test namespace-7.8 {Bug ba1419303b4c} -setup { namespace delete ns1 } } -body { - # No segmentation fault given --enable-symbols=mem. + # No segmentation fault given --enable-symbols=mem. namespace delete ns1 } -result {} diff --git a/tests/oo.test b/tests/oo.test index 9a22438..85af233 100644 --- a/tests/oo.test +++ b/tests/oo.test @@ -2153,7 +2153,7 @@ test oo-15.13.1 { } -cleanup { Cls destroy Cls2 destroy -} -result done +} -result done test oo-15.13.2 {OO: object cloning with target NS} -setup { oo::class create Super oo::class create Cls {superclass Super} diff --git a/tests/package.test b/tests/package.test index 69d9ddb..2dca06b 100644 --- a/tests/package.test +++ b/tests/package.test @@ -630,13 +630,13 @@ test package-3.54 {Tcl_PkgRequire procedure, coroutine support} -setup { } -body { coroutine coro1 apply {{} { package ifneeded t 2.1 { - yield + yield package provide t 2.1 } package require t 2.1 }} list [catch {coro1} msg] $msg -} -match glob -result {0 2.1} +} -match glob -result {0 2.1} test package-4.1 {Tcl_PackageCmd procedure} -returnCodes error -body { diff --git a/tests/process.test b/tests/process.test index b88c50a..5aa8354 100644 --- a/tests/process.test +++ b/tests/process.test @@ -63,7 +63,7 @@ test process-4.1 {exec one child} -body { set statuses [tcl::process status -wait] set status [lindex [tcl::process status $pid] 1] expr { - [llength $list] eq 1 + [llength $list] eq 1 && [lindex $list 0] eq $pid && [dict size $statuses] eq 1 && [dict get $statuses $pid] eq $status @@ -139,7 +139,7 @@ test process-5.1 {exec one child} -body { set statuses [tcl::process status -wait] set status [lindex [tcl::process status $pid] 1] expr { - [llength $list] eq 1 + [llength $list] eq 1 && [lindex $list 0] eq $pid && [dict size $statuses] eq 1 && [dict get $statuses $pid] eq $status diff --git a/tests/string.test b/tests/string.test index 772415c..d169193 100644 --- a/tests/string.test +++ b/tests/string.test @@ -280,7 +280,7 @@ test string-3.17.$noComp {string equal, unicode} { } 1 test string-3.18.$noComp {string equal, unicode} { run {string equal \334 \u00fc} -} 0 +} 0 test string-3.19.$noComp {string equal, unicode} { run {string equal \334\334\334\374\374 \334\334\334\334\334} } 0 @@ -307,7 +307,7 @@ test string-3.24.$noComp {string equal -nocase with length} { } 1 test string-3.25.$noComp {string equal -nocase with length} { run {string equal -nocase -length 3 abcde Abxyz} -} 0 +} 0 test string-3.26.$noComp {string equal -nocase with length <= 0} { run {string equal -nocase -length -1 abcde AbCdEf} } 0 diff --git a/tests/tcltest.test b/tests/tcltest.test index 0bcf342..1487865 100644 --- a/tests/tcltest.test +++ b/tests/tcltest.test @@ -908,7 +908,7 @@ removeFile load.tcl # [interpreter] test tcltest-13.1 {interpreter} { - -constraints notValgrind + -constraints notValgrind -setup { #to do: Why is $::tcltest::tcltest being saved and restored here? set old $::tcltest::tcltest @@ -926,7 +926,7 @@ test tcltest-13.1 {interpreter} { # constraint, which involves a call to [exec] that might fail after # "fork" and before "exec", in which case the forked process will not # have a chance to clean itself up before exiting, which causes - # valgrind to issue numerous "still reachable" reports. + # valgrind to issue numerous "still reachable" reports. set ::tcltest::tcltest $old } } diff --git a/unix/tclEpollNotfy.c b/unix/tclEpollNotfy.c index ca194c7..2abfd47 100644 --- a/unix/tclEpollNotfy.c +++ b/unix/tclEpollNotfy.c @@ -88,7 +88,7 @@ typedef struct { LIST_HEAD(PlatformReadyFileHandlerList, FileHandler); typedef struct ThreadSpecificData { - FileHandler *triggerFilePtr; + FileHandler *triggerFilePtr; FileHandler *firstFileHandlerPtr; /* Pointer to head of file handler list. */ struct PlatformReadyFileHandlerList firstReadyFileHandlerPtr; diff --git a/win/makefile.vc b/win/makefile.vc index ceeaa02..1aae9a3 100644 --- a/win/makefile.vc +++ b/win/makefile.vc @@ -55,7 +55,7 @@ # c:\tcl_src\win\>nmake -f makefile.vc release # c:\tcl_src\win\>nmake -f makefile.vc test # c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl -# c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs +# c:\tcl_src\win\>nmake -f makefile.vc release OPTS=pdbs # c:\tcl_src\win\>nmake -f makefile.vc release OPTS=symbols # diff --git a/win/nmakehlp.c b/win/nmakehlp.c index b759020..1655d48 100644 --- a/win/nmakehlp.c +++ b/win/nmakehlp.c @@ -686,10 +686,10 @@ SubstituteFile( BOOL FileExists(LPCTSTR szPath) { #ifndef INVALID_FILE_ATTRIBUTES - #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) + #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) #endif DWORD pathAttr = GetFileAttributes(szPath); - return (pathAttr != INVALID_FILE_ATTRIBUTES && + return (pathAttr != INVALID_FILE_ATTRIBUTES && !(pathAttr & FILE_ATTRIBUTE_DIRECTORY)); } @@ -740,7 +740,7 @@ static int LocateDependencyHelper(const char *dir, const char *keypath) #if 0 /* This function is not available in Visual C++ 6 */ /* * Use numerics 0 -> FindExInfoStandard, - * 1 -> FindExSearchLimitToDirectories, + * 1 -> FindExSearchLimitToDirectories, * as these are not defined in Visual C++ 6 */ hSearch = FindFirstFileEx(path, 0, &finfo, 1, NULL, 0); @@ -755,7 +755,7 @@ static int LocateDependencyHelper(const char *dir, const char *keypath) do { int sublen; /* - * We need to check it is a directory despite the + * We need to check it is a directory despite the * FindExSearchLimitToDirectories in the above call. See SDK docs */ if ((finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) @@ -786,7 +786,7 @@ static int LocateDependencyHelper(const char *dir, const char *keypath) * that is used to confirm it is the correct directory. * The search path for the package directory is currently only * the parent and grandparent of the current working directory. - * If found, the command prints + * If found, the command prints * name_DIRPATH= * and returns 0. If not found, does not print anything and returns 1. */ @@ -794,7 +794,7 @@ static int LocateDependency(const char *keypath) { int i, ret; static char *paths[] = {"..", "..\\..", "..\\..\\.."}; - + for (i = 0; i < (sizeof(paths)/sizeof(paths[0])); ++i) { ret = LocateDependencyHelper(paths[i], keypath); if (ret == 0) diff --git a/win/tclWinFile.c b/win/tclWinFile.c index a88ef72..dfeeef1 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1440,9 +1440,9 @@ TclpGetUserHome( domain = Tcl_UtfFindFirst(name, '@'); if (domain == NULL) { const char *ptr; - + /* no domain - firstly check it's the current user */ - if ( (ptr = TclpGetUserName(&ds)) != NULL + if ( (ptr = TclpGetUserName(&ds)) != NULL && strcasecmp(name, ptr) == 0 ) { /* try safest and fastest way to get current user home */ @@ -1465,7 +1465,7 @@ TclpGetUserHome( Tcl_DStringInit(&ds); wName = Tcl_UtfToUniCharDString(name, nameLen, &ds); while (NetUserGetInfo(wDomain, wName, 1, (LPBYTE *) &uiPtr) != 0) { - /* + /* * user does not exists - if domain was not specified, * try again using current domain. */ @@ -1580,7 +1580,7 @@ NativeAccess( return 0; } - /* + /* * If it's not a directory (assume file), do several fast checks: */ if (!(attr & FILE_ATTRIBUTE_DIRECTORY)) { @@ -2009,7 +2009,7 @@ NativeStat( */ fileHandle = CreateFile(nativePath, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL); -- cgit v0.12 From de5637f8531520d3487ac143217d326570a4b0d8 Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 3 Aug 2018 13:46:30 +0000 Subject: ioTrans.test: fixed cleanup - avoids `error deleting "tempchanfile": permission denied`: file seems to be locked/opened inside interp $idb --- tests/ioTrans.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ioTrans.test b/tests/ioTrans.test index 3bebc70..85e427a 100644 --- a/tests/ioTrans.test +++ b/tests/ioTrans.test @@ -1240,8 +1240,8 @@ test iortrans-11.1 {origin interpreter of moved transform destroyed during acces set res }] } -cleanup { - tempdone interp delete $idb + tempdone } -result {Owner lost} test iortrans-11.2 {delete interp of reflected transform} -setup { interp create slave -- cgit v0.12 From d87884d51b4fcfc7d9a09febe9a351dad983d732 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 5 Aug 2018 15:01:30 +0000 Subject: Make it much easier to maintain the TclOO initialisation script. --- generic/tclOOScript.h | 44 ++++++------ generic/tclOOScript.tcl | 183 ++++++++++++++++++++++++++++++++++++++++++++++++ tools/makeHeader.tcl | 164 +++++++++++++++++++++++++++++++++++++++++++ unix/Makefile.in | 9 +++ 4 files changed, 379 insertions(+), 21 deletions(-) create mode 100644 generic/tclOOScript.tcl create mode 100644 tools/makeHeader.tcl diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index ffdedb8..1f345fb 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -21,16 +21,17 @@ */ static const char *tclOOSetupScript = +/* !BEGIN!: Do not edit below this line. */ "::proc ::oo::Helpers::callback {method args} {\n" " list [uplevel 1 {namespace which my}] $method {*}$args\n" "}\n" - +"\n" "::proc ::oo::Helpers::mymethod {method args} {\n" " list [uplevel 1 {namespace which my}] $method {*}$args\n" "}\n" - +"\n" "::proc ::oo::Helpers::classvariable {name args} {\n" -" # Get a reference to the class's namespace\n" +" # Get a reference to the class\'s namespace\n" " set ns [info object namespace [uplevel 1 {self class}]]\n" " # Double up the list of variable names\n" " foreach v [list $name {*}$args] {\n" @@ -42,10 +43,10 @@ static const char *tclOOSetupScript = " }\n" " lappend vs $v $v\n" " }\n" -" # Lastly, link the caller's local variables to the class's variables\n" +" # Lastly, link the caller\'s local variables to the class\'s variables\n" " tailcall namespace upvar $ns {*}$vs\n" "}\n" - +"\n" "::proc ::oo::Helpers::link {args} {\n" " set ns [uplevel 1 {namespace current}]\n" " foreach link $args {\n" @@ -68,11 +69,11 @@ static const char *tclOOSetupScript = " rename $cmd {}\n" " }\n" "}\n" - +"\n" "::proc ::oo::DelegateName {class} {\n" " string cat [info object namespace $class] {:: oo ::delegate}\n" "}\n" - +"\n" "proc ::oo::MixinClassDelegates {class} {\n" " if {![info object isa class $class]} {\n" " return\n" @@ -81,7 +82,7 @@ static const char *tclOOSetupScript = " if {![info object isa class $delegate]} {\n" " return\n" " }\n" -" foreach c [info class superclass $class] {" +" foreach c [info class superclass $class] {\n" " set d [::oo::DelegateName $c]\n" " if {![info object isa class $d]} {\n" " continue\n" @@ -90,14 +91,14 @@ static const char *tclOOSetupScript = " }\n" " ::oo::objdefine $class mixin -append $delegate\n" "}\n" - -"::namespace eval ::oo::define {" +"\n" +"::namespace eval ::oo::define {\n" " ::proc classmethod {name {args {}} {body {}}} {\n" " # Create the method on the class if the caller gave arguments and body\n" " ::set argc [::llength [::info level 0]]\n" " ::if {$argc == 3} {\n" -" ::return -code error [::string cat {wrong # args: should be \"}" -" [::lindex [::info level 0] 0] { name ?args body?\"}]\n" +" ::return -code error [::string cat {wrong # args: should be \"} \\\n" +" [::lindex [::info level 0] 0] { name \?args body\?\"}]\n" " }\n" " ::set cls [::uplevel 1 self]\n" " ::if {$argc == 4} {\n" @@ -106,12 +107,12 @@ static const char *tclOOSetupScript = " # Make the connection by forwarding\n" " ::tailcall forward $name myclass $name\n" " }\n" - +"\n" " ::proc initialise {body} {\n" " ::set clsns [::info object namespace [::uplevel 1 self]]\n" " ::tailcall apply [::list {} $body $clsns]\n" " }\n" - +"\n" " # Make the initialise command appear with US spelling too\n" " ::namespace export initialise\n" " ::namespace eval tmp {::namespace import ::oo::define::initialise}\n" @@ -119,11 +120,11 @@ static const char *tclOOSetupScript = " ::namespace delete tmp\n" " ::namespace export -clear\n" "}\n" - +"\n" "::oo::define ::oo::Slot {\n" " method Get {} {return -code error unimplemented}\n" " method Set list {return -code error unimplemented}\n" - +"\n" " method -set args {tailcall my Set $args}\n" " method -append args {\n" " set current [uplevel 1 [list [namespace which my] Get]]\n" @@ -131,7 +132,7 @@ static const char *tclOOSetupScript = " }\n" " method -clear {} {tailcall my Set {}}\n" " forward --default-operation my -append\n" - +"\n" " method unknown {args} {\n" " set def --default-operation\n" " if {[llength $args] == 0} {\n" @@ -141,7 +142,7 @@ static const char *tclOOSetupScript = " }\n" " next {*}$args\n" " }\n" - +"\n" " export -set -append -clear\n" " unexport unknown destroy\n" "}\n" @@ -149,7 +150,7 @@ static const char *tclOOSetupScript = "::oo::objdefine ::oo::define::superclass forward --default-operation my -set\n" "::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" "::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n" - +"\n" "::oo::define ::oo::class method {originObject} {\n" " next $originObject\n" " # Rebuild the class inheritance delegation class\n" @@ -162,7 +163,7 @@ static const char *tclOOSetupScript = " }]\n" " }\n" "}\n" - +"\n" "::oo::class create ::oo::singleton {\n" " superclass ::oo::class\n" " variable object\n" @@ -180,11 +181,12 @@ static const char *tclOOSetupScript = " return $object\n" " }\n" "}\n" - +"\n" "::oo::class create ::oo::abstract {\n" " superclass ::oo::class\n" " unexport create createWithNamespace new\n" "}\n" +/* !END!: Do not edit above this line. */ ; /* diff --git a/generic/tclOOScript.tcl b/generic/tclOOScript.tcl new file mode 100644 index 0000000..e0af23f --- /dev/null +++ b/generic/tclOOScript.tcl @@ -0,0 +1,183 @@ +# tclOOScript.h -- +# +# This file contains support scripts for TclOO. They are defined here so +# that the code can be definitely run even in safe interpreters; TclOO's +# core setup is safe. +# +# Copyright (c) 2012-2018 Donal K. Fellows +# Copyright (c) 2013 Andreas Kupries +# Copyright (c) 2017 Gerald Lester +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +::proc ::oo::Helpers::callback {method args} { + list [uplevel 1 {namespace which my}] $method {*}$args +} + +::proc ::oo::Helpers::mymethod {method args} { + list [uplevel 1 {namespace which my}] $method {*}$args +} + +::proc ::oo::Helpers::classvariable {name args} { + # Get a reference to the class's namespace + set ns [info object namespace [uplevel 1 {self class}]] + # Double up the list of variable names + foreach v [list $name {*}$args] { + if {[string match *(*) $v]} { + return -code error [string cat {bad variable name "} $v {": can't create a scalar variable that looks like an array element}] + } + if {[string match *::* $v]} { + return -code error [string cat {bad variable name "} $v {": can't create a local variable with a namespace separator in it}] + } + lappend vs $v $v + } + # Lastly, link the caller's local variables to the class's variables + tailcall namespace upvar $ns {*}$vs +} + +::proc ::oo::Helpers::link {args} { + set ns [uplevel 1 {namespace current}] + foreach link $args { + if {[llength $link] == 2} { + lassign $link src dst + } else { + lassign $link src + set dst $src + } + if {![string match ::* $src]} { + set src [string cat $ns :: $src] + } + interp alias {} $src {} ${ns}::my $dst + trace add command ${ns}::my delete [list ::oo::Helpers::Unlink $src] + } + return +} +::proc ::oo::Helpers::Unlink {cmd args} { + if {[namespace which $cmd] ne {}} { + rename $cmd {} + } +} + +::proc ::oo::DelegateName {class} { + string cat [info object namespace $class] {:: oo ::delegate} +} + +proc ::oo::MixinClassDelegates {class} { + if {![info object isa class $class]} { + return + } + set delegate [::oo::DelegateName $class] + if {![info object isa class $delegate]} { + return + } + foreach c [info class superclass $class] { + set d [::oo::DelegateName $c] + if {![info object isa class $d]} { + continue + } + ::oo::define $delegate superclass -append $d + } + ::oo::objdefine $class mixin -append $delegate +} + +::namespace eval ::oo::define { + ::proc classmethod {name {args {}} {body {}}} { + # Create the method on the class if the caller gave arguments and body + ::set argc [::llength [::info level 0]] + ::if {$argc == 3} { + ::return -code error [::string cat {wrong # args: should be "} \ + [::lindex [::info level 0] 0] { name ?args body?"}] + } + ::set cls [::uplevel 1 self] + ::if {$argc == 4} { + ::oo::define [::oo::DelegateName $cls] method $name $args $body + } + # Make the connection by forwarding + ::tailcall forward $name myclass $name + } + + ::proc initialise {body} { + ::set clsns [::info object namespace [::uplevel 1 self]] + ::tailcall apply [::list {} $body $clsns] + } + + # Make the initialise command appear with US spelling too + ::namespace export initialise + ::namespace eval tmp {::namespace import ::oo::define::initialise} + ::rename ::oo::define::tmp::initialise initialize + ::namespace delete tmp + ::namespace export -clear +} + +::oo::define ::oo::Slot { + method Get {} {return -code error unimplemented} + method Set list {return -code error unimplemented} + + method -set args {tailcall my Set $args} + method -append args { + set current [uplevel 1 [list [namespace which my] Get]] + tailcall my Set [list {*}$current {*}$args] + } + method -clear {} {tailcall my Set {}} + forward --default-operation my -append + + method unknown {args} { + set def --default-operation + if {[llength $args] == 0} { + tailcall my $def + } elseif {![string match -* [lindex $args 0]]} { + tailcall my $def {*}$args + } + next {*}$args + } + + export -set -append -clear + unexport unknown destroy +} + +::oo::objdefine ::oo::define::superclass forward --default-operation my -set +::oo::objdefine ::oo::define::mixin forward --default-operation my -set +::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set + +::oo::define ::oo::class method {originObject} { + next $originObject + # Rebuild the class inheritance delegation class + set originDelegate [::oo::DelegateName $originObject] + set targetDelegate [::oo::DelegateName [self]] + if {[info object isa class $originDelegate] && ![info object isa class $targetDelegate]} { + ::oo::copy $originDelegate $targetDelegate + ::oo::objdefine [self] mixin -set {*}[lmap c [info object mixin [self]] { + if {$c eq $originDelegate} {set targetDelegate} {set c} + }] + } +} + +::oo::class create ::oo::singleton { + superclass ::oo::class + variable object + unexport create createWithNamespace + method new args { + if {![info exists object] || ![info object isa object $object]} { + set object [next {*}$args] + ::oo::objdefine $object method destroy {} { + return -code error {may not destroy a singleton object} + } + ::oo::objdefine $object method {originObject} { + return -code error {may not clone a singleton object} + } + } + return $object + } +} + +::oo::class create ::oo::abstract { + superclass ::oo::class + unexport create createWithNamespace new +} + +# Local Variables: +# mode: tcl +# c-basic-offset: 4 +# fill-column: 78 +# End: diff --git a/tools/makeHeader.tcl b/tools/makeHeader.tcl new file mode 100644 index 0000000..8af35fc --- /dev/null +++ b/tools/makeHeader.tcl @@ -0,0 +1,164 @@ +# makeHeader.tcl -- +# +# This script generates embeddable C source (in a .h file) from a .tcl +# script. +# +# Copyright (c) 2018 Donal K. Fellows +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +package require Tcl 8.6 + +namespace eval makeHeader { + + #################################################################### + # + # mapSpecial -- + # Transform a single line so that it is able to be put in a C string. + # + proc mapSpecial {str} { + # All Tcl metacharacters and key C backslash sequences + set MAP { + \" \\\\\" \\ \\\\\\\\ $ \\$ [ \\[ ] \\] ' \\\\' ? \\\\? + \a \\\\a \b \\\\b \f \\\\f \n \\\\n \r \\\\r \t \\\\t \v \\\\v + } + set XFORM {[format \\\\\\\\u%04x {*}[scan & %c]]} + + subst [regsub -all {[^\u0020-\u007e]} [string map $MAP $str] $XFORM] + } + + #################################################################### + # + # processScript -- + # Transform a whole sequence of lines with [mapSpecial]. + # + proc processScript {scriptLines} { + lmap line $scriptLines { + format {"%s"} [mapSpecial $line\n] + } + } + + #################################################################### + # + # updateTemplate -- + # Rewrite a template to contain the content from the input script. + # + proc updateTemplate {dataVar scriptLines} { + set BEGIN "*!BEGIN!: Do not edit below this line.*" + set END "*!END!: Do not edit above this line.*" + + upvar 1 $dataVar data + + set from [lsearch -glob $data $BEGIN] + set to [lsearch -glob $data $END] + if {$from == -1 || $to == -1 || $from >= $to} { + throw BAD "not a template" + } + + set data [lreplace $data $from+1 $to-1 {*}[processScript $scriptLines]] + } + + #################################################################### + # + # stripSurround -- + # Removes the header and footer comments from a (line-split list of + # lines of) Tcl script code. + # + proc stripSurround {lines} { + set RE {^\s*$|^#} + set state 0 + set lines [lmap line [lreverse $lines] { + if {!$state && [regexp $RE $line]} continue { + set state 1 + set line + } + }] + return [lmap line [lreverse $lines] { + if {$state && [regexp $RE $line]} continue { + set state 0 + set line + } + }] + } + + #################################################################### + # + # updateTemplateFile -- + # Rewrites a template file with the lines of the given script. + # + proc updateTemplateFile {headerFile scriptLines} { + set f [open $headerFile "r+"] + try { + set content [split [chan read -nonewline $f] "\n"] + updateTemplate content [stripSurround $scriptLines] + chan seek $f 0 + chan puts $f [join $content \n] + chan truncate $f + } trap BAD msg { + # Add the filename to the message + throw BAD "${headerFile}: $msg" + } finally { + chan close $f + } + } + + #################################################################### + # + # readScript -- + # Read a script from a file and return its lines. + # + proc readScript {script} { + set f [open $script] + try { + chan configure $f -encoding utf-8 + return [split [string trim [chan read $f]] "\n"] + } finally { + chan close $f + } + } + + #################################################################### + # + # run -- + # The main program of this script. + # + proc run {args} { + try { + if {[llength $args] != 2} { + throw ARGS "inputTclScript templateFile" + } + lassign $args inputTclScript templateFile + + puts "Inserting $inputTclScript into $templateFile" + set scriptLines [readScript $inputTclScript] + updateTemplateFile $templateFile $scriptLines + exit 0 + } trap ARGS msg { + puts stderr "wrong # args: should be \"[file tail $::argv0] $msg\"" + exit 2 + } trap BAD msg { + puts stderr $msg + exit 1 + } trap POSIX msg { + puts stderr $msg + exit 1 + } on error {- opts} { + puts stderr [dict get $opts -errorinfo] + exit 3 + } + } +} + +######################################################################## +# +# Launch the main program +# +if {[info script] eq $::argv0} { + makeHeader::run {*}$::argv +} + +# Local-Variables: +# mode: tcl +# fill-column: 78 +# End: diff --git a/unix/Makefile.in b/unix/Makefile.in index e4d77e6..6ae2b0d 100644 --- a/unix/Makefile.in +++ b/unix/Makefile.in @@ -1895,6 +1895,11 @@ $(GENERIC_DIR)/tclOOStubInit.c: $(GENERIC_DIR)/tclOO.decls @echo "Developers may want to run \"make genstubs\" to regenerate." @echo "This warning can be safely ignored, do not report as a bug!" +$(GENERIC_DIR)/tclOOScript.h: $(GENERIC_DIR)/tclOOScript.tcl + @echo "Warning: tclOOScript.h may be out of date." + @echo "Developers may want to run \"make genscript\" to regenerate." + @echo "This warning can be safely ignored, do not report as a bug!" + genstubs: $(NATIVE_TCLSH) $(TOOL_DIR)/genStubs.tcl $(GENERIC_DIR) \ $(GENERIC_DIR)/tcl.decls $(GENERIC_DIR)/tclInt.decls \ @@ -1902,6 +1907,10 @@ genstubs: $(NATIVE_TCLSH) $(TOOL_DIR)/genStubs.tcl $(GENERIC_DIR) \ $(GENERIC_DIR)/tclOO.decls +genscript: + $(NATIVE_TCLSH) $(TOOL_DIR)/makeHeader.tcl \ + $(GENERIC_DIR)/tclOOScript.tcl $(GENERIC_DIR)/tclOOScript.h + # # Target to check that all exported functions have an entry in the stubs # tables. -- cgit v0.12 From ed3e9c60bac115e7ad38b1169dacc8bf974e99d2 Mon Sep 17 00:00:00 2001 From: dkf Date: Sun, 5 Aug 2018 20:14:04 +0000 Subject: Combine the two bits of scripted code inside TclOO's definition into one. --- generic/tclOO.c | 14 +--- generic/tclOOScript.h | 215 +++++++++++++++++++++++++++--------------------- generic/tclOOScript.tcl | 188 +++++++++++++++++++++++++++--------------- tools/makeHeader.tcl | 2 +- 4 files changed, 244 insertions(+), 175 deletions(-) diff --git a/generic/tclOO.c b/generic/tclOO.c index 630e977..7702b2b 100644 --- a/generic/tclOO.c +++ b/generic/tclOO.c @@ -312,7 +312,7 @@ InitFoundation( ThreadLocalData *tsdPtr = Tcl_GetThreadData(&tsdKey, sizeof(ThreadLocalData)); Foundation *fPtr = ckalloc(sizeof(Foundation)); - Tcl_Obj *namePtr, *argsPtr, *bodyPtr; + Tcl_Obj *namePtr; Tcl_DString buffer; Command *cmdPtr; int i; @@ -392,18 +392,6 @@ InitFoundation( } /* - * Create the default method implementation, used when 'oo::copy' - * is called to finish the copying of one object to another. - */ - - TclNewLiteralStringObj(argsPtr, "originObject"); - Tcl_IncrRefCount(argsPtr); - bodyPtr = Tcl_NewStringObj(clonedBody, -1); - TclOONewProcMethod(interp, fPtr->objectCls, 0, fPtr->clonedName, argsPtr, - bodyPtr, NULL); - TclDecrRefCount(argsPtr); - - /* * Finish setting up the class of classes by marking the 'new' method as * private; classes, unlike general objects, must have explicit names. We * also need to create the constructor for classes. diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 1f345fb..d89e81a 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -22,74 +22,103 @@ static const char *tclOOSetupScript = /* !BEGIN!: Do not edit below this line. */ -"::proc ::oo::Helpers::callback {method args} {\n" -" list [uplevel 1 {namespace which my}] $method {*}$args\n" -"}\n" +"::namespace eval ::oo::Helpers {\n" +" ::namespace path {}\n" "\n" -"::proc ::oo::Helpers::mymethod {method args} {\n" -" list [uplevel 1 {namespace which my}] $method {*}$args\n" -"}\n" +" proc callback {method args} {\n" +" list [uplevel 1 {::namespace which my}] $method {*}$args\n" +" }\n" "\n" -"::proc ::oo::Helpers::classvariable {name args} {\n" -" # Get a reference to the class\'s namespace\n" -" set ns [info object namespace [uplevel 1 {self class}]]\n" -" # Double up the list of variable names\n" -" foreach v [list $name {*}$args] {\n" -" if {[string match *(*) $v]} {\n" -" return -code error [string cat {bad variable name \"} $v {\": can\'t create a scalar variable that looks like an array element}]\n" -" }\n" -" if {[string match *::* $v]} {\n" -" return -code error [string cat {bad variable name \"} $v {\": can\'t create a local variable with a namespace separator in it}]\n" -" }\n" -" lappend vs $v $v\n" +" proc mymethod {method args} {\n" +" list [uplevel 1 {::namespace which my}] $method {*}$args\n" " }\n" -" # Lastly, link the caller\'s local variables to the class\'s variables\n" -" tailcall namespace upvar $ns {*}$vs\n" -"}\n" "\n" -"::proc ::oo::Helpers::link {args} {\n" -" set ns [uplevel 1 {namespace current}]\n" -" foreach link $args {\n" -" if {[llength $link] == 2} {\n" -" lassign $link src dst\n" -" } else {\n" -" lassign $link src\n" -" set dst $src\n" -" }\n" -" if {![string match ::* $src]} {\n" -" set src [string cat $ns :: $src]\n" +" proc classvariable {name args} {\n" +" # Get a reference to the class\'s namespace\n" +" set ns [info object namespace [uplevel 1 {self class}]]\n" +" # Double up the list of variable names\n" +" foreach v [list $name {*}$args] {\n" +" if {[string match *(*) $v]} {\n" +" variable \n" +" return -code error [format \\\n" +" {bad variable name \"%s\": can\'t create a scalar variable that looks like an array element} \\\n" +" $v]\n" +" }\n" +" if {[string match *::* $v]} {\n" +" return -code error [format \\\n" +" {bad variable name \"%s\": can\'t create a local variable with a namespace separator in it} \\\n" +" $v]\n" +" }\n" +" lappend vs $v $v\n" " }\n" -" interp alias {} $src {} ${ns}::my $dst\n" -" trace add command ${ns}::my delete [list ::oo::Helpers::Unlink $src]\n" +" # Lastly, link the caller\'s local variables to the class\'s variables\n" +" tailcall namespace upvar $ns {*}$vs\n" " }\n" -" return\n" -"}\n" -"::proc ::oo::Helpers::Unlink {cmd args} {\n" -" if {[namespace which $cmd] ne {}} {\n" -" rename $cmd {}\n" +"\n" +" proc link {args} {\n" +" set ns [uplevel 1 {::namespace current}]\n" +" foreach link $args {\n" +" if {[llength $link] == 2} {\n" +" lassign $link src dst\n" +" } else {\n" +" lassign $link src\n" +" set dst $src\n" +" }\n" +" if {![string match ::* $src]} {\n" +" set src [string cat $ns :: $src]\n" +" }\n" +" interp alias {} $src {} ${ns}::my $dst\n" +" trace add command ${ns}::my delete [list \\\n" +" ::oo::UnlinkLinkedCommand $src]\n" +" }\n" +" return\n" " }\n" "}\n" "\n" -"::proc ::oo::DelegateName {class} {\n" -" string cat [info object namespace $class] {:: oo ::delegate}\n" -"}\n" +"::namespace eval ::oo {\n" +" proc UnlinkLinkedCommand {cmd args} {\n" +" if {[namespace which $cmd] ne {}} {\n" +" rename $cmd {}\n" +" }\n" +" }\n" "\n" -"proc ::oo::MixinClassDelegates {class} {\n" -" if {![info object isa class $class]} {\n" -" return\n" +" proc DelegateName {class} {\n" +" string cat [info object namespace $class] {:: oo ::delegate}\n" " }\n" -" set delegate [::oo::DelegateName $class]\n" -" if {![info object isa class $delegate]} {\n" -" return\n" +"\n" +" proc MixinClassDelegates {class} {\n" +" if {![info object isa class $class]} {\n" +" return\n" +" }\n" +" set delegate [DelegateName $class]\n" +" if {![info object isa class $delegate]} {\n" +" return\n" +" }\n" +" foreach c [info class superclass $class] {\n" +" set d [DelegateName $c]\n" +" if {![info object isa class $d]} {\n" +" continue\n" +" }\n" +" define $delegate superclass -append $d\n" +" }\n" +" objdefine $class mixin -append $delegate\n" " }\n" -" foreach c [info class superclass $class] {\n" -" set d [::oo::DelegateName $c]\n" -" if {![info object isa class $d]} {\n" -" continue\n" +"\n" +" proc UpdateClassDelegatesAfterClone {originObject targetObject} {\n" +" # Rebuild the class inheritance delegation class\n" +" set originDelegate [DelegateName $originObject]\n" +" set targetDelegate [DelegateName $targetObject]\n" +" if {\n" +" [info object isa class $originDelegate]\n" +" && ![info object isa class $targetDelegate]\n" +" } then {\n" +" copy $originDelegate $targetDelegate\n" +" objdefine $targetObject mixin -set \\\n" +" {*}[lmap c [info object mixin $targetObject] {\n" +" if {$c eq $originDelegate} {set targetDelegate} {set c}\n" +" }]\n" " }\n" -" ::oo::define $delegate superclass -append $d\n" " }\n" -" ::oo::objdefine $class mixin -append $delegate\n" "}\n" "\n" "::namespace eval ::oo::define {\n" @@ -97,8 +126,9 @@ static const char *tclOOSetupScript = " # Create the method on the class if the caller gave arguments and body\n" " ::set argc [::llength [::info level 0]]\n" " ::if {$argc == 3} {\n" -" ::return -code error [::string cat {wrong # args: should be \"} \\\n" -" [::lindex [::info level 0] 0] { name \?args body\?\"}]\n" +" ::return -code error [::format \\\n" +" {wrong # args: should be \"%s name \?args body\?\"} \\\n" +" [::lindex [::info level 0] 0]]\n" " }\n" " ::set cls [::uplevel 1 self]\n" " ::if {$argc == 4} {\n" @@ -151,17 +181,43 @@ static const char *tclOOSetupScript = "::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" "::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n" "\n" +"::oo::define ::oo::object method {originObject} {\n" +" # Copy over the procedures from the original namespace\n" +" foreach p [info procs [info object namespace $originObject]::*] {\n" +" set args [info args $p]\n" +" set idx -1\n" +" foreach a $args {\n" +" if {[info default $p $a d]} {\n" +" lset args [incr idx] [list $a $d]\n" +" } else {\n" +" lset args [incr idx] [list $a]\n" +" }\n" +" }\n" +" set b [info body $p]\n" +" set p [namespace tail $p]\n" +" proc $p $args $b\n" +" }\n" +" # Copy over the variables from the original namespace\n" +" foreach v [info vars [info object namespace $originObject]::*] {\n" +" upvar 0 $v vOrigin\n" +" namespace upvar [namespace current] [namespace tail $v] vNew\n" +" if {[info exists vOrigin]} {\n" +" if {[array exists vOrigin]} {\n" +" array set vNew [array get vOrigin]\n" +" } else {\n" +" set vNew $vOrigin\n" +" }\n" +" }\n" +" }\n" +" # General commands, sub-namespaces and advancd variable config (traces,\n" +" # etc) are *not* copied over. Classes that want that should do it\n" +" # themselves.\n" +"}\n" +"\n" "::oo::define ::oo::class method {originObject} {\n" " next $originObject\n" " # Rebuild the class inheritance delegation class\n" -" set originDelegate [::oo::DelegateName $originObject]\n" -" set targetDelegate [::oo::DelegateName [self]]\n" -" if {[info object isa class $originDelegate] && ![info object isa class $targetDelegate]} {\n" -" ::oo::copy $originDelegate $targetDelegate\n" -" ::oo::objdefine [self] mixin -set {*}[lmap c [info object mixin [self]] {\n" -" if {$c eq $originDelegate} {set targetDelegate} {set c}\n" -" }]\n" -" }\n" +" ::oo::UpdateClassDelegatesAfterClone $originObject [self]\n" "}\n" "\n" "::oo::class create ::oo::singleton {\n" @@ -188,37 +244,6 @@ static const char *tclOOSetupScript = "}\n" /* !END!: Do not edit above this line. */ ; - -/* - * The body of the method of oo::object. - */ - -static const char *clonedBody = -"# Copy over the procedures from the original namespace\n" -"foreach p [info procs [info object namespace $originObject]::*] {\n" -" set args [info args $p]\n" -" set idx -1\n" -" foreach a $args {\n" -" lset args [incr idx]" -" [if {[info default $p $a d]} {list $a $d} {list $a}]\n" -" }\n" -" set b [info body $p]\n" -" set p [namespace tail $p]\n" -" proc $p $args $b\n" -"}\n" -"# Copy over the variables from the original namespace\n" -"foreach v [info vars [info object namespace $originObject]::*] {\n" -" upvar 0 $v vOrigin\n" -" namespace upvar [namespace current] [namespace tail $v] vNew\n" -" if {[info exists vOrigin]} {\n" -" if {[array exists vOrigin]} {\n" -" array set vNew [array get vOrigin]\n" -" } else {\n" -" set vNew $vOrigin\n" -" }\n" -" }\n" -"}\n" -; #endif /* TCL_OO_SCRIPT_H */ diff --git a/generic/tclOOScript.tcl b/generic/tclOOScript.tcl index e0af23f..c0b4d1f 100644 --- a/generic/tclOOScript.tcl +++ b/generic/tclOOScript.tcl @@ -11,74 +11,103 @@ # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. -::proc ::oo::Helpers::callback {method args} { - list [uplevel 1 {namespace which my}] $method {*}$args -} +::namespace eval ::oo::Helpers { + ::namespace path {} -::proc ::oo::Helpers::mymethod {method args} { - list [uplevel 1 {namespace which my}] $method {*}$args -} + proc callback {method args} { + list [uplevel 1 {::namespace which my}] $method {*}$args + } -::proc ::oo::Helpers::classvariable {name args} { - # Get a reference to the class's namespace - set ns [info object namespace [uplevel 1 {self class}]] - # Double up the list of variable names - foreach v [list $name {*}$args] { - if {[string match *(*) $v]} { - return -code error [string cat {bad variable name "} $v {": can't create a scalar variable that looks like an array element}] - } - if {[string match *::* $v]} { - return -code error [string cat {bad variable name "} $v {": can't create a local variable with a namespace separator in it}] - } - lappend vs $v $v + proc mymethod {method args} { + list [uplevel 1 {::namespace which my}] $method {*}$args } - # Lastly, link the caller's local variables to the class's variables - tailcall namespace upvar $ns {*}$vs -} -::proc ::oo::Helpers::link {args} { - set ns [uplevel 1 {namespace current}] - foreach link $args { - if {[llength $link] == 2} { - lassign $link src dst - } else { - lassign $link src - set dst $src - } - if {![string match ::* $src]} { - set src [string cat $ns :: $src] - } - interp alias {} $src {} ${ns}::my $dst - trace add command ${ns}::my delete [list ::oo::Helpers::Unlink $src] + proc classvariable {name args} { + # Get a reference to the class's namespace + set ns [info object namespace [uplevel 1 {self class}]] + # Double up the list of variable names + foreach v [list $name {*}$args] { + if {[string match *(*) $v]} { + variable + return -code error [format \ + {bad variable name "%s": can't create a scalar variable that looks like an array element} \ + $v] + } + if {[string match *::* $v]} { + return -code error [format \ + {bad variable name "%s": can't create a local variable with a namespace separator in it} \ + $v] + } + lappend vs $v $v + } + # Lastly, link the caller's local variables to the class's variables + tailcall namespace upvar $ns {*}$vs } - return -} -::proc ::oo::Helpers::Unlink {cmd args} { - if {[namespace which $cmd] ne {}} { - rename $cmd {} + + proc link {args} { + set ns [uplevel 1 {::namespace current}] + foreach link $args { + if {[llength $link] == 2} { + lassign $link src dst + } else { + lassign $link src + set dst $src + } + if {![string match ::* $src]} { + set src [string cat $ns :: $src] + } + interp alias {} $src {} ${ns}::my $dst + trace add command ${ns}::my delete [list \ + ::oo::UnlinkLinkedCommand $src] + } + return } } -::proc ::oo::DelegateName {class} { - string cat [info object namespace $class] {:: oo ::delegate} -} +::namespace eval ::oo { + proc UnlinkLinkedCommand {cmd args} { + if {[namespace which $cmd] ne {}} { + rename $cmd {} + } + } -proc ::oo::MixinClassDelegates {class} { - if {![info object isa class $class]} { - return + proc DelegateName {class} { + string cat [info object namespace $class] {:: oo ::delegate} } - set delegate [::oo::DelegateName $class] - if {![info object isa class $delegate]} { - return + + proc MixinClassDelegates {class} { + if {![info object isa class $class]} { + return + } + set delegate [DelegateName $class] + if {![info object isa class $delegate]} { + return + } + foreach c [info class superclass $class] { + set d [DelegateName $c] + if {![info object isa class $d]} { + continue + } + define $delegate superclass -append $d + } + objdefine $class mixin -append $delegate } - foreach c [info class superclass $class] { - set d [::oo::DelegateName $c] - if {![info object isa class $d]} { - continue - } - ::oo::define $delegate superclass -append $d + + proc UpdateClassDelegatesAfterClone {originObject targetObject} { + # Rebuild the class inheritance delegation class + set originDelegate [DelegateName $originObject] + set targetDelegate [DelegateName $targetObject] + if { + [info object isa class $originDelegate] + && ![info object isa class $targetDelegate] + } then { + copy $originDelegate $targetDelegate + objdefine $targetObject mixin -set \ + {*}[lmap c [info object mixin $targetObject] { + if {$c eq $originDelegate} {set targetDelegate} {set c} + }] + } } - ::oo::objdefine $class mixin -append $delegate } ::namespace eval ::oo::define { @@ -86,8 +115,9 @@ proc ::oo::MixinClassDelegates {class} { # Create the method on the class if the caller gave arguments and body ::set argc [::llength [::info level 0]] ::if {$argc == 3} { - ::return -code error [::string cat {wrong # args: should be "} \ - [::lindex [::info level 0] 0] { name ?args body?"}] + ::return -code error [::format \ + {wrong # args: should be "%s name ?args body?"} \ + [::lindex [::info level 0] 0]] } ::set cls [::uplevel 1 self] ::if {$argc == 4} { @@ -140,17 +170,43 @@ proc ::oo::MixinClassDelegates {class} { ::oo::objdefine ::oo::define::mixin forward --default-operation my -set ::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set +::oo::define ::oo::object method {originObject} { + # Copy over the procedures from the original namespace + foreach p [info procs [info object namespace $originObject]::*] { + set args [info args $p] + set idx -1 + foreach a $args { + if {[info default $p $a d]} { + lset args [incr idx] [list $a $d] + } else { + lset args [incr idx] [list $a] + } + } + set b [info body $p] + set p [namespace tail $p] + proc $p $args $b + } + # Copy over the variables from the original namespace + foreach v [info vars [info object namespace $originObject]::*] { + upvar 0 $v vOrigin + namespace upvar [namespace current] [namespace tail $v] vNew + if {[info exists vOrigin]} { + if {[array exists vOrigin]} { + array set vNew [array get vOrigin] + } else { + set vNew $vOrigin + } + } + } + # General commands, sub-namespaces and advancd variable config (traces, + # etc) are *not* copied over. Classes that want that should do it + # themselves. +} + ::oo::define ::oo::class method {originObject} { next $originObject # Rebuild the class inheritance delegation class - set originDelegate [::oo::DelegateName $originObject] - set targetDelegate [::oo::DelegateName [self]] - if {[info object isa class $originDelegate] && ![info object isa class $targetDelegate]} { - ::oo::copy $originDelegate $targetDelegate - ::oo::objdefine [self] mixin -set {*}[lmap c [info object mixin [self]] { - if {$c eq $originDelegate} {set targetDelegate} {set c} - }] - } + ::oo::UpdateClassDelegatesAfterClone $originObject [self] } ::oo::class create ::oo::singleton { diff --git a/tools/makeHeader.tcl b/tools/makeHeader.tcl index 8af35fc..5197da6 100644 --- a/tools/makeHeader.tcl +++ b/tools/makeHeader.tcl @@ -21,7 +21,7 @@ namespace eval makeHeader { # All Tcl metacharacters and key C backslash sequences set MAP { \" \\\\\" \\ \\\\\\\\ $ \\$ [ \\[ ] \\] ' \\\\' ? \\\\? - \a \\\\a \b \\\\b \f \\\\f \n \\\\n \r \\\\r \t \\\\t \v \\\\v + \a \\\\a \b \\\\b \f \\\\f \n \\\\n \r \\\\r \t { } \v \\\\v } set XFORM {[format \\\\\\\\u%04x {*}[scan & %c]]} -- cgit v0.12 From 8346cad0dd5a449892a1522020403d24f4186179 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 8 Aug 2018 06:45:29 +0000 Subject: Fix harmless gcc warning --- generic/tclDate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generic/tclDate.c b/generic/tclDate.c index e4dd000..717a1b3 100644 --- a/generic/tclDate.c +++ b/generic/tclDate.c @@ -1348,7 +1348,7 @@ yyparse (info) int yychar; /* The semantic value of the look-ahead symbol. */ -YYSTYPE yylval; +YYSTYPE yylval = {0}; /* Number of syntax errors so far. */ int yynerrs; -- cgit v0.12 From 6c78bf0adcb250437f1bb8dd19f13b7c2aa83848 Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 8 Aug 2018 20:48:06 +0000 Subject: Repair breakage in recent refactoring of env.test --- tests/env.test | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/env.test b/tests/env.test index 2c077b1..e6ce44d 100644 --- a/tests/env.test +++ b/tests/env.test @@ -53,7 +53,7 @@ proc envprep {} { foreach name [array names env] { # Keep some environment variables that support operation of the tcltest # package. - if {[string toupper $name] ni $keep} { + if {[string toupper $name] ni [string toupper $keep]} { unset env($name) } } @@ -98,11 +98,11 @@ proc cleanup1 {} { } variable keep { - TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH DISPLAY SHLIB_PATH - SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH + TCL_LIBRARY PATH LD_LIBRARY_PATH LIBPATH PURE_PROG_NAME DISPLAY + SHLIB_PATH SYSTEMDRIVE SYSTEMROOT DYLD_LIBRARY_PATH DYLD_FRAMEWORK_PATH DYLD_NEW_LOCAL_SHARED_REGIONS DYLD_NO_FIX_PREBINDING - SECURITYSESSIONID LANG WINDIR TERM - CONNOMPROGRAMFILES PROGRAMFILES COMMONPROGRAMW6432 PROGRAMW6432 + __CF_USER_TEXT_ENCODING SECURITYSESSIONID LANG WINDIR TERM + CommonProgramFiles ProgramFiles CommonProgramW6432 ProgramW6432 } variable printenvScript [makeFile [string map [list @keep@ [list $keep]] { -- cgit v0.12 From e53f3cf9c69144d698f8b7899817243cd4d8d7e5 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Fri, 10 Aug 2018 15:03:14 +0000 Subject: Tighten up SaveResult.3, make installManPage more robust against newlines. --- doc/SaveResult.3 | 109 ++++++++++++++++++---------------------------------- unix/installManPage | 43 ++++++++++++++------- 2 files changed, 66 insertions(+), 86 deletions(-) diff --git a/doc/SaveResult.3 b/doc/SaveResult.3 index 6dd6cb6..1ddc1ad 100644 --- a/doc/SaveResult.3 +++ b/doc/SaveResult.3 @@ -1,6 +1,7 @@ '\" '\" Copyright (c) 1997 by Sun Microsystems, Inc. '\" Contributions from Don Porter, NIST, 2004. (not subject to US copyright) +'\" Copyright (c) 2018 Nathan Coulter. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -9,7 +10,9 @@ .so man.macros .BS .SH NAME -Tcl_SaveInterpState, Tcl_RestoreInterpState, Tcl_DiscardInterpState, Tcl_SaveResult, Tcl_RestoreResult, Tcl_DiscardResult \- save and restore an interpreter's state +Tcl_SaveInterpState, Tcl_RestoreInterpState, Tcl_DiscardInterpState, +Tcl_SaveResult, Tcl_RestoreResult, Tcl_DiscardResult \- Save and restore the +state of an an interpreter. .SH SYNOPSIS .nf \fB#include \fR @@ -30,91 +33,53 @@ int .SH ARGUMENTS .AS Tcl_InterpState savedPtr .AP Tcl_Interp *interp in -Interpreter for which state should be saved. +The current interpreter. .AP int status in -Return code value to save as part of interpreter state. +The return code for the state. .AP Tcl_InterpState state in -Saved state token to be restored or discarded. +A token for saved state. .AP Tcl_SavedResult *savedPtr in -Pointer to location where interpreter result should be saved or restored. +A pointer to storage for saved state. .BE .SH DESCRIPTION .PP -These routines allows a C procedure to take a snapshot of the current -state of an interpreter so that it can be restored after a call -to \fBTcl_Eval\fR or some other routine that modifies the interpreter -state. There are two triplets of routines meant to work together. +These routines save the state of an interpreter before a call to a routine such +as \fBTcl_Eval\fR, and restore the state afterwards. .PP -The first triplet stores the snapshot of interpreter state in -an opaque token returned by \fBTcl_SaveInterpState\fR. That token -value may then be passed back to one of \fBTcl_RestoreInterpState\fR -or \fBTcl_DiscardInterpState\fR, depending on whether the interp -state is to be restored. So long as one of the latter two routines -is called, Tcl will take care of memory management. +\fBTcl_SaveInterpState\fR saves the parts of \fIinterp\fR that comprise the +result of a script, including the resulting value, the return code passed as +\fIstatus\fR, and any options such as \fB\-errorinfo\fR and \fB\-errorcode\fR. +It returns a token for the saved state. The interpreter result is not reset +and no interpreter state is changed. .PP -The second triplet stores the snapshot of only the interpreter -result (not its complete state) in memory allocated by the caller. -These routines are passed a pointer to \fBTcl_SavedResult\fR -that is used to store enough information to restore the interpreter result. -\fBTcl_SavedResult\fR can be allocated on the stack of the calling -procedure. These routines do not save the state of any error -information in the interpreter (e.g. the \fB\-errorcode\fR or -\fB\-errorinfo\fR return options, when an error is in progress). +\fBTcl_RestoreInterpState\fR restores the state indicated by \fIstate\fR and +returns the \fIstatus\fR originally passed in the corresponding call to +\fBTcl_SaveInterpState\fR. .PP -Because the routines \fBTcl_SaveInterpState\fR, -\fBTcl_RestoreInterpState\fR, and \fBTcl_DiscardInterpState\fR perform -a superset of the functions provided by the other routines, -any new code should only make use of the more powerful routines. -The older, weaker routines \fBTcl_SaveResult\fR, \fBTcl_RestoreResult\fR, -and \fBTcl_DiscardResult\fR continue to exist only for the sake -of existing programs that may already be using them. +If a saved state is not restored, \fBTcl_DiscardInterpState\fR must be called +to release it. A token used to discard or restore state must not be used +again. .PP -\fBTcl_SaveInterpState\fR takes a snapshot of those portions of -interpreter state that make up the full result of script evaluation. -This include the interpreter result, the return code (passed in -as the \fIstatus\fR argument, and any return options, including -\fB\-errorinfo\fR and \fB\-errorcode\fR when an error is in progress. -This snapshot is returned as an opaque token of type \fBTcl_InterpState\fR. -The call to \fBTcl_SaveInterpState\fR does not itself change the -state of the interpreter. Unlike \fBTcl_SaveResult\fR, it does -not reset the interpreter. +\fBTcl_SaveResult\fR, \fBTcl_RestoreResult\fR, and \fBTcl_DiscardResult\fR are +deprecated. Instead use \fBTcl_SaveInterpState\fR, +\fBTcl_RestoreInterpState\fR, and \fBTcl_DiscardInterpState\fR, which are more +capable. .PP -\fBTcl_RestoreInterpState\fR accepts a \fBTcl_InterpState\fR token -previously returned by \fBTcl_SaveInterpState\fR and restores the -state of the interp to the state held in that snapshot. The return -value of \fBTcl_RestoreInterpState\fR is the status value originally -passed to \fBTcl_SaveInterpState\fR when the snapshot token was -created. +\fBTcl_SaveResult\fR moves the string result and structured result of +\fIinterp\fR to the location \fIstatePtr\fR points to and returns the +interpreter result to its initial state. It does not save options such as +\fB\-errorcode\fR or \fB\-errorinfo\fR. .PP -\fBTcl_DiscardInterpState\fR is called to release a \fBTcl_InterpState\fR -token previously returned by \fBTcl_SaveInterpState\fR when that -snapshot is not to be restored to an interp. +\fBTcl_RestoreResult\fR clears any existing result or error in \fIinterp\fR and +moves the string result and structured result from \fIstatePtr\fR back to +\fIinterp\fR. \fIstatePtr\fR is then in an undefined state and cannot be used +until passed again to \fBTcl_SaveResult\fR. .PP -The \fBTcl_InterpState\fR token returned by \fBTcl_SaveInterpState\fR -must eventually be passed to either \fBTcl_RestoreInterpState\fR -or \fBTcl_DiscardInterpState\fR to avoid a memory leak. Once -the \fBTcl_InterpState\fR token is passed to one of them, the -token is no longer valid and should not be used anymore. -.PP -\fBTcl_SaveResult\fR moves the string and value results -of \fIinterp\fR into the location specified by \fIstatePtr\fR. -\fBTcl_SaveResult\fR clears the result for \fIinterp\fR and -leaves the result in its normal empty initialized state. -.PP -\fBTcl_RestoreResult\fR moves the string and value results from -\fIstatePtr\fR back into \fIinterp\fR. Any result or error that was -already in the interpreter will be cleared. The \fIstatePtr\fR is left -in an uninitialized state and cannot be used until another call to -\fBTcl_SaveResult\fR. -.PP -\fBTcl_DiscardResult\fR releases the saved interpreter state -stored at \fBstatePtr\fR. The state structure is left in an -uninitialized state and cannot be used until another call to +\fBTcl_DiscardResult\fR releases the state stored at \fBstatePtr\fR, which is +then in an undefined state and cannot be used until passed again to \fBTcl_SaveResult\fR. .PP -Once \fBTcl_SaveResult\fR is called to save the interpreter -result, either \fBTcl_RestoreResult\fR or -\fBTcl_DiscardResult\fR must be called to properly clean up the -memory associated with the saved state. +If a saved result is not restored, \fBTcl_DiscardResult\fR must be called to +release it. .SH KEYWORDS result, state, interp diff --git a/unix/installManPage b/unix/installManPage index 1f1cbde..09a31dd 100755 --- a/unix/installManPage +++ b/unix/installManPage @@ -60,20 +60,35 @@ test -z "$SymOrLoc" && SymOrLoc="$Dir/" # Names=`sed -n ' # Look for a line that starts with .SH NAME - /^\.SH NAME/{ -# Read next line - n -# Remove all commas ... - s/,//g -# ... and backslash-escaped spaces. - s/\\\ //g -# Delete from \- to the end of line - s/ \\\-.*// -# Convert all non-space non-alphanum sequences -# to single underscores. - s/[^ A-Za-z0-9][^ A-Za-z0-9]*/_/g -# print the result and exit - p;q + /^\.SH NAME/,/^\./{ + + + /^\./!{ + + # Remove all commas... + s/,//g + + # ... and backslash-escaped spaces. + s/\\\ //g + + /\\\-.*/{ + # Delete from \- to the end of line + s/ \\\-.*// + h + s/.*/./ + x + } + + # Convert all non-space non-alphanum sequences + # to single underscores. + s/[^ A-Za-z0-9][^ A-Za-z0-9]*/_/g + p + g + /^\./{ + q + } + } + }' $ManPage` if test -z "$Names" ; then -- cgit v0.12 From 18c102aa7055571d742e867b44e765ac3ed0213c Mon Sep 17 00:00:00 2001 From: pooryorick Date: Fri, 10 Aug 2018 18:44:41 +0000 Subject: minor changes to documentation --- doc/SaveResult.3 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/SaveResult.3 b/doc/SaveResult.3 index 1ddc1ad..51ccb23 100644 --- a/doc/SaveResult.3 +++ b/doc/SaveResult.3 @@ -33,7 +33,7 @@ int .SH ARGUMENTS .AS Tcl_InterpState savedPtr .AP Tcl_Interp *interp in -The current interpreter. +The interpreter for the operation. .AP int status in The return code for the state. .AP Tcl_InterpState state in @@ -65,18 +65,18 @@ deprecated. Instead use \fBTcl_SaveInterpState\fR, \fBTcl_RestoreInterpState\fR, and \fBTcl_DiscardInterpState\fR, which are more capable. .PP -\fBTcl_SaveResult\fR moves the string result and structured result of -\fIinterp\fR to the location \fIstatePtr\fR points to and returns the -interpreter result to its initial state. It does not save options such as -\fB\-errorcode\fR or \fB\-errorinfo\fR. +\fBTcl_SaveResult\fR moves the result of \fIinterp\fR to the location +\fIstatePtr\fR points to and returns the interpreter result to its initial +state. It does not save options such as \fB\-errorcode\fR or +\fB\-errorinfo\fR. .PP \fBTcl_RestoreResult\fR clears any existing result or error in \fIinterp\fR and -moves the string result and structured result from \fIstatePtr\fR back to -\fIinterp\fR. \fIstatePtr\fR is then in an undefined state and cannot be used -until passed again to \fBTcl_SaveResult\fR. +moves the result from \fIstatePtr\fR back to \fIinterp\fR. \fIstatePtr\fR is +then in an undefined state and must not be used until passed again to +\fBTcl_SaveResult\fR. .PP \fBTcl_DiscardResult\fR releases the state stored at \fBstatePtr\fR, which is -then in an undefined state and cannot be used until passed again to +then in an undefined state and must not be used until passed again to \fBTcl_SaveResult\fR. .PP If a saved result is not restored, \fBTcl_DiscardResult\fR must be called to -- cgit v0.12 From 245151ad96d79fe7ec45da4d538d344edbfff4cb Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 11 Aug 2018 11:18:20 +0000 Subject: Improve script compilation. Prove that compilation works with safe interps. --- generic/tclOOScript.h | 416 +++++++++++++++++++++----------------------- generic/tclOOScript.tcl | 447 ++++++++++++++++++++++++++++++++++-------------- tests/ooUtil.test | 39 +++++ tools/makeHeader.tcl | 22 ++- 4 files changed, 572 insertions(+), 352 deletions(-) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index d89e81a..741a5c4 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -22,225 +22,205 @@ static const char *tclOOSetupScript = /* !BEGIN!: Do not edit below this line. */ -"::namespace eval ::oo::Helpers {\n" -" ::namespace path {}\n" -"\n" -" proc callback {method args} {\n" -" list [uplevel 1 {::namespace which my}] $method {*}$args\n" -" }\n" -"\n" -" proc mymethod {method args} {\n" -" list [uplevel 1 {::namespace which my}] $method {*}$args\n" -" }\n" -"\n" -" proc classvariable {name args} {\n" -" # Get a reference to the class\'s namespace\n" -" set ns [info object namespace [uplevel 1 {self class}]]\n" -" # Double up the list of variable names\n" -" foreach v [list $name {*}$args] {\n" -" if {[string match *(*) $v]} {\n" -" variable \n" -" return -code error [format \\\n" -" {bad variable name \"%s\": can\'t create a scalar variable that looks like an array element} \\\n" -" $v]\n" -" }\n" -" if {[string match *::* $v]} {\n" -" return -code error [format \\\n" -" {bad variable name \"%s\": can\'t create a local variable with a namespace separator in it} \\\n" -" $v]\n" -" }\n" -" lappend vs $v $v\n" -" }\n" -" # Lastly, link the caller\'s local variables to the class\'s variables\n" -" tailcall namespace upvar $ns {*}$vs\n" -" }\n" -"\n" -" proc link {args} {\n" -" set ns [uplevel 1 {::namespace current}]\n" -" foreach link $args {\n" -" if {[llength $link] == 2} {\n" -" lassign $link src dst\n" -" } else {\n" -" lassign $link src\n" -" set dst $src\n" -" }\n" -" if {![string match ::* $src]} {\n" -" set src [string cat $ns :: $src]\n" -" }\n" -" interp alias {} $src {} ${ns}::my $dst\n" -" trace add command ${ns}::my delete [list \\\n" -" ::oo::UnlinkLinkedCommand $src]\n" -" }\n" -" return\n" -" }\n" -"}\n" -"\n" "::namespace eval ::oo {\n" -" proc UnlinkLinkedCommand {cmd args} {\n" -" if {[namespace which $cmd] ne {}} {\n" -" rename $cmd {}\n" -" }\n" -" }\n" -"\n" -" proc DelegateName {class} {\n" -" string cat [info object namespace $class] {:: oo ::delegate}\n" -" }\n" -"\n" -" proc MixinClassDelegates {class} {\n" -" if {![info object isa class $class]} {\n" -" return\n" -" }\n" -" set delegate [DelegateName $class]\n" -" if {![info object isa class $delegate]} {\n" -" return\n" -" }\n" -" foreach c [info class superclass $class] {\n" -" set d [DelegateName $c]\n" -" if {![info object isa class $d]} {\n" -" continue\n" -" }\n" -" define $delegate superclass -append $d\n" -" }\n" -" objdefine $class mixin -append $delegate\n" -" }\n" -"\n" -" proc UpdateClassDelegatesAfterClone {originObject targetObject} {\n" -" # Rebuild the class inheritance delegation class\n" -" set originDelegate [DelegateName $originObject]\n" -" set targetDelegate [DelegateName $targetObject]\n" -" if {\n" -" [info object isa class $originDelegate]\n" -" && ![info object isa class $targetDelegate]\n" -" } then {\n" -" copy $originDelegate $targetDelegate\n" -" objdefine $targetObject mixin -set \\\n" -" {*}[lmap c [info object mixin $targetObject] {\n" -" if {$c eq $originDelegate} {set targetDelegate} {set c}\n" -" }]\n" -" }\n" -" }\n" -"}\n" -"\n" -"::namespace eval ::oo::define {\n" -" ::proc classmethod {name {args {}} {body {}}} {\n" -" # Create the method on the class if the caller gave arguments and body\n" -" ::set argc [::llength [::info level 0]]\n" -" ::if {$argc == 3} {\n" -" ::return -code error [::format \\\n" -" {wrong # args: should be \"%s name \?args body\?\"} \\\n" -" [::lindex [::info level 0] 0]]\n" -" }\n" -" ::set cls [::uplevel 1 self]\n" -" ::if {$argc == 4} {\n" -" ::oo::define [::oo::DelegateName $cls] method $name $args $body\n" -" }\n" -" # Make the connection by forwarding\n" -" ::tailcall forward $name myclass $name\n" -" }\n" -"\n" -" ::proc initialise {body} {\n" -" ::set clsns [::info object namespace [::uplevel 1 self]]\n" -" ::tailcall apply [::list {} $body $clsns]\n" -" }\n" -"\n" -" # Make the initialise command appear with US spelling too\n" -" ::namespace export initialise\n" -" ::namespace eval tmp {::namespace import ::oo::define::initialise}\n" -" ::rename ::oo::define::tmp::initialise initialize\n" -" ::namespace delete tmp\n" -" ::namespace export -clear\n" -"}\n" -"\n" -"::oo::define ::oo::Slot {\n" -" method Get {} {return -code error unimplemented}\n" -" method Set list {return -code error unimplemented}\n" -"\n" -" method -set args {tailcall my Set $args}\n" -" method -append args {\n" -" set current [uplevel 1 [list [namespace which my] Get]]\n" -" tailcall my Set [list {*}$current {*}$args]\n" -" }\n" -" method -clear {} {tailcall my Set {}}\n" -" forward --default-operation my -append\n" -"\n" -" method unknown {args} {\n" -" set def --default-operation\n" -" if {[llength $args] == 0} {\n" -" tailcall my $def\n" -" } elseif {![string match -* [lindex $args 0]]} {\n" -" tailcall my $def {*}$args\n" -" }\n" -" next {*}$args\n" -" }\n" -"\n" -" export -set -append -clear\n" -" unexport unknown destroy\n" -"}\n" -"\n" -"::oo::objdefine ::oo::define::superclass forward --default-operation my -set\n" -"::oo::objdefine ::oo::define::mixin forward --default-operation my -set\n" -"::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set\n" -"\n" -"::oo::define ::oo::object method {originObject} {\n" -" # Copy over the procedures from the original namespace\n" -" foreach p [info procs [info object namespace $originObject]::*] {\n" -" set args [info args $p]\n" -" set idx -1\n" -" foreach a $args {\n" -" if {[info default $p $a d]} {\n" -" lset args [incr idx] [list $a $d]\n" -" } else {\n" -" lset args [incr idx] [list $a]\n" -" }\n" -" }\n" -" set b [info body $p]\n" -" set p [namespace tail $p]\n" -" proc $p $args $b\n" -" }\n" -" # Copy over the variables from the original namespace\n" -" foreach v [info vars [info object namespace $originObject]::*] {\n" -" upvar 0 $v vOrigin\n" -" namespace upvar [namespace current] [namespace tail $v] vNew\n" -" if {[info exists vOrigin]} {\n" -" if {[array exists vOrigin]} {\n" -" array set vNew [array get vOrigin]\n" -" } else {\n" -" set vNew $vOrigin\n" -" }\n" -" }\n" -" }\n" -" # General commands, sub-namespaces and advancd variable config (traces,\n" -" # etc) are *not* copied over. Classes that want that should do it\n" -" # themselves.\n" -"}\n" -"\n" -"::oo::define ::oo::class method {originObject} {\n" -" next $originObject\n" -" # Rebuild the class inheritance delegation class\n" -" ::oo::UpdateClassDelegatesAfterClone $originObject [self]\n" -"}\n" -"\n" -"::oo::class create ::oo::singleton {\n" -" superclass ::oo::class\n" -" variable object\n" -" unexport create createWithNamespace\n" -" method new args {\n" -" if {![info exists object] || ![info object isa object $object]} {\n" -" set object [next {*}$args]\n" -" ::oo::objdefine $object method destroy {} {\n" -" return -code error {may not destroy a singleton object}\n" -" }\n" -" ::oo::objdefine $object method {originObject} {\n" -" return -code error {may not clone a singleton object}\n" -" }\n" -" }\n" -" return $object\n" -" }\n" -"}\n" -"\n" -"::oo::class create ::oo::abstract {\n" -" superclass ::oo::class\n" -" unexport create createWithNamespace new\n" +"\t::namespace path {}\n" +"\tnamespace eval Helpers {\n" +"\t\t::namespace path {}\n" +"\t\tproc callback {method args} {\n" +"\t\t\tlist [uplevel 1 {::namespace which my}] $method {*}$args\n" +"\t\t}\n" +"\t\tnamespace export callback\n" +"\t\tnamespace eval tmp {namespace import ::oo::Helpers::callback}\n" +"\t\tnamespace export -clear\n" +"\t\trename tmp::callback mymethod\n" +"\t\tnamespace delete tmp\n" +"\t\tproc classvariable {name args} {\n" +"\t\t\tset ns [info object namespace [uplevel 1 {self class}]]\n" +"\t\t\tforeach v [list $name {*}$args] {\n" +"\t\t\t\tif {[string match *(*) $v]} {\n" +"\t\t\t\t\tset reason \"can\'t create a scalar variable that looks like an array element\"\n" +"\t\t\t\t\treturn -code error -errorcode {TCL UPVAR LOCAL_ELEMENT} \\\n" +"\t\t\t\t\t\t[format {bad variable name \"%s\": %s} $v $reason]\n" +"\t\t\t\t}\n" +"\t\t\t\tif {[string match *::* $v]} {\n" +"\t\t\t\t\tset reason \"can\'t create a local variable with a namespace separator in it\"\n" +"\t\t\t\t\treturn -code error -errorcode {TCL UPVAR INVERTED} \\\n" +"\t\t\t\t\t\t[format {bad variable name \"%s\": %s} $v $reason]\n" +"\t\t\t\t}\n" +"\t\t\t\tlappend vs $v $v\n" +"\t\t\t}\n" +"\t\t\ttailcall namespace upvar $ns {*}$vs\n" +"\t\t}\n" +"\t\tproc link {args} {\n" +"\t\t\tset ns [uplevel 1 {::namespace current}]\n" +"\t\t\tforeach link $args {\n" +"\t\t\t\tif {[llength $link] == 2} {\n" +"\t\t\t\t\tlassign $link src dst\n" +"\t\t\t\t} elseif {[llength $link] == 1} {\n" +"\t\t\t\t\tlassign $link src\n" +"\t\t\t\t\tset dst $src\n" +"\t\t\t\t} else {\n" +"\t\t\t\t\treturn -code error -errorcode {TCLOO CMDLINK FORMAT} \\\n" +"\t\t\t\t\t\t\"bad link description; must only have one or two elements\"\n" +"\t\t\t\t}\n" +"\t\t\t\tif {![string match ::* $src]} {\n" +"\t\t\t\t\tset src [string cat $ns :: $src]\n" +"\t\t\t\t}\n" +"\t\t\t\tinterp alias {} $src {} ${ns}::my $dst\n" +"\t\t\t\ttrace add command ${ns}::my delete [list \\\n" +"\t\t\t\t\t::oo::UnlinkLinkedCommand $src]\n" +"\t\t\t}\n" +"\t\t\treturn\n" +"\t\t}\n" +"\t}\n" +"\tproc UnlinkLinkedCommand {cmd args} {\n" +"\t\tif {[namespace which $cmd] ne {}} {\n" +"\t\t\trename $cmd {}\n" +"\t\t}\n" +"\t}\n" +"\tproc DelegateName {class} {\n" +"\t\tstring cat [info object namespace $class] {:: oo ::delegate}\n" +"\t}\n" +"\tproc MixinClassDelegates {class} {\n" +"\t\tif {![info object isa class $class]} {\n" +"\t\t\treturn\n" +"\t\t}\n" +"\t\tset delegate [DelegateName $class]\n" +"\t\tif {![info object isa class $delegate]} {\n" +"\t\t\treturn\n" +"\t\t}\n" +"\t\tforeach c [info class superclass $class] {\n" +"\t\t\tset d [DelegateName $c]\n" +"\t\t\tif {![info object isa class $d]} {\n" +"\t\t\t\tcontinue\n" +"\t\t\t}\n" +"\t\t\tdefine $delegate superclass -append $d\n" +"\t\t}\n" +"\t\tobjdefine $class mixin -append $delegate\n" +"\t}\n" +"\tproc UpdateClassDelegatesAfterClone {originObject targetObject} {\n" +"\t\tset originDelegate [DelegateName $originObject]\n" +"\t\tset targetDelegate [DelegateName $targetObject]\n" +"\t\tif {\n" +"\t\t\t[info object isa class $originDelegate]\n" +"\t\t\t&& ![info object isa class $targetDelegate]\n" +"\t\t} then {\n" +"\t\t\tcopy $originDelegate $targetDelegate\n" +"\t\t\tobjdefine $targetObject mixin -set \\\n" +"\t\t\t\t{*}[lmap c [info object mixin $targetObject] {\n" +"\t\t\t\t\tif {$c eq $originDelegate} {set targetDelegate} {set c}\n" +"\t\t\t\t}]\n" +"\t\t}\n" +"\t}\n" +"\tproc define::classmethod {name {args {}} {body {}}} {\n" +"\t\t::set argc [::llength [::info level 0]]\n" +"\t\t::if {$argc == 3} {\n" +"\t\t\t::return -code error -errorcode {TCL WRONGARGS} [::format \\\n" +"\t\t\t\t{wrong # args: should be \"%s name \?args body\?\"} \\\n" +"\t\t\t\t[::lindex [::info level 0] 0]]\n" +"\t\t}\n" +"\t\t::set cls [::uplevel 1 self]\n" +"\t\t::if {$argc == 4} {\n" +"\t\t\t::oo::define [::oo::DelegateName $cls] method $name $args $body\n" +"\t\t}\n" +"\t\t::tailcall forward $name myclass $name\n" +"\t}\n" +"\tproc define::initialise {body} {\n" +"\t\t::set clsns [::info object namespace [::uplevel 1 self]]\n" +"\t\t::tailcall apply [::list {} $body $clsns]\n" +"\t}\n" +"\tnamespace eval define {\n" +"\t\t::namespace export initialise\n" +"\t\t::namespace eval tmp {::namespace import ::oo::define::initialise}\n" +"\t\t::namespace export -clear\n" +"\t\t::rename tmp::initialise initialize\n" +"\t\t::namespace delete tmp\n" +"\t}\n" +"\tdefine Slot {\n" +"\t\tmethod Get {} {\n" +"\t\t\treturn -code error -errorcode {TCLOO ABSTRACT_SLOT} \"unimplemented\"\n" +"\t\t}\n" +"\t\tmethod Set list {\n" +"\t\t\treturn -code error -errorcode {TCLOO ABSTRACT_SLOT} \"unimplemented\"\n" +"\t\t}\n" +"\t\tmethod -set args {tailcall my Set $args}\n" +"\t\tmethod -append args {\n" +"\t\t\tset current [uplevel 1 [list [namespace which my] Get]]\n" +"\t\t\ttailcall my Set [list {*}$current {*}$args]\n" +"\t\t}\n" +"\t\tmethod -clear {} {tailcall my Set {}}\n" +"\t\tforward --default-operation my -append\n" +"\t\tmethod unknown {args} {\n" +"\t\t\tset def --default-operation\n" +"\t\t\tif {[llength $args] == 0} {\n" +"\t\t\t\ttailcall my $def\n" +"\t\t\t} elseif {![string match -* [lindex $args 0]]} {\n" +"\t\t\t\ttailcall my $def {*}$args\n" +"\t\t\t}\n" +"\t\t\tnext {*}$args\n" +"\t\t}\n" +"\t\texport -set -append -clear\n" +"\t\tunexport unknown destroy\n" +"\t}\n" +"\tobjdefine define::superclass forward --default-operation my -set\n" +"\tobjdefine define::mixin forward --default-operation my -set\n" +"\tobjdefine objdefine::mixin forward --default-operation my -set\n" +"\tdefine object method {originObject} {\n" +"\t\tforeach p [info procs [info object namespace $originObject]::*] {\n" +"\t\t\tset args [info args $p]\n" +"\t\t\tset idx -1\n" +"\t\t\tforeach a $args {\n" +"\t\t\t\tif {[info default $p $a d]} {\n" +"\t\t\t\t\tlset args [incr idx] [list $a $d]\n" +"\t\t\t\t} else {\n" +"\t\t\t\t\tlset args [incr idx] [list $a]\n" +"\t\t\t\t}\n" +"\t\t\t}\n" +"\t\t\tset b [info body $p]\n" +"\t\t\tset p [namespace tail $p]\n" +"\t\t\tproc $p $args $b\n" +"\t\t}\n" +"\t\tforeach v [info vars [info object namespace $originObject]::*] {\n" +"\t\t\tupvar 0 $v vOrigin\n" +"\t\t\tnamespace upvar [namespace current] [namespace tail $v] vNew\n" +"\t\t\tif {[info exists vOrigin]} {\n" +"\t\t\t\tif {[array exists vOrigin]} {\n" +"\t\t\t\t\tarray set vNew [array get vOrigin]\n" +"\t\t\t\t} else {\n" +"\t\t\t\t\tset vNew $vOrigin\n" +"\t\t\t\t}\n" +"\t\t\t}\n" +"\t\t}\n" +"\t}\n" +"\tdefine class method {originObject} {\n" +"\t\tnext $originObject\n" +"\t\t::oo::UpdateClassDelegatesAfterClone $originObject [self]\n" +"\t}\n" +"\tclass create singleton {\n" +"\t\tsuperclass class\n" +"\t\tvariable object\n" +"\t\tunexport create createWithNamespace\n" +"\t\tmethod new args {\n" +"\t\t\tif {![info exists object] || ![info object isa object $object]} {\n" +"\t\t\t\tset object [next {*}$args]\n" +"\t\t\t\t::oo::objdefine $object {\n" +"\t\t\t\t\tmethod destroy {} {\n" +"\t\t\t\t\t\t::return -code error -errorcode {TCLOO SINGLETON} \\\n" +"\t\t\t\t\t\t\t\"may not destroy a singleton object\"\n" +"\t\t\t\t\t}\n" +"\t\t\t\t\tmethod {originObject} {\n" +"\t\t\t\t\t\t::return -code error -errorcode {TCLOO SINGLETON} \\\n" +"\t\t\t\t\t\t\t\"may not clone a singleton object\"\n" +"\t\t\t\t\t}\n" +"\t\t\t\t}\n" +"\t\t\t}\n" +"\t\t\treturn $object\n" +"\t\t}\n" +"\t}\n" +"\tclass create abstract {\n" +"\t\tsuperclass class\n" +"\t\tunexport create createWithNamespace new\n" +"\t}\n" "}\n" /* !END!: Do not edit above this line. */ ; diff --git a/generic/tclOOScript.tcl b/generic/tclOOScript.tcl index c0b4d1f..d3706ce 100644 --- a/generic/tclOOScript.tcl +++ b/generic/tclOOScript.tcl @@ -11,70 +11,135 @@ # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. -::namespace eval ::oo::Helpers { +::namespace eval ::oo { ::namespace path {} - proc callback {method args} { - list [uplevel 1 {::namespace which my}] $method {*}$args - } + # + # Commands that are made available to objects by default. + # + namespace eval Helpers { + ::namespace path {} - proc mymethod {method args} { - list [uplevel 1 {::namespace which my}] $method {*}$args - } + # ------------------------------------------------------------------ + # + # callback, mymethod -- + # + # Create a script prefix that calls a method on the current + # object. Same operation, two names. + # + # ------------------------------------------------------------------ - proc classvariable {name args} { - # Get a reference to the class's namespace - set ns [info object namespace [uplevel 1 {self class}]] - # Double up the list of variable names - foreach v [list $name {*}$args] { - if {[string match *(*) $v]} { - variable - return -code error [format \ - {bad variable name "%s": can't create a scalar variable that looks like an array element} \ - $v] - } - if {[string match *::* $v]} { - return -code error [format \ - {bad variable name "%s": can't create a local variable with a namespace separator in it} \ - $v] - } - lappend vs $v $v + proc callback {method args} { + list [uplevel 1 {::namespace which my}] $method {*}$args } - # Lastly, link the caller's local variables to the class's variables - tailcall namespace upvar $ns {*}$vs - } - proc link {args} { - set ns [uplevel 1 {::namespace current}] - foreach link $args { - if {[llength $link] == 2} { - lassign $link src dst - } else { - lassign $link src - set dst $src + # Make the [callback] command appear as [mymethod] too. + namespace export callback + namespace eval tmp {namespace import ::oo::Helpers::callback} + namespace export -clear + rename tmp::callback mymethod + namespace delete tmp + + # ------------------------------------------------------------------ + # + # classvariable -- + # + # Link to a variable in the class of the current object. + # + # ------------------------------------------------------------------ + + proc classvariable {name args} { + # Get a reference to the class's namespace + set ns [info object namespace [uplevel 1 {self class}]] + # Double up the list of variable names + foreach v [list $name {*}$args] { + if {[string match *(*) $v]} { + set reason "can't create a scalar variable that looks like an array element" + return -code error -errorcode {TCL UPVAR LOCAL_ELEMENT} \ + [format {bad variable name "%s": %s} $v $reason] + } + if {[string match *::* $v]} { + set reason "can't create a local variable with a namespace separator in it" + return -code error -errorcode {TCL UPVAR INVERTED} \ + [format {bad variable name "%s": %s} $v $reason] + } + lappend vs $v $v } - if {![string match ::* $src]} { - set src [string cat $ns :: $src] + # Lastly, link the caller's local variables to the class's variables + tailcall namespace upvar $ns {*}$vs + } + + # ------------------------------------------------------------------ + # + # link -- + # + # Make a command that invokes a method on the current object. + # The name of the command and the name of the method match by + # default. + # + # ------------------------------------------------------------------ + + proc link {args} { + set ns [uplevel 1 {::namespace current}] + foreach link $args { + if {[llength $link] == 2} { + lassign $link src dst + } elseif {[llength $link] == 1} { + lassign $link src + set dst $src + } else { + return -code error -errorcode {TCLOO CMDLINK FORMAT} \ + "bad link description; must only have one or two elements" + } + if {![string match ::* $src]} { + set src [string cat $ns :: $src] + } + interp alias {} $src {} ${ns}::my $dst + trace add command ${ns}::my delete [list \ + ::oo::UnlinkLinkedCommand $src] } - interp alias {} $src {} ${ns}::my $dst - trace add command ${ns}::my delete [list \ - ::oo::UnlinkLinkedCommand $src] + return } - return } -} -::namespace eval ::oo { + # ---------------------------------------------------------------------- + # + # UnlinkLinkedCommand -- + # + # Callback used to remove linked command when the underlying mechanism + # that supports it is deleted. + # + # ---------------------------------------------------------------------- + proc UnlinkLinkedCommand {cmd args} { if {[namespace which $cmd] ne {}} { rename $cmd {} } } + # ---------------------------------------------------------------------- + # + # DelegateName -- + # + # Utility that gets the name of the class delegate for a class. It's + # trivial, but makes working with them much easier as delegate names are + # intentionally hard to create by accident. + # + # ---------------------------------------------------------------------- + proc DelegateName {class} { string cat [info object namespace $class] {:: oo ::delegate} } + # ---------------------------------------------------------------------- + # + # MixinClassDelegates -- + # + # Support code called *after* [oo::define] inside the constructor of a + # class that patches in the appropriate class delegates. + # + # ---------------------------------------------------------------------- + proc MixinClassDelegates {class} { if {![info object isa class $class]} { return @@ -93,6 +158,15 @@ objdefine $class mixin -append $delegate } + # ---------------------------------------------------------------------- + # + # UpdateClassDelegatesAfterClone -- + # + # Support code that is like [MixinClassDelegates] except for when a + # class is cloned. + # + # ---------------------------------------------------------------------- + proc UpdateClassDelegatesAfterClone {originObject targetObject} { # Rebuild the class inheritance delegation class set originDelegate [DelegateName $originObject] @@ -108,14 +182,24 @@ }] } } -} -::namespace eval ::oo::define { - ::proc classmethod {name {args {}} {body {}}} { + # ---------------------------------------------------------------------- + # + # oo::define::classmethod -- + # + # Defines a class method. See define(n) for details. + # + # Note that the ::oo::define namespace is semi-public and a bit weird + # anyway, so we don't regard the namespace path as being under control: + # fully qualified names are used for everything. + # + # ---------------------------------------------------------------------- + + proc define::classmethod {name {args {}} {body {}}} { # Create the method on the class if the caller gave arguments and body ::set argc [::llength [::info level 0]] ::if {$argc == 3} { - ::return -code error [::format \ + ::return -code error -errorcode {TCL WRONGARGS} [::format \ {wrong # args: should be "%s name ?args body?"} \ [::lindex [::info level 0] 0]] } @@ -127,109 +211,208 @@ ::tailcall forward $name myclass $name } - ::proc initialise {body} { + # ---------------------------------------------------------------------- + # + # oo::define::initialise, oo::define::initialize -- + # + # Do specific initialisation for a class. See define(n) for details. + # + # Note that the ::oo::define namespace is semi-public and a bit weird + # anyway, so we don't regard the namespace path as being under control: + # fully qualified names are used for everything. + # + # ---------------------------------------------------------------------- + + proc define::initialise {body} { ::set clsns [::info object namespace [::uplevel 1 self]] ::tailcall apply [::list {} $body $clsns] } - # Make the initialise command appear with US spelling too - ::namespace export initialise - ::namespace eval tmp {::namespace import ::oo::define::initialise} - ::rename ::oo::define::tmp::initialise initialize - ::namespace delete tmp - ::namespace export -clear -} + # Make the [initialise] definition appear as [initialize] too + namespace eval define { + ::namespace export initialise + ::namespace eval tmp {::namespace import ::oo::define::initialise} + ::namespace export -clear + ::rename tmp::initialise initialize + ::namespace delete tmp + } -::oo::define ::oo::Slot { - method Get {} {return -code error unimplemented} - method Set list {return -code error unimplemented} + # ---------------------------------------------------------------------- + # + # Slot -- + # + # The class of slot operations, which are basically lists at the low + # level of TclOO; this provides a more consistent interface to them. + # + # ---------------------------------------------------------------------- - method -set args {tailcall my Set $args} - method -append args { - set current [uplevel 1 [list [namespace which my] Get]] - tailcall my Set [list {*}$current {*}$args] - } - method -clear {} {tailcall my Set {}} - forward --default-operation my -append - - method unknown {args} { - set def --default-operation - if {[llength $args] == 0} { - tailcall my $def - } elseif {![string match -* [lindex $args 0]]} { - tailcall my $def {*}$args - } - next {*}$args - } + define Slot { + # ------------------------------------------------------------------ + # + # Slot Get -- + # + # Basic slot getter. Retrieves the contents of the slot. + # Particular slots must provide concrete non-erroring + # implementation. + # + # ------------------------------------------------------------------ - export -set -append -clear - unexport unknown destroy -} + method Get {} { + return -code error -errorcode {TCLOO ABSTRACT_SLOT} "unimplemented" + } -::oo::objdefine ::oo::define::superclass forward --default-operation my -set -::oo::objdefine ::oo::define::mixin forward --default-operation my -set -::oo::objdefine ::oo::objdefine::mixin forward --default-operation my -set - -::oo::define ::oo::object method {originObject} { - # Copy over the procedures from the original namespace - foreach p [info procs [info object namespace $originObject]::*] { - set args [info args $p] - set idx -1 - foreach a $args { - if {[info default $p $a d]} { - lset args [incr idx] [list $a $d] - } else { - lset args [incr idx] [list $a] + # ------------------------------------------------------------------ + # + # Slot Set -- + # + # Basic slot setter. Sets the contents of the slot. Particular + # slots must provide concrete non-erroring implementation. + # + # ------------------------------------------------------------------ + + method Set list { + return -code error -errorcode {TCLOO ABSTRACT_SLOT} "unimplemented" + } + + # ------------------------------------------------------------------ + # + # Slot -set, -append, -clear, --default-operation -- + # + # Standard public slot operations. If a slot can't figure out + # what method to call directly, it uses --default-operation. + # + # ------------------------------------------------------------------ + + method -set args {tailcall my Set $args} + method -append args { + set current [uplevel 1 [list [namespace which my] Get]] + tailcall my Set [list {*}$current {*}$args] + } + method -clear {} {tailcall my Set {}} + + # Default handling + forward --default-operation my -append + method unknown {args} { + set def --default-operation + if {[llength $args] == 0} { + tailcall my $def + } elseif {![string match -* [lindex $args 0]]} { + tailcall my $def {*}$args } + next {*}$args } - set b [info body $p] - set p [namespace tail $p] - proc $p $args $b + + # Set up what is exported and what isn't + export -set -append -clear + unexport unknown destroy } - # Copy over the variables from the original namespace - foreach v [info vars [info object namespace $originObject]::*] { - upvar 0 $v vOrigin - namespace upvar [namespace current] [namespace tail $v] vNew - if {[info exists vOrigin]} { - if {[array exists vOrigin]} { - array set vNew [array get vOrigin] - } else { - set vNew $vOrigin + + # Set the default operation differently for these slots + objdefine define::superclass forward --default-operation my -set + objdefine define::mixin forward --default-operation my -set + objdefine objdefine::mixin forward --default-operation my -set + + # ---------------------------------------------------------------------- + # + # oo::object -- + # + # Handler for cloning objects that clones basic bits (only!) of the + # object's namespace. Non-procedures, traces, sub-namespaces, etc. need + # more complex (and class-specific) handling. + # + # ---------------------------------------------------------------------- + + define object method {originObject} { + # Copy over the procedures from the original namespace + foreach p [info procs [info object namespace $originObject]::*] { + set args [info args $p] + set idx -1 + foreach a $args { + if {[info default $p $a d]} { + lset args [incr idx] [list $a $d] + } else { + lset args [incr idx] [list $a] + } + } + set b [info body $p] + set p [namespace tail $p] + proc $p $args $b + } + # Copy over the variables from the original namespace + foreach v [info vars [info object namespace $originObject]::*] { + upvar 0 $v vOrigin + namespace upvar [namespace current] [namespace tail $v] vNew + if {[info exists vOrigin]} { + if {[array exists vOrigin]} { + array set vNew [array get vOrigin] + } else { + set vNew $vOrigin + } } } + # General commands, sub-namespaces and advancd variable config (traces, + # etc) are *not* copied over. Classes that want that should do it + # themselves. } - # General commands, sub-namespaces and advancd variable config (traces, - # etc) are *not* copied over. Classes that want that should do it - # themselves. -} -::oo::define ::oo::class method {originObject} { - next $originObject - # Rebuild the class inheritance delegation class - ::oo::UpdateClassDelegatesAfterClone $originObject [self] -} + # ---------------------------------------------------------------------- + # + # oo::class -- + # + # Handler for cloning classes, which fixes up the delegates. + # + # ---------------------------------------------------------------------- -::oo::class create ::oo::singleton { - superclass ::oo::class - variable object - unexport create createWithNamespace - method new args { - if {![info exists object] || ![info object isa object $object]} { - set object [next {*}$args] - ::oo::objdefine $object method destroy {} { - return -code error {may not destroy a singleton object} - } - ::oo::objdefine $object method {originObject} { - return -code error {may not clone a singleton object} - } - } - return $object + define class method {originObject} { + next $originObject + # Rebuild the class inheritance delegation class + ::oo::UpdateClassDelegatesAfterClone $originObject [self] } -} -::oo::class create ::oo::abstract { - superclass ::oo::class - unexport create createWithNamespace new + # ---------------------------------------------------------------------- + # + # oo::singleton -- + # + # A metaclass that is used to make classes that only permit one instance + # of them to exist. See singleton(n). + # + # ---------------------------------------------------------------------- + + class create singleton { + superclass class + variable object + unexport create createWithNamespace + method new args { + if {![info exists object] || ![info object isa object $object]} { + set object [next {*}$args] + ::oo::objdefine $object { + method destroy {} { + ::return -code error -errorcode {TCLOO SINGLETON} \ + "may not destroy a singleton object" + } + method {originObject} { + ::return -code error -errorcode {TCLOO SINGLETON} \ + "may not clone a singleton object" + } + } + } + return $object + } + } + + # ---------------------------------------------------------------------- + # + # oo::abstract -- + # + # A metaclass that is used to make classes that can't be directly + # instantiated. See abstract(n). + # + # ---------------------------------------------------------------------- + + class create abstract { + superclass class + unexport create createWithNamespace new + } } # Local Variables: diff --git a/tests/ooUtil.test b/tests/ooUtil.test index e796637..ff7093f 100644 --- a/tests/ooUtil.test +++ b/tests/ooUtil.test @@ -138,6 +138,45 @@ test ooUtil-1.7 {} -setup { } -cleanup { parent destroy } -result {{} {} {} {}} -output "This is in the class; self is ::Foo\nThis is meee\nThis is in the class; self is ::Grill\nThis is meee 2\nThis is in the class; self is ::Foo\nThis is meee\nThis is in the class; self is ::Grill\nThis is meee 2\n" +# Two tests to confirm that we correctly initialise the scripted part of TclOO +# in child interpreters. This is slightly tricky at the implementation level +# because we cannot count on either [source] or [open] being available. +test ooUtil-1.8 {TIP 478: classmethod in child interp} -setup { + set childinterp [interp create] +} -body { + $childinterp eval { + oo::class create ActiveRecord { + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + # This is confirming that this is not the master interpreter + list [Table find foo bar] [info globals childinterp] + } +} -cleanup { + interp delete $childinterp +} -result {{::Table called with arguments: foo bar} {}} +test ooUtil-1.9 {TIP 478: classmethod in safe child interp} -setup { + set safeinterp [interp create -safe] +} -body { + $safeinterp eval { + oo::class create ActiveRecord { + classmethod find args { + return "[self] called with arguments: $args" + } + } + oo::class create Table { + superclass ActiveRecord + } + # This is confirming that this is a (basic) safe interpreter + list [Table find foo bar] [info commands source] + } +} -cleanup { + interp delete $safeinterp +} -result {{::Table called with arguments: foo bar} {}} test ooUtil-2.1 {TIP 478: callback generation} -setup { oo::class create parent diff --git a/tools/makeHeader.tcl b/tools/makeHeader.tcl index 5197da6..e9b7ed1 100644 --- a/tools/makeHeader.tcl +++ b/tools/makeHeader.tcl @@ -21,7 +21,7 @@ namespace eval makeHeader { # All Tcl metacharacters and key C backslash sequences set MAP { \" \\\\\" \\ \\\\\\\\ $ \\$ [ \\[ ] \\] ' \\\\' ? \\\\? - \a \\\\a \b \\\\b \f \\\\f \n \\\\n \r \\\\r \t { } \v \\\\v + \a \\\\a \b \\\\b \f \\\\f \n \\\\n \r \\\\r \t \\\\t \v \\\\v } set XFORM {[format \\\\\\\\u%04x {*}[scan & %c]]} @@ -30,12 +30,30 @@ namespace eval makeHeader { #################################################################### # + # compactLeadingSpaces -- + # Converts the leading whitespace on a line into a more compact form. + # + proc compactLeadingSpaces {line} { + set line [string map {\t { }} [string trimright $line]] + if {[regexp {^[ ]+} $line spaces]} { + regsub -all {[ ]{4}} $spaces \t replace + set len [expr {[string length $spaces] - 1}] + set line [string replace $line 0 $len $replace] + } + return $line + } + + #################################################################### + # # processScript -- # Transform a whole sequence of lines with [mapSpecial]. # proc processScript {scriptLines} { lmap line $scriptLines { - format {"%s"} [mapSpecial $line\n] + # Skip blank and comment lines; they're there in the original + # sources so we don't need to copy them over. + if {[regexp {^\s*(?:#|$)} $line]} continue + format {"%s"} [mapSpecial [compactLeadingSpaces $line]\n] } } -- cgit v0.12 From f5efc84600e3a88460bdeb094d1cfa58ad5b3022 Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 11 Aug 2018 12:01:06 +0000 Subject: Added a note about the genesis of the compiled header. --- generic/tclOOScript.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/generic/tclOOScript.h b/generic/tclOOScript.h index 741a5c4..e63bd86 100644 --- a/generic/tclOOScript.h +++ b/generic/tclOOScript.h @@ -18,6 +18,10 @@ /* * The scripted part of the definitions of TclOO. + * + * Compiled from generic/tclOOScript.tcl by tools/makeHeader.tcl, which + * contains the commented version of everything; *this* file is automatically + * generated. */ static const char *tclOOSetupScript = -- cgit v0.12 From e5270637c01b6fbb0f016048fc9d9735f980421a Mon Sep 17 00:00:00 2001 From: pooryorick Date: Tue, 14 Aug 2018 05:43:17 +0000 Subject: Reposition the MODULE_SCOPE definition so that packages like tbcload don't get an error when they include tclPort.h. --- generic/tclInt.h | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/generic/tclInt.h b/generic/tclInt.h index 64e7c67..5379396 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -38,6 +38,23 @@ #define AVOID_HACKS_FOR_ITCL 1 + +/* + * Used to tag functions that are only to be visible within the module being + * built and not outside it (where this is supported by the linker). + * Also used in the platform-specific *Port.h files. + */ + +#ifndef MODULE_SCOPE +# ifdef __cplusplus +# define MODULE_SCOPE extern "C" +# else +# define MODULE_SCOPE extern +# endif +#endif + + + /* * Common include files needed by most of the Tcl source files are included * here, so that system-dependent personalizations for the include files only @@ -95,19 +112,6 @@ typedef int ptrdiff_t; #endif /* - * Used to tag functions that are only to be visible within the module being - * built and not outside it (where this is supported by the linker). - */ - -#ifndef MODULE_SCOPE -# ifdef __cplusplus -# define MODULE_SCOPE extern "C" -# else -# define MODULE_SCOPE extern -# endif -#endif - -/* * Macros used to cast between pointers and integers (e.g. when storing an int * in ClientData), on 64-bit architectures they avoid gcc warning about "cast * to/from pointer from/to integer of different size". -- cgit v0.12 From aed158b5189a8d32312907d0c388e7ae9826f92f Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 17 Aug 2018 18:26:10 +0000 Subject: win: TclpCreateProcess or [exec process ...] - search for application extended with ".cmd" extension: automatically tries appending ".com", ".exe", ".bat" and ".cmd", in that order, to the name, looking for an executable. (partially cherry-picked from 8.6 branch) --- win/tclWinPipe.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index b5f035db..e0d8c63 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -900,7 +900,7 @@ TclpGetPid( * * The complete Windows search path is searched to find the specified * executable. If an executable by the given name is not found, - * automatically tries appending ".com", ".exe", and ".bat" to the + * automatically tries appending ".com", ".exe", ".bat" and ".cmd" to the * executable name. * * Results: @@ -1369,11 +1369,11 @@ ApplicationType( Tcl_DString nameBuf, ds; const TCHAR *nativeName; WCHAR nativeFullPath[MAX_PATH]; - static const char extensions[][5] = {"", ".com", ".exe", ".bat"}; + static const char extensions[][5] = {"", ".com", ".exe", ".bat", ".cmd"}; /* * Look for the program as an external program. First try the name as it - * is, then try adding .com, .exe, and .bat, in that order, to the name, + * is, then try adding .com, .exe, .bat and .cmd, in that order, to the name, * looking for an executable. * * Using the raw SearchPath() function doesn't do quite what is necessary. @@ -1414,7 +1414,8 @@ ApplicationType( Tcl_DStringFree(&ds); ext = strrchr(fullName, '.'); - if ((ext != NULL) && (strcasecmp(ext, ".bat") == 0)) { + if ((ext != NULL) && + (strcasecmp(ext, ".cmd") == 0 || strcasecmp(ext, ".bat") == 0)) { applType = APPL_DOS; break; } -- cgit v0.12 From 90afac281e7c26675e3a6816937db7794f49ceef Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 17 Aug 2018 22:15:49 +0000 Subject: Minor fix to entier(): Allow it to convert to "wideInt" as well when range is appropriate --- generic/tclBasic.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 07f7e5c..e014b06 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -7606,7 +7606,19 @@ ExprEntierFunc( if (type == TCL_NUMBER_DOUBLE) { d = *((const double *) ptr); - if ((d >= (double)LONG_MAX) || (d <= (double)LONG_MIN)) { + if ((d < (double)LONG_MAX) && (d > (double)LONG_MIN)) { + long result = (long) d; + + Tcl_SetObjResult(interp, Tcl_NewLongObj(result)); + return TCL_OK; +#ifndef TCL_WIDE_INT_IS_LONG + } else if ((d < (double)LLONG_MAX) && (d > (double)LLONG_MIN)) { + Tcl_WideInt result = (Tcl_WideInt) d; + + Tcl_SetObjResult(interp, Tcl_NewWideIntObj(result)); + return TCL_OK; +#endif + } else { mp_int big; if (Tcl_InitBignumFromDouble(interp, d, &big) != TCL_OK) { @@ -7615,11 +7627,6 @@ ExprEntierFunc( } Tcl_SetObjResult(interp, Tcl_NewBignumObj(&big)); return TCL_OK; - } else { - long result = (long) d; - - Tcl_SetObjResult(interp, Tcl_NewLongObj(result)); - return TCL_OK; } } -- cgit v0.12 From 26b477b907a50ee208b80c65849b93a8dcfea948 Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 20 Aug 2018 14:35:44 +0000 Subject: win: fixes [21b0629c81] - exec/open process pipe under windows (0-day vulnerability - insufficient escape) --- tests/winPipe.test | 8 +++--- win/tclWinPipe.c | 77 ++++++++++++++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 38 deletions(-) diff --git a/tests/winPipe.test b/tests/winPipe.test index f993e0c..c5d3846 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -323,22 +323,22 @@ test winpipe-7.2 {BuildCommandLine: null arguments} {win exec} { } {foo "" bar} test winpipe-7.3 {BuildCommandLine: dbl quote quoting #1} {win exec} { exec $env(COMSPEC) /c echo foo "\"" bar -} {foo \" bar} +} {foo "\"" bar} test winpipe-7.4 {BuildCommandLine: dbl quote quoting #2} {win exec} { exec $env(COMSPEC) /c echo foo {""} bar -} {foo \"\" bar} +} {foo "\"\"" bar} test winpipe-7.5 {BuildCommandLine: dbl quote quoting #3} {win exec} { exec $env(COMSPEC) /c echo foo "\" " bar } {foo "\" " bar} test winpipe-7.6 {BuildCommandLine: dbl quote quoting #4} {win exec} { exec $env(COMSPEC) /c echo foo {a="b"} bar -} {foo a=\"b\" bar} +} {foo "a=\"b\"" bar} test winpipe-7.7 {BuildCommandLine: dbl quote quoting #5} {win exec} { exec $env(COMSPEC) /c echo foo {a = "b"} bar } {foo "a = \"b\"" bar} test winpipe-7.8 {BuildCommandLine: dbl quote quoting #6} {win exec} { exec $env(COMSPEC) /c echo {"hello"} {""hello""} {"""hello"""} {"\"hello\""} {he llo} "he \" llo" -} {\"hello\" \"\"hello\"\" \"\"\"hello\"\"\" \"\\\"hello\\\"\" "he llo" "he \" llo"} +} {"\"hello\"" "\"\"hello\"\"" "\"\"\"hello\"\"\"" "\"\\\"hello\\\"\"" "he llo" "he \" llo"} test winpipe-7.9 {BuildCommandLine: N backslashes followed a quote rule #1} {win exec} { exec $env(COMSPEC) /c echo foo \\ bar } {foo \ bar} diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index e0d8c63..496e35b 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1540,6 +1540,8 @@ BuildCommandLine( int quote, i; Tcl_DString ds; + const static char *specMetaChars = "&|^<>!%()"; + Tcl_DStringInit(&ds); /* @@ -1567,52 +1569,59 @@ BuildCommandLine( Tcl_UniChar ch; for (start = arg; *start != '\0'; start += count) { count = Tcl_UtfToUniChar(start, &ch); - if (Tcl_UniCharIsSpace(ch)) { /* INTL: ISO space. */ + if (Tcl_UniCharIsSpace(ch) || + (count == 1 && (*start=='"' || strchr(specMetaChars, *start))) + ) { + /* must be quoted */ quote = 1; break; } } } - if (quote) { + if (!quote) { + Tcl_DStringAppend(&ds, arg, -1); + } else { Tcl_DStringAppend(&ds, "\"", 1); - } - start = arg; - for (special = arg; ; ) { - if ((*special == '\\') && (special[1] == '\\' || - special[1] == '"' || (quote && special[1] == '\0'))) { - Tcl_DStringAppend(&ds, start, (int) (special - start)); - start = special; - while (1) { - special++; - if (*special == '"' || (quote && *special == '\0')) { - /* - * N backslashes followed a quote -> insert N * 2 + 1 - * backslashes then a quote. - */ - - Tcl_DStringAppend(&ds, start, - (int) (special - start)); - break; + start = arg; + for (special = arg; *special != '\0'; ) { + if (*special == '\\' && (special[1] == '\\' || special[1] == '"' || special[1] == '\0')) { + if (special > start) { + Tcl_DStringAppend(&ds, start, (int) (special - start)); } - if (*special != '\\') { - break; + Tcl_DStringAppend(&ds, "\\\\", 2); + start = ++special; + continue; + } + if (*special == '"') { + quote ^= 2; /* observe unpaired quotes */ + if (special > start) { + Tcl_DStringAppend(&ds, start, (int) (special - start)); } + Tcl_DStringAppend(&ds, "\\\"", 2); + start = ++special; + continue; } - Tcl_DStringAppend(&ds, start, (int) (special - start)); - start = special; + /* unpaired (escaped) quote causes special handling on meta-chars */ + if ((quote & 2) && strchr(specMetaChars, *special)) { + if (special > start) { + Tcl_DStringAppend(&ds, start, (int) (special - start)); + } + /* unpaired - escape all special chars inside quotes "..." */ + Tcl_DStringAppend(&ds, "\"", 1); + start = special; + do { + special++; + } while(*special && strchr(specMetaChars, *special)); + Tcl_DStringAppend(&ds, start, (int) (special - start)); + Tcl_DStringAppend(&ds, "\"", 1); + start = special; + continue; + } + special++; } - if (*special == '"') { + if (special > start) { Tcl_DStringAppend(&ds, start, (int) (special - start)); - Tcl_DStringAppend(&ds, "\\\"", 2); - start = special + 1; } - if (*special == '\0') { - break; - } - special++; - } - Tcl_DStringAppend(&ds, start, (int) (special - start)); - if (quote) { Tcl_DStringAppend(&ds, "\"", 1); } } -- cgit v0.12 From d660b325b58998ff0627e899550abf58bf260174 Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 20 Aug 2018 16:15:37 +0000 Subject: small amend: avoid reset of unpaired quote flag between arguments (previous affects next) + test cases extended with several injection checks. --- tests/winPipe.test | 169 ++++++++++++++++++++++++++++++++++------------------- win/tclWinPipe.c | 25 +++++--- 2 files changed, 126 insertions(+), 68 deletions(-) diff --git a/tests/winPipe.test b/tests/winPipe.test index c5d3846..eb0a854 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -308,10 +308,35 @@ test winpipe-6.2 {PipeSetupProc & PipeCheckProc: write threads} \ lappend x [catch {close $f} msg] $msg } {writable timeout 0 {}} -set path(echoArgs.tcl) [makeFile { - puts "[list $argv0 $argv]" -} echoArgs.tcl] - +proc _testExecArgs {single args} { + variable path + set path(echoArgs.tcl) [makeFile { + puts "[list [file tail $argv0] {*}$argv]" + } echoArgs.tcl] + set path(echoArgs.bat) [makeFile "@[file native [interpreter]] $path(echoArgs.tcl) %*" echoArgs.bat] + set broken {} + foreach args $args { + if {$single} { + set args [list $args] + } + foreach cmd [list \ + [list [interpreter] $path(echoArgs.tcl)] \ + [list $path(echoArgs.bat)] \ + ] { + set e [list [file tail $path(echoArgs.tcl)] {*}$args] + tcltest::DebugPuts 4 " ## test exec [file extension [lindex $cmd 0]] for $e" + if {[catch { + exec {*}$cmd {*}$args + } r]} { + set r "ERROR: $r" + } + if {$r ne $e} { + append broken "\[ERROR\]: exec [file extension [lindex $cmd 0]] on $args\n -- result:\n$r\n -- expected:\n$e\n" + } + } + } + return $broken +} ### validate the raw output of BuildCommandLine(). ### @@ -370,65 +395,87 @@ test winpipe-7.18 {BuildCommandLine: special chars #5} {win exec} { exec $env(COMSPEC) /c echo foo \} bar } "foo \} bar" +set injectList { + {test"whoami} {test""whoami} + {test"""whoami} {test""""whoami} + + "test\"whoami\\" "test\"\"whoami\\" + "test\"\"\"whoami\\" "test\"\"\"\"whoami\\" + + {test\"&whoami} {test"\"&whoami} + {test""\"&whoami} {test"""\"&whoami} + + {test&whoami} {test|whoami} + {"test&whoami} {"test|whoami} + {test"&whoami} {test"|whoami} + {"test"&whoami} {"test"|whoami} + {""test"&whoami} {""test"|whoami} + + {test&echo "} {test|echo "} + {"test&echo "} {"test|echo "} + {test"&echo "} {test"|echo "} + {"test"&echo "} {"test"|echo "} + {""test"&echo "} {""test"|echo "} + + {test&echo ""} {test|echo ""} + {"test&echo ""} {"test|echo ""} + {test"&echo ""} {test"|echo ""} + {"test"&echo ""} {"test"|echo ""} + {""test"&echo ""} {""test"|echo ""} + + {test>whoami} {testwhoami} {"testwhoami} {test"whoami} {"test"whoami} {""test" start) { Tcl_DStringAppend(&ds, start, (int) (special - start)); } + /* escape using backslash */ Tcl_DStringAppend(&ds, "\\\\", 2); start = ++special; continue; } + /* ["] */ if (*special == '"') { - quote ^= 2; /* observe unpaired quotes */ + quote ^= 2; /* invert unpaired flag - observe unpaired quotes */ if (special > start) { Tcl_DStringAppend(&ds, start, (int) (special - start)); } + /* escape using backslash */ Tcl_DStringAppend(&ds, "\\\"", 2); start = ++special; continue; @@ -1606,7 +1615,7 @@ BuildCommandLine( if (special > start) { Tcl_DStringAppend(&ds, start, (int) (special - start)); } - /* unpaired - escape all special chars inside quotes "..." */ + /* unpaired - escape all special chars inside quotes like `"..."` */ Tcl_DStringAppend(&ds, "\"", 1); start = special; do { @@ -1619,9 +1628,11 @@ BuildCommandLine( } special++; } + /* rest of argument (don't contain special chars) */ if (special > start) { Tcl_DStringAppend(&ds, start, (int) (special - start)); } + /* end of argument (closed quote-char) */ Tcl_DStringAppend(&ds, "\"", 1); } } -- cgit v0.12 From 01dd016ad89794ac85bfc2a7ccbedbb6d4c7f14f Mon Sep 17 00:00:00 2001 From: sebres Date: Mon, 20 Aug 2018 19:58:44 +0000 Subject: because executable (1st argument) always proper escaped now, don't need to replace long path name of batch-executable with short path name (reduced to 16-bit applications only). --- tests/winPipe.test | 44 +++++++++++++++++++++++++++++++++----------- win/tclWinPipe.c | 2 +- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/tests/winPipe.test b/tests/winPipe.test index eb0a854..e817e85 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -310,21 +310,33 @@ test winpipe-6.2 {PipeSetupProc & PipeCheckProc: write threads} \ proc _testExecArgs {single args} { variable path - set path(echoArgs.tcl) [makeFile { - puts "[list [file tail $argv0] {*}$argv]" - } echoArgs.tcl] - set path(echoArgs.bat) [makeFile "@[file native [interpreter]] $path(echoArgs.tcl) %*" echoArgs.bat] + if {![info exists path(echoArgs.tcl)] || ![file exists $path(echoArgs.tcl)]} { + set path(echoArgs.tcl) [makeFile { + puts "[list [file tail $argv0] {*}$argv]" + } echoArgs.tcl] + } + if {![info exists path(echoArgs.bat)] || ![file exists $path(echoArgs.bat)]} { + set path(echoArgs.bat) [makeFile "@[file native [interpreter]] $path(echoArgs.tcl) %*" "echoArgs.bat"] + } + set cmds [list [list [interpreter] $path(echoArgs.tcl)]] + if {!($single & 2)} { + lappend cmds [list $path(echoArgs.bat)] + } else { + if {![info exists path(echoArgs2.bat)] || ![file exists $path(echoArgs2.bat)]} { + file mkdir [file join [temporaryDirectory] test(Dir)Check] + set path(echoArgs2.bat) [makeFile "@[file native [interpreter]] $path(echoArgs.tcl) %*" \ + "test(Dir)Check/echo(Cmd)Test Args & Batch.bat"] + } + lappend cmds [list $path(echoArgs2.bat)] + } set broken {} foreach args $args { - if {$single} { + if {$single & 1} { set args [list $args] } - foreach cmd [list \ - [list [interpreter] $path(echoArgs.tcl)] \ - [list $path(echoArgs.bat)] \ - ] { + foreach cmd $cmds { set e [list [file tail $path(echoArgs.tcl)] {*}$args] - tcltest::DebugPuts 4 " ## test exec [file extension [lindex $cmd 0]] for $e" + tcltest::DebugPuts 4 " ## test exec [file extension [lindex $cmd 0]] ($cmd) for\n ## $args" if {[catch { exec {*}$cmd {*}$args } r]} { @@ -475,6 +487,15 @@ test winpipe-8.3 {BuildCommandLine/parse_cmdline pass-thru: check injection on s [list "START\"" {*}$injectList "\"END"] } -result {} +test winpipe-8.4 {BuildCommandLine/parse_cmdline pass-thru: check injection on special meta-chars (command/jointly args)} \ +-constraints {win exec} -body { + _testExecArgs 2 \ + [list START {*}$injectList END] \ + [list "START\"" {*}$injectList END] \ + [list START {*}$injectList "\"END"] \ + [list "START\"" {*}$injectList "\"END"] +} -result {} + rename _testExecArgs {} # restore old values for env(TMP) and env(TEMP) @@ -487,6 +508,7 @@ if {[catch {set env(TEMP) $env_temp}]} { } # cleanup -file delete big little stdout stderr nothing echoArgs.tcl +file delete big little stdout stderr nothing echoArgs.tcl echoArgs.bat +file delete -force [file join [temporaryDirectory] test(Dir)Check] ::tcltest::cleanupTests return diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index cdbf467..a6a8f22 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1492,7 +1492,7 @@ ApplicationType( return APPL_NONE; } - if ((applType == APPL_DOS) || (applType == APPL_WIN3X)) { + if (applType == APPL_WIN3X) { /* * Replace long path name of executable with short path name for * 16-bit applications. Otherwise the application may not be able to -- cgit v0.12 From fb0bf9d1b9dbcac3d58bef9c86b6353eaf3d0c1e Mon Sep 17 00:00:00 2001 From: sebres Date: Tue, 21 Aug 2018 18:52:21 +0000 Subject: fixes escape for special cases (+ more test-cases): - `%` char to be escaped (quoted) in any case (regardless pairing flag), otherwise `%username%` will be interpolated as username. - escape of multiple backslashes before quote is different (as without following quote) in unpaired quote syntax (upaired flag set) --- tests/winPipe.test | 30 ++++++++++- win/tclWinPipe.c | 142 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 139 insertions(+), 33 deletions(-) diff --git a/tests/winPipe.test b/tests/winPipe.test index e817e85..c375d8f 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -332,7 +332,9 @@ proc _testExecArgs {single args} { set broken {} foreach args $args { if {$single & 1} { - set args [list $args] + # enclose single test-arg between 1st/3rd to be sure nothing is truncated + # (e. g. to cover unexpected trim by nts-zero case, and args don't recombined): + set args [list "1st" $args "3rd"] } foreach cmd $cmds { set e [list [file tail $path(echoArgs.tcl)] {*}$args] @@ -414,8 +416,15 @@ set injectList { "test\"whoami\\" "test\"\"whoami\\" "test\"\"\"whoami\\" "test\"\"\"\"whoami\\" + {test\\&\\test} {test"\\&\\test} + {"test\\&\\test} {"test"\\&\\"test"} + {test\\"&"\\test} {test"\\"&"\\test} + {"test\\"&"\\test} {"test"\\"&"\\"test"} + {test\"&whoami} {test"\"&whoami} {test""\"&whoami} {test"""\"&whoami} + {test\"\&whoami} {test"\"\&whoami} + {test""\"\&whoami} {test"""\"\&whoami} {test&whoami} {test|whoami} {"test&whoami} {"test|whoami} @@ -445,6 +454,25 @@ set injectList { {test^whoami} {test^^echo ^^^} {test"^whoami} {test"^^echo ^^^} {test"^echo ^^^"} {test""^echo" ^^^"} + + {test%USERDOMAIN%\%USERNAME%} + {test" %USERDOMAIN%\%USERNAME%} + {test%USERDOMAIN%\\%USERNAME%} + {test" %USERDOMAIN%\\%USERNAME%} + {test%USERDOMAIN%&%USERNAME%} + {test" %USERDOMAIN%&%USERNAME%} + {test%USERDOMAIN%\&\%USERNAME%} + {test" %USERDOMAIN%\&\%USERNAME%} + + {test%USERDOMAIN%\&\test} + {test" %USERDOMAIN%\&\test} + {test%USERDOMAIN%\\&\\test} + {test" %USERDOMAIN%\\&\\test} + + {test%USERDOMAIN%\&\"test} + {test" %USERDOMAIN%\&\"test} + {test%USERDOMAIN%\\&\\"test} + {test" %USERDOMAIN%\\&\\"test} } ### validate the pass-thru from BuildCommandLine() to the crt's parse_cmdline(). diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index a6a8f22..728e43a 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1527,6 +1527,86 @@ ApplicationType( *---------------------------------------------------------------------- */ +static const char * +BuildCmdLineBypassBS( + const char *current, + const char **bspos +) { + /* mark first backslash possition */ + if (!*bspos) { + *bspos = current; + } + do { + current++; + } while (*current == '\\'); + return current; +} + +static void +QuoteCmdLineBackslash( + Tcl_DString *dsPtr, + const char *start, + const char *current, + const char *bspos +) { + if (!bspos) { + if (current > start) { /* part before current (special) */ + Tcl_DStringAppend(dsPtr, start, (int) (current - start)); + } + } else { + if (bspos > start) { /* part before first backslash */ + Tcl_DStringAppend(dsPtr, start, (int) (bspos - start)); + } + while (bspos++ < current) { /* each backslash twice */ + Tcl_DStringAppend(dsPtr, "\\\\", 2); + } + } +} + +static const char * +QuoteCmdLinePart( + Tcl_DString *dsPtr, + const char *start, + const char *special, + const char *specMetaChars, + const char **bspos +) { + if (!*bspos) { + /* rest before special (before quote) */ + QuoteCmdLineBackslash(dsPtr, start, special, NULL); + start = special; + } else { + /* rest before first backslash and backslashes into new quoted block */ + QuoteCmdLineBackslash(dsPtr, start, *bspos, NULL); + start = *bspos; + } + /* + * escape all special chars enclosed in quotes like `"..."`, note that here we + * don't must escape `\` (with `\`), because it's outside of the main quotes, + * so `\` remains `\`, but important - not at end of part, because results as + * before the quote, so `%\%\` should be escaped as `"%\%"\\`). + */ + Tcl_DStringAppend(dsPtr, "\"", 1); /* opening escape quote-char */ + do { + *bspos = NULL; + special++; + if (*special == '\\') { + /* bypass backslashes (and mark first backslash possition)*/ + special = BuildCmdLineBypassBS(special, bspos); + if (*special == '\0') break; + } + } while (*special && strchr(specMetaChars, *special)); + if (!*bspos) { + /* unescaped rest before quote */ + QuoteCmdLineBackslash(dsPtr, start, special, NULL); + } else { + /* unescaped rest before first backslash (rather belongs to the main block) */ + QuoteCmdLineBackslash(dsPtr, start, *bspos, NULL); + } + Tcl_DStringAppend(dsPtr, "\"", 1); /* closing escape quote-char */ + return special; +} + static void BuildCommandLine( const char *executable, /* Full path of executable (including @@ -1536,11 +1616,14 @@ BuildCommandLine( Tcl_DString *linePtr) /* Initialized Tcl_DString that receives the * command line (TCHAR). */ { - const char *arg, *start, *special; + const char *arg, *start, *special, *bspos; int quote = 0, i; Tcl_DString ds; - const static char *specMetaChars = "&|^<>!%()"; + /* characters to enclose in quotes if unpaired quote flag set */ + const static char *specMetaChars = "&|^<>!()%"; + /* characters to enclose in quotes in any case (regardless unpaired-flag) */ + const static char *specMetaChars2 = "%"; Tcl_DStringInit(&ds); @@ -1566,6 +1649,7 @@ BuildCommandLine( * 2 - previous arguments chain contains unpaired quote-char; */ quote &= ~1; /* reset escape flag */ + bspos = NULL; if (arg[0] == '\0') { quote = 1; } else { @@ -1585,26 +1669,22 @@ BuildCommandLine( /* nothing to escape */ Tcl_DStringAppend(&ds, arg, -1); } else { - /* start of argument (open quote-char) */ + /* start of argument (main opening quote-char) */ Tcl_DStringAppend(&ds, "\"", 1); start = arg; for (special = arg; *special != '\0'; ) { - /* `\\` or `\"` or `\` at end (so equal `\"` because quoted) */ - if (*special == '\\' && (special[1] == '\\' || special[1] == '"' || special[1] == '\0')) { - if (special > start) { - Tcl_DStringAppend(&ds, start, (int) (special - start)); - } - /* escape using backslash */ - Tcl_DStringAppend(&ds, "\\\\", 2); - start = ++special; - continue; + /* position of `\` is important before quote or at end (equal `\"` because quoted) */ + if (*special == '\\') { + /* bypass backslashes (and mark first backslash possition)*/ + special = BuildCmdLineBypassBS(special, &bspos); + if (*special == '\0') break; } /* ["] */ if (*special == '"') { quote ^= 2; /* invert unpaired flag - observe unpaired quotes */ - if (special > start) { - Tcl_DStringAppend(&ds, start, (int) (special - start)); - } + /* add part before (and escape backslashes before quote) */ + QuoteCmdLineBackslash(&ds, start, special, bspos); + bspos = NULL; /* escape using backslash */ Tcl_DStringAppend(&ds, "\\\"", 2); start = ++special; @@ -1612,27 +1692,25 @@ BuildCommandLine( } /* unpaired (escaped) quote causes special handling on meta-chars */ if ((quote & 2) && strchr(specMetaChars, *special)) { - if (special > start) { - Tcl_DStringAppend(&ds, start, (int) (special - start)); - } - /* unpaired - escape all special chars inside quotes like `"..."` */ - Tcl_DStringAppend(&ds, "\"", 1); - start = special; - do { - special++; - } while(*special && strchr(specMetaChars, *special)); - Tcl_DStringAppend(&ds, start, (int) (special - start)); - Tcl_DStringAppend(&ds, "\"", 1); - start = special; + special = QuoteCmdLinePart(&ds, start, special, specMetaChars, &bspos); + /* start to current or first backslash */ + start = !bspos ? special : bspos; continue; } + /* special case for % - should be enclosed always (paired also) */ + if (strchr(specMetaChars2, *special)) { + special = QuoteCmdLinePart(&ds, start, special, specMetaChars2, &bspos); + /* start to current or first backslash */ + start = !bspos ? special : bspos; + continue; + } + /* other not special (and not meta) character */ + bspos = NULL; /* reset last backslash possition (not interesting) */ special++; } - /* rest of argument (don't contain special chars) */ - if (special > start) { - Tcl_DStringAppend(&ds, start, (int) (special - start)); - } - /* end of argument (closed quote-char) */ + /* rest of argument (and escape backslashes before closing main quote) */ + QuoteCmdLineBackslash(&ds, start, special, bspos); + /* end of argument (main closing quote-char) */ Tcl_DStringAppend(&ds, "\"", 1); } } -- cgit v0.12 From c2d61d8dbcee801a9eef8c388816573f3da4a92a Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 23 Aug 2018 08:00:32 +0000 Subject: code review, restored backwards compatibility of the simplest escape of quote-chars (so reverted several tests winpipe-7.x) --- tests/winPipe.test | 8 ++++---- win/tclWinPipe.c | 37 +++++++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/tests/winPipe.test b/tests/winPipe.test index c375d8f..5c6eac8 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -362,22 +362,22 @@ test winpipe-7.2 {BuildCommandLine: null arguments} {win exec} { } {foo "" bar} test winpipe-7.3 {BuildCommandLine: dbl quote quoting #1} {win exec} { exec $env(COMSPEC) /c echo foo "\"" bar -} {foo "\"" bar} +} {foo \" bar} test winpipe-7.4 {BuildCommandLine: dbl quote quoting #2} {win exec} { exec $env(COMSPEC) /c echo foo {""} bar -} {foo "\"\"" bar} +} {foo \"\" bar} test winpipe-7.5 {BuildCommandLine: dbl quote quoting #3} {win exec} { exec $env(COMSPEC) /c echo foo "\" " bar } {foo "\" " bar} test winpipe-7.6 {BuildCommandLine: dbl quote quoting #4} {win exec} { exec $env(COMSPEC) /c echo foo {a="b"} bar -} {foo "a=\"b\"" bar} +} {foo a=\"b\" bar} test winpipe-7.7 {BuildCommandLine: dbl quote quoting #5} {win exec} { exec $env(COMSPEC) /c echo foo {a = "b"} bar } {foo "a = \"b\"" bar} test winpipe-7.8 {BuildCommandLine: dbl quote quoting #6} {win exec} { exec $env(COMSPEC) /c echo {"hello"} {""hello""} {"""hello"""} {"\"hello\""} {he llo} "he \" llo" -} {"\"hello\"" "\"\"hello\"\"" "\"\"\"hello\"\"\"" "\"\\\"hello\\\"\"" "he llo" "he \" llo"} +} {\"hello\" \"\"hello\"\" \"\"\"hello\"\"\" \"\\\"hello\\\"\" "he llo" "he \" llo"} test winpipe-7.9 {BuildCommandLine: N backslashes followed a quote rule #1} {win exec} { exec $env(COMSPEC) /c echo foo \\ bar } {foo \ bar} diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index 728e43a..21bdcec 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1647,21 +1647,27 @@ BuildCommandLine( /* Quote flags: * 1 - escape argument; * 2 - previous arguments chain contains unpaired quote-char; + * 4 - enclose in quotes; */ - quote &= ~1; /* reset escape flag */ + quote &= ~5; /* reset escape flags */ bspos = NULL; if (arg[0] == '\0') { - quote = 1; + quote = 5; } else { int count; Tcl_UniChar ch; for (start = arg; *start != '\0'; start += count) { count = Tcl_UtfToUniChar(start, &ch); - if (Tcl_UniCharIsSpace(ch) || - (count == 1 && (*start=='"' || strchr(specMetaChars, *start))) - ) { - quote |= 1; /* set escape flag - must be quoted */ - break; + if (count == 1) { + if (Tcl_UniCharIsSpace(ch) || + strchr(specMetaChars, *start) + ) { + quote |= 5; /* set escape flag & must be quoted */ + break; + } + if (*start == '"') { + quote |= 1; /* set escape flag */ + } } } } @@ -1670,7 +1676,9 @@ BuildCommandLine( Tcl_DStringAppend(&ds, arg, -1); } else { /* start of argument (main opening quote-char) */ - Tcl_DStringAppend(&ds, "\"", 1); + if (quote & 4) { + Tcl_DStringAppend(&ds, "\"", 1); + } start = arg; for (special = arg; *special != '\0'; ) { /* position of `\` is important before quote or at end (equal `\"` because quoted) */ @@ -1708,10 +1716,15 @@ BuildCommandLine( bspos = NULL; /* reset last backslash possition (not interesting) */ special++; } - /* rest of argument (and escape backslashes before closing main quote) */ - QuoteCmdLineBackslash(&ds, start, special, bspos); - /* end of argument (main closing quote-char) */ - Tcl_DStringAppend(&ds, "\"", 1); + if (quote & 4) { + /* rest of argument (and escape backslashes before closing main quote) */ + QuoteCmdLineBackslash(&ds, start, special, bspos); + /* end of argument (main closing quote-char) */ + Tcl_DStringAppend(&ds, "\"", 1); + } else { + /* rest of argument */ + QuoteCmdLineBackslash(&ds, start, special, NULL); + } } } Tcl_DStringFree(linePtr); -- cgit v0.12 From 820a737a2f302b54ee7af88484cbfd694ec65804 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 23 Aug 2018 10:26:03 +0000 Subject: code review, skip slow test winpipe-8.2 executed args from injectList particularly (normally winpipe-8.3 covers the same but jointly), to enable use parameter `-constraints slowTest`, added new test with randomly generated potentially dangerous args --- library/tcltest/tcltest.tcl | 4 +++ tests/winPipe.test | 35 ++++++++++++++++++-- win/tclWinPipe.c | 81 ++++++++++++++++++++++++++++----------------- 3 files changed, 87 insertions(+), 33 deletions(-) diff --git a/library/tcltest/tcltest.tcl b/library/tcltest/tcltest.tcl index 8e43859..936acaa 100644 --- a/library/tcltest/tcltest.tcl +++ b/library/tcltest/tcltest.tcl @@ -1243,6 +1243,10 @@ proc tcltest::DefineConstraintInitializers {} { ConstraintInitializer interactive \ {expr {[info exists ::tcl_interactive] && $::tcl_interactive}} + # Skip slow tests (to enable slow tests add parameter `-constraints slowTest`) + + ConstraintInitializer slowTest {format 0} + # Some tests can only be run if the installation came from a CD # image instead of a web image. Some tests must be skipped if you # are running as root on Unix. Other tests can only be run if you diff --git a/tests/winPipe.test b/tests/winPipe.test index 5c6eac8..4385690 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -336,8 +336,9 @@ proc _testExecArgs {single args} { # (e. g. to cover unexpected trim by nts-zero case, and args don't recombined): set args [list "1st" $args "3rd"] } + set args [list {*}$args]; # normalized canonical list foreach cmd $cmds { - set e [list [file tail $path(echoArgs.tcl)] {*}$args] + set e [linsert $args 0 [file tail $path(echoArgs.tcl)]] tcltest::DebugPuts 4 " ## test exec [file extension [lindex $cmd 0]] ($cmd) for\n ## $args" if {[catch { exec {*}$cmd {*}$args @@ -502,7 +503,7 @@ test winpipe-8.1 {BuildCommandLine/parse_cmdline pass-thru: dumped arguments are } -result {} test winpipe-8.2 {BuildCommandLine/parse_cmdline pass-thru: check injection on special meta-chars (particular)} \ --constraints {win exec} -body { +-constraints {win exec slowTest} -body { _testExecArgs 1 {*}$injectList } -result {} @@ -524,6 +525,36 @@ test winpipe-8.4 {BuildCommandLine/parse_cmdline pass-thru: check injection on s [list "START\"" {*}$injectList "\"END"] } -result {} +test winpipe-8.5 {BuildCommandLine/parse_cmdline pass-thru: check injection on special meta-chars (random mix)} \ +-constraints {win exec} -body { + set lst {} + set maps { + {\&|^<>!()%} + {\&|^<>!()% } + {"\&|^<>!()%} + {"\&|^<>!()% } + {"""""\\\\\&|^<>!()%} + {"""""\\\\\&|^<>!()% } + } + set i 0 + time { + set args {[incr i].} + time { + set map [lindex $maps [expr {int(rand()*[llength $maps])}]] + # be sure arg has some prefix (avoid special handling, like |& etc) + set a {x} + while {[string length $a] < 50} { + append a [string index $map [expr {int(rand()*[string length $map])}]] + } + lappend args $a + } 20 + lappend lst $args + } 10 + _testExecArgs 0 {*}$lst +} -result {} -cleanup { + unset -nocomplain lst args a map maps +} + rename _testExecArgs {} # restore old values for env(TMP) and env(TEMP) diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index 21bdcec..e596cac 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1625,6 +1625,13 @@ BuildCommandLine( /* characters to enclose in quotes in any case (regardless unpaired-flag) */ const static char *specMetaChars2 = "%"; + /* Quote flags: + * CL_ESCAPE - escape argument; + * CL_QUOTE - enclose in quotes; + * CL_UNPAIRED - previous arguments chain contains unpaired quote-char; + */ + enum {CL_ESCAPE = 1, CL_QUOTE = 2, CL_UNPAIRED = 4}; + Tcl_DStringInit(&ds); /* @@ -1644,41 +1651,55 @@ BuildCommandLine( Tcl_DStringAppend(&ds, " ", 1); } - /* Quote flags: - * 1 - escape argument; - * 2 - previous arguments chain contains unpaired quote-char; - * 4 - enclose in quotes; - */ - quote &= ~5; /* reset escape flags */ + quote &= ~(CL_ESCAPE|CL_QUOTE); /* reset escape flags */ bspos = NULL; if (arg[0] == '\0') { - quote = 5; + quote = CL_QUOTE; } else { int count; Tcl_UniChar ch; - for (start = arg; *start != '\0'; start += count) { + for (start = arg; + *start != '\0' && + (quote & (CL_ESCAPE|CL_QUOTE)) != (CL_ESCAPE|CL_QUOTE); + start += count + ) { count = Tcl_UtfToUniChar(start, &ch); - if (count == 1) { - if (Tcl_UniCharIsSpace(ch) || - strchr(specMetaChars, *start) - ) { - quote |= 5; /* set escape flag & must be quoted */ + if (count > 1) continue; + if (Tcl_UniCharIsSpace(ch)) { + quote |= CL_QUOTE; /* quote only */ + if (bspos) { /* if backslash found - escape & quote */ + quote |= CL_ESCAPE; break; } - if (*start == '"') { - quote |= 1; /* set escape flag */ + continue; + } + if (strchr(specMetaChars, *start)) { + quote |= (CL_ESCAPE|CL_QUOTE); /*escape & quote */ + break; + } + if (*start == '"') { + quote |= CL_ESCAPE; /* escape only */ + continue; + } + if (*start == '\\') { + bspos = start; + if (quote & CL_QUOTE) { /* if quote - escape & quote */ + quote |= CL_ESCAPE; + break; } + continue; } } + bspos = NULL; } - if (!(quote & 1)) { + if (quote & CL_QUOTE) { + /* start of argument (main opening quote-char) */ + Tcl_DStringAppend(&ds, "\"", 1); + } + if (!(quote & CL_ESCAPE)) { /* nothing to escape */ Tcl_DStringAppend(&ds, arg, -1); } else { - /* start of argument (main opening quote-char) */ - if (quote & 4) { - Tcl_DStringAppend(&ds, "\"", 1); - } start = arg; for (special = arg; *special != '\0'; ) { /* position of `\` is important before quote or at end (equal `\"` because quoted) */ @@ -1689,7 +1710,7 @@ BuildCommandLine( } /* ["] */ if (*special == '"') { - quote ^= 2; /* invert unpaired flag - observe unpaired quotes */ + quote ^= CL_UNPAIRED; /* invert unpaired flag - observe unpaired quotes */ /* add part before (and escape backslashes before quote) */ QuoteCmdLineBackslash(&ds, start, special, bspos); bspos = NULL; @@ -1699,7 +1720,7 @@ BuildCommandLine( continue; } /* unpaired (escaped) quote causes special handling on meta-chars */ - if ((quote & 2) && strchr(specMetaChars, *special)) { + if ((quote & CL_UNPAIRED) && strchr(specMetaChars, *special)) { special = QuoteCmdLinePart(&ds, start, special, specMetaChars, &bspos); /* start to current or first backslash */ start = !bspos ? special : bspos; @@ -1716,15 +1737,13 @@ BuildCommandLine( bspos = NULL; /* reset last backslash possition (not interesting) */ special++; } - if (quote & 4) { - /* rest of argument (and escape backslashes before closing main quote) */ - QuoteCmdLineBackslash(&ds, start, special, bspos); - /* end of argument (main closing quote-char) */ - Tcl_DStringAppend(&ds, "\"", 1); - } else { - /* rest of argument */ - QuoteCmdLineBackslash(&ds, start, special, NULL); - } + /* rest of argument (and escape backslashes before closing main quote) */ + QuoteCmdLineBackslash(&ds, start, special, + (quote & CL_QUOTE) ? bspos : NULL); + } + if (quote & CL_QUOTE) { + /* end of argument (main closing quote-char) */ + Tcl_DStringAppend(&ds, "\"", 1); } } Tcl_DStringFree(linePtr); -- cgit v0.12 From db610f91eb22c4b49768bf828b6cd6a35dbb98f1 Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 29 Aug 2018 15:49:19 +0000 Subject: code review after merge with 8.5 (restore usage of some functions, after lost by conflict resolving) --- win/tclWinPipe.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index be9d920..dd54a27 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -1473,7 +1473,7 @@ QuoteCmdLineBackslash( Tcl_DStringAppend(dsPtr, start, (int) (bspos - start)); } while (bspos++ < current) { /* each backslash twice */ - Tcl_DStringAppend(dsPtr, "\\\\", 2); + TclDStringAppendLiteral(dsPtr, "\\\\"); } } } @@ -1501,7 +1501,7 @@ QuoteCmdLinePart( * so `\` remains `\`, but important - not at end of part, because results as * before the quote, so `%\%\` should be escaped as `"%\%"\\`). */ - Tcl_DStringAppend(dsPtr, "\"", 1); /* opening escape quote-char */ + TclDStringAppendLiteral(dsPtr, "\""); /* opening escape quote-char */ do { *bspos = NULL; special++; @@ -1518,7 +1518,7 @@ QuoteCmdLinePart( /* unescaped rest before first backslash (rather belongs to the main block) */ QuoteCmdLineBackslash(dsPtr, start, *bspos, NULL); } - Tcl_DStringAppend(dsPtr, "\"", 1); /* closing escape quote-char */ + TclDStringAppendLiteral(dsPtr, "\""); /* closing escape quote-char */ return special; } @@ -1553,9 +1553,9 @@ BuildCommandLine( * Prime the path. Add a space separator if we were primed with something. */ - Tcl_DStringAppend(&ds, Tcl_DStringValue(linePtr), -1); + TclDStringAppendDString(&ds, linePtr); if (Tcl_DStringLength(linePtr) > 0) { - Tcl_DStringAppend(&ds, " ", 1); + TclDStringAppendLiteral(&ds, " "); } for (i = 0; i < argc; i++) { @@ -1563,7 +1563,7 @@ BuildCommandLine( arg = executable; } else { arg = argv[i]; - Tcl_DStringAppend(&ds, " ", 1); + TclDStringAppendLiteral(&ds, " "); } quote &= ~(CL_ESCAPE|CL_QUOTE); /* reset escape flags */ @@ -1609,7 +1609,7 @@ BuildCommandLine( } if (quote & CL_QUOTE) { /* start of argument (main opening quote-char) */ - Tcl_DStringAppend(&ds, "\"", 1); + TclDStringAppendLiteral(&ds, "\""); } if (!(quote & CL_ESCAPE)) { /* nothing to escape */ @@ -1630,7 +1630,7 @@ BuildCommandLine( QuoteCmdLineBackslash(&ds, start, special, bspos); bspos = NULL; /* escape using backslash */ - Tcl_DStringAppend(&ds, "\\\"", 2); + TclDStringAppendLiteral(&ds, "\\\""); start = ++special; continue; } @@ -1658,7 +1658,7 @@ BuildCommandLine( } if (quote & CL_QUOTE) { /* end of argument (main closing quote-char) */ - Tcl_DStringAppend(&ds, "\"", 1); + TclDStringAppendLiteral(&ds, "\""); } } Tcl_DStringFree(linePtr); -- cgit v0.12 From 265c9d416fb1297d507560a8bd9651c02e042b22 Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 29 Aug 2018 15:55:13 +0000 Subject: partially cherry-picking of [5099a81b50], never reached 8.6, so for example build for MINGW breaks tests winpipe-8.1 etc, because "*" will be expanded. --- win/tclAppInit.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/win/tclAppInit.c b/win/tclAppInit.c index e06eaf5..9c919fc 100644 --- a/win/tclAppInit.c +++ b/win/tclAppInit.c @@ -29,6 +29,10 @@ extern Tcl_PackageInitProc Tcltest_Init; extern Tcl_PackageInitProc Tcltest_SafeInit; #endif /* TCL_TEST */ +#if defined(__GNUC__) +int _CRT_glob = 0; +#endif /* __GNUC__ */ + #if defined(STATIC_BUILD) && TCL_USE_STATIC_PACKAGES extern Tcl_PackageInitProc Registry_Init; extern Tcl_PackageInitProc Dde_Init; -- cgit v0.12 From 2f19b0f34600e566052137a580db0921e83332c7 Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 29 Aug 2018 16:55:36 +0000 Subject: small amend to [cae24931ed] (no _CRT_glob in both cases __GNUC__ || TCL_BROKEN_MAINARGS). --- win/tclAppInit.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/win/tclAppInit.c b/win/tclAppInit.c index 9c919fc..2236da3 100644 --- a/win/tclAppInit.c +++ b/win/tclAppInit.c @@ -29,18 +29,16 @@ extern Tcl_PackageInitProc Tcltest_Init; extern Tcl_PackageInitProc Tcltest_SafeInit; #endif /* TCL_TEST */ -#if defined(__GNUC__) -int _CRT_glob = 0; -#endif /* __GNUC__ */ - #if defined(STATIC_BUILD) && TCL_USE_STATIC_PACKAGES extern Tcl_PackageInitProc Registry_Init; extern Tcl_PackageInitProc Dde_Init; extern Tcl_PackageInitProc Dde_SafeInit; #endif -#ifdef TCL_BROKEN_MAINARGS +#if defined(__GNUC__) || defined(TCL_BROKEN_MAINARGS) int _CRT_glob = 0; +#endif /* __GNUC__ || TCL_BROKEN_MAINARGS */ +#ifdef TCL_BROKEN_MAINARGS static void setargv(int *argcPtr, TCHAR ***argvPtr); #endif /* TCL_BROKEN_MAINARGS */ -- cgit v0.12 From 9cec6bac276f8925b60a49891c272be0b5e3e3f3 Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 29 Aug 2018 16:58:06 +0000 Subject: tcltest: forgotten built-in constraint "slowTest" --- tests/tcltest.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tcltest.test b/tests/tcltest.test index d513856..028d4fa 100644 --- a/tests/tcltest.test +++ b/tests/tcltest.test @@ -311,7 +311,7 @@ test tcltest-5.5 {InitConstraints: list of built-in constraints} \ -result [lsort { 95 98 asyncPipeClose eformat emptyTest exec hasIsoLocale interactive knownBug mac macCrash macOnly macOrPc macOrUnix macOrWin nonBlockFiles - nonPortable notRoot nt pc pcCrash pcOnly root singleTestInterp socket + nonPortable notRoot nt pc pcCrash pcOnly root singleTestInterp slowTest socket stdio tempNotMac tempNotPc tempNotUnix tempNotWin unix unixCrash unixExecs unixOnly unixOrPc unixOrWin userInteraction win winCrash winOnly }] -- cgit v0.12 From 6d88b01d1e2bb2a76d4e0f094f1e895e3b16c859 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 30 Aug 2018 11:08:51 +0000 Subject: test-cases to cover quoting of the newline character, and the documentation extended. --- doc/exec.n | 17 +++++++++++++++++ tests/winPipe.test | 30 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/doc/exec.n b/doc/exec.n index 3857a71..e40b596 100644 --- a/doc/exec.n +++ b/doc/exec.n @@ -207,6 +207,19 @@ information is instead sent to the console, if one is present, or is discarded. .RS .PP +Note that the current escape resp. quoting of arguments for windows works only +with executables using CommandLineToArgv, CRT-library or similar, as well as +with the windows batch files (excepting the newline, see below). +Although it is the common escape algorithm, but, in fact, the way how the +executable parses the command-line (resp. splits it into single arguments) +is decisive. +.PP +Unfortunately, there is currently no way to supply newline character within +an argument to the batch files (\fB.cmd\fR or \fB.bat\fR) or to the command +processor (\fBcmd.exe /c\fR), because this causes truncation of command-line +(also the argument chain) on the first newline character. +But it works properly with an executable (using CommandLineToArgv, etc). +.PP The Tk console text widget does not provide real standard IO capabilities. Under Tk, when redirecting from standard input, all applications will see an immediate end-of-file; information redirected to standard output or standard @@ -415,6 +428,10 @@ that sometimes pop up: .CE With the file \fIcmp.bat\fR looking something like: .CS +@gcc %* +.CE +or like another variant using single parameters: +.CS @gcc %1 %2 %3 %4 %5 %6 %7 %8 %9 .CE .PP diff --git a/tests/winPipe.test b/tests/winPipe.test index 4385690..6a02147 100644 --- a/tests/winPipe.test +++ b/tests/winPipe.test @@ -348,6 +348,10 @@ proc _testExecArgs {single args} { if {$r ne $e} { append broken "\[ERROR\]: exec [file extension [lindex $cmd 0]] on $args\n -- result:\n$r\n -- expected:\n$e\n" } + if {$single & 8} { + # if test exe only: + break + } } } return $broken @@ -555,6 +559,32 @@ test winpipe-8.5 {BuildCommandLine/parse_cmdline pass-thru: check injection on s unset -nocomplain lst args a map maps } +set injectList { + "test\"\nwhoami" "test\"\"\nwhoami" + "test\"\"\"\nwhoami" "test\"\"\"\"\nwhoami" + "test;\n&echo \"" "\"test;\n&echo \"" + "test\";\n&echo \"" "\"test\";\n&echo \"" + "\"\"test\";\n&echo \"" +} + +test winpipe-8.6 {BuildCommandLine/parse_cmdline pass-thru: check new-line quoted in args} \ +-constraints {win exec} -body { + # test exe only, because currently there is no proper way to escape a new-line char resp. + # to supply a new-line to the batch-files within arguments (command line is truncated). + _testExecArgs 8 \ + [list START {*}$injectList END] \ + [list "START\"" {*}$injectList END] \ + [list START {*}$injectList "\"END"] \ + [list "START\"" {*}$injectList "\"END"] +} -result {} + +test winpipe-8.7 {BuildCommandLine/parse_cmdline pass-thru: check new-line quoted in args (batch)} \ +-constraints {win exec knownBug} -body { + # this will fail if executed batch-file, because currently there is no proper way to escape a new-line char. + _testExecArgs 0 $injectList +} -result {} + + rename _testExecArgs {} # restore old values for env(TMP) and env(TEMP) -- cgit v0.12 From 2f2b7f6ac7122f3b6be07e793e1658cdb5791aa2 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 3 Sep 2018 12:53:15 +0000 Subject: Eliminate use of wideBiggerThanInt test constraint, since it's the same as {longIs32bit wideIs64bit}. And ... it's name is actually wrong ... Don't use int() any more in any test constraint, since it's semantics might change. We don't want the test constraints to change with it. (See: TIP# 514) Simplify implementation of wideIs64bit test constraint, just testing for 64-bit sign bit is enough. --- generic/tclTest.c | 22 ++++++++++++++++++++++ tests/compExpr-old.test | 4 ++-- tests/execute.test | 2 +- tests/expr-old.test | 3 ++- tests/expr.test | 7 +++---- tests/format.test | 12 +++++------- tests/get.test | 4 ++-- tests/obj.test | 14 +++++++------- tests/platform.test | 14 ++++---------- tests/scan.test | 3 +-- 10 files changed, 49 insertions(+), 36 deletions(-) diff --git a/generic/tclTest.c b/generic/tclTest.c index ac01ecf..48b4761 100644 --- a/generic/tclTest.c +++ b/generic/tclTest.c @@ -293,6 +293,8 @@ static int TestgetassocdataCmd(ClientData dummy, Tcl_Interp *interp, int argc, const char **argv); static int TestgetintCmd(ClientData dummy, Tcl_Interp *interp, int argc, const char **argv); +static int TestlongsizeCmd(ClientData dummy, + Tcl_Interp *interp, int argc, const char **argv); static int TestgetplatformCmd(ClientData dummy, Tcl_Interp *interp, int argc, const char **argv); static int TestgetvarfullnameCmd( @@ -645,6 +647,8 @@ Tcltest_Init( NULL, NULL); Tcl_CreateCommand(interp, "testgetint", TestgetintCmd, NULL, NULL); + Tcl_CreateCommand(interp, "testlongsize", TestlongsizeCmd, + NULL, NULL); Tcl_CreateCommand(interp, "testgetplatform", TestgetplatformCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "testgetvarfullname", @@ -6936,6 +6940,24 @@ TestgetintCmd( } } +/* + * Used for determining sizeof(long) at script level. + */ +static int +TestlongsizeCmd( + ClientData dummy, + Tcl_Interp *interp, + int argc, + const char **argv) +{ + if (argc != 1) { + Tcl_AppendResult(interp, "wrong # args", NULL); + return TCL_ERROR; + } + Tcl_SetObjResult(interp, Tcl_NewIntObj((int)sizeof(long))); + return TCL_OK; +} + static int NREUnwind_callback( ClientData data[], diff --git a/tests/compExpr-old.test b/tests/compExpr-old.test index 0136ccd..798c92a 100644 --- a/tests/compExpr-old.test +++ b/tests/compExpr-old.test @@ -78,8 +78,8 @@ proc testIEEE {} { } testConstraint ieeeFloatingPoint [testIEEE] -testConstraint longIs32bit [expr {int(0x80000000) < 0}] -testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] +testConstraint longIs64bit [expr {$tcl_platform(wordSize) == 8}] # procedures used below diff --git a/tests/execute.test b/tests/execute.test index 6c277f8..2c54a71 100644 --- a/tests/execute.test +++ b/tests/execute.test @@ -34,7 +34,7 @@ testConstraint testobj [expr { && [llength [info commands teststringobj]] }] -testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] testConstraint testexprlongobj [llength [info commands testexprlongobj]] # Tests for the omnibus TclExecuteByteCode function: diff --git a/tests/expr-old.test b/tests/expr-old.test index a73b77a..3192c74 100644 --- a/tests/expr-old.test +++ b/tests/expr-old.test @@ -22,7 +22,8 @@ catch [list package require -exact Tcltest [info patchlevel]] testConstraint testexprlong [llength [info commands testexprlong]] testConstraint testexprdouble [llength [info commands testexprdouble]] testConstraint testexprstring [llength [info commands testexprstring]] -testConstraint longIs32bit [expr {int(0x80000000) < 0}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] +testConstraint longIs64bit [expr {$tcl_platform(wordSize) == 8}] # Big test for correct ordering of data in [expr] diff --git a/tests/expr.test b/tests/expr.test index 713681a..0762cf2 100644 --- a/tests/expr.test +++ b/tests/expr.test @@ -21,10 +21,9 @@ catch [list package require -exact Tcltest [info patchlevel]] # Determine if "long int" type is a 32 bit number and if the wide # type is a 64 bit number on this machine. -testConstraint longIs32bit [expr {int(0x80000000) < 0}] -testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] -testConstraint wideIs64bit \ - [expr {(wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] +testConstraint longIs64bit [expr {$tcl_platform(wordSize) == 8}] +testConstraint wideIs64bit [expr {wide(0x8000000000000000) < 0}] # Big test for correct ordering of data in [expr] diff --git a/tests/format.test b/tests/format.test index cdea545..1bf46a1 100644 --- a/tests/format.test +++ b/tests/format.test @@ -16,11 +16,9 @@ if {[lsearch [namespace children] ::tcltest] == -1} { } # %u output depends on word length, so this test is not portable. -testConstraint longIs32bit [expr {int(0x80000000) < 0}] -testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] -testConstraint wideIs64bit \ - [expr {(wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}] -testConstraint wideBiggerThanInt [expr {wide(0x80000000) != int(0x80000000)}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] +testConstraint longIs64bit [expr {$tcl_platform(wordSize) == 8}] +testConstraint wideIs64bit [expr {wide(0x8000000000000000) < 0}] testConstraint pointerIs64bit [expr {$tcl_platform(pointerSize) >= 8}] test format-1.1 {integer formatting} { @@ -547,7 +545,7 @@ for {set i 290} {$i < 400} {incr i} { append b "x" } -test format-17.1 {testing %d with wide} {wideIs64bit wideBiggerThanInt} { +test format-17.1 {testing %d with wide} {longIs32bit wideIs64bit} { format %d 7810179016327718216 } 1819043144 test format-17.2 {testing %ld with wide} {wideIs64bit} { @@ -580,7 +578,7 @@ test format-18.1 {do not demote existing numeric values} { format %08x $b lappend result [expr {$a == $b}] } {1 1 1 1} -test format-18.2 {do not demote existing numeric values} {wideBiggerThanInt} { +test format-18.2 {do not demote existing numeric values} {longIs32bit wideIs64bit} { set a [expr {0xaaaaaaaaaa + 1}] set b 0xaaaaaaaaab list [format %08x $a] [expr {$a == $b}] diff --git a/tests/get.test b/tests/get.test index d6a7206..c381098 100644 --- a/tests/get.test +++ b/tests/get.test @@ -20,8 +20,8 @@ catch [list package require -exact Tcltest [info patchlevel]] testConstraint testgetint [llength [info commands testgetint]] testConstraint testdoubleobj [llength [info commands testdoubleobj]] -testConstraint longIs32bit [expr {int(0x80000000) < 0}] -testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] +testConstraint longIs64bit [expr {$tcl_platform(wordSize) == 8}] test get-1.1 {Tcl_GetInt procedure} testgetint { testgetint 44 { 22} diff --git a/tests/obj.test b/tests/obj.test index cb62d3f..d407669 100644 --- a/tests/obj.test +++ b/tests/obj.test @@ -20,8 +20,8 @@ if {[lsearch [namespace children] ::tcltest] == -1} { catch [list package require -exact Tcltest [info patchlevel]] testConstraint testobj [llength [info commands testobj]] -testConstraint longIs32bit [expr {int(0x80000000) < 0}] -testConstraint wideBiggerThanInt [expr {wide(0x80000000) != int(0x80000000)}] +testConstraint longIs32bit [expr {$tcl_platform(wordSize) == 4}] +testConstraint wideIs64bit [expr {wide(0x8000000000000000) < 0}] test obj-1.1 {Tcl_AppendAllObjTypes, and InitTypeTable, Tcl_RegisterObjType} testobj { set r 1 @@ -549,11 +549,11 @@ test obj-32.1 {freeing very large object trees} { unset x } {} -test obj-33.1 {integer overflow on input} {longIs32bit wideBiggerThanInt} { +test obj-33.1 {integer overflow on input} {longIs32bit wideIs64bit} { set x 0x8000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {1 2147483648} -test obj-33.2 {integer overflow on input} {longIs32bit wideBiggerThanInt} { +test obj-33.2 {integer overflow on input} {longIs32bit wideIs64bit} { set x 0xffff; append x ffff list [string is integer $x] [expr { wide($x) }] } {1 4294967295} @@ -561,15 +561,15 @@ test obj-33.3 {integer overflow on input} { set x 0x10000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {0 4294967296} -test obj-33.4 {integer overflow on input} {longIs32bit wideBiggerThanInt} { +test obj-33.4 {integer overflow on input} {longIs32bit wideIs64bit} { set x -0x8000; append x 0000 list [string is integer $x] [expr { wide($x) }] } {1 -2147483648} -test obj-33.5 {integer overflow on input} {longIs32bit wideBiggerThanInt} { +test obj-33.5 {integer overflow on input} {longIs32bit wideIs64bit} { set x -0x8000; append x 0001 list [string is integer $x] [expr { wide($x) }] } {1 -2147483649} -test obj-33.6 {integer overflow on input} {longIs32bit wideBiggerThanInt} { +test obj-33.6 {integer overflow on input} {longIs32bit wideIs64bit} { set x -0xffff; append x ffff list [string is integer $x] [expr { wide($x) }] } {1 -4294967295} diff --git a/tests/platform.test b/tests/platform.test index fa533e8..5880fb9 100644 --- a/tests/platform.test +++ b/tests/platform.test @@ -25,6 +25,7 @@ namespace eval ::tcl::test::platform { catch [list package require -exact Tcltest [info patchlevel]] testConstraint testCPUID [llength [info commands testcpuid]] +testConstraint testlongsize [llength [info commands testlongsize]] test platform-1.0 {tcl_platform(engine)} { set tcl_platform(engine) @@ -39,16 +40,9 @@ test platform-1.1 {TclpSetVariables: tcl_platform} { set result } {byteOrder engine machine os osVersion pathSeparator platform pointerSize user wordSize} -# Test assumes twos-complement arithmetic, which is true of virtually -# everything these days. Note that this does *not* use wide(), and -# this is intentional since that could make Tcl's numbers wider than -# the machine-integer on some platforms... -test platform-2.1 {tcl_platform(wordSize) indicates size of native word} { - set result [expr {int(1 << (8 * $tcl_platform(wordSize) - 1))}] - # Result must be the largest bit in a machine word, which this checks - # without assuming how wide the word really is - list [expr {$result < 0}] [expr {$result ^ int($result - 1)}] -} {1 -1} +test platform-2.1 {tcl_platform(wordSize) indicates size of native word} testlongsize { + expr {$tcl_platform(wordSize) == [testlongsize]} +} {1} # On Windows/UNIX, test that the CPU ID works diff --git a/tests/scan.test b/tests/scan.test index 1f32b9f..5c38fff 100644 --- a/tests/scan.test +++ b/tests/scan.test @@ -85,8 +85,7 @@ proc testIEEE {} { } testConstraint ieeeFloatingPoint [testIEEE] -testConstraint wideIs64bit \ - [expr {(wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}] +testConstraint wideIs64bit [expr {wide(0x8000000000000000) < 0}] test scan-1.1 {BuildCharSet, CharInSet} { list [scan foo {%[^o]} x] $x -- cgit v0.12 From fdf1df3b29531c5031a33f2e3c1f4668937c1c5f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 4 Sep 2018 14:37:01 +0000 Subject: Fix [540bed4bde]: binary format can result in "integer value too large to represent". Implemented a new utility function TclGetWideBitsFromObj(), which handles the overflowing of integers using bignums. This function can be used in a _LOT_ of other places, preventing code duplication. Done that as well. Those changes have no effect on other commands, only two new "binary format" test-cases for this specific situation: binary-44.5 and binary-44.6 --- generic/tclBasic.c | 55 ++++++-------------------------------- generic/tclBinary.c | 35 ++++++++++++------------ generic/tclCmdAH.c | 8 +++--- generic/tclInt.h | 2 ++ generic/tclObj.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++--- generic/tclStringObj.c | 26 +++--------------- tests/binary.test | 41 +++++++++++++++++----------- 7 files changed, 129 insertions(+), 110 deletions(-) diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 93776dc..0190c13 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -7680,27 +7680,14 @@ ExprIntFunc( int objc, /* Actual parameter count. */ Tcl_Obj *const *objv) /* Actual parameter vector. */ { - long iResult; + Tcl_WideInt wResult; Tcl_Obj *objPtr; if (ExprEntierFunc(NULL, interp, objc, objv) != TCL_OK) { return TCL_ERROR; } objPtr = Tcl_GetObjResult(interp); - if (TclGetLongFromObj(NULL, objPtr, &iResult) != TCL_OK) { - /* - * Truncate the bignum; keep only bits in long range. - */ - - mp_int big; - - Tcl_GetBignumFromObj(NULL, objPtr, &big); - mp_mod_2d(&big, (int) CHAR_BIT * sizeof(long), &big); - objPtr = Tcl_NewBignumObj(&big); - Tcl_IncrRefCount(objPtr); - TclGetLongFromObj(NULL, objPtr, &iResult); - Tcl_DecrRefCount(objPtr); - } - Tcl_SetObjResult(interp, Tcl_NewLongObj(iResult)); + TclGetWideBitsFromObj(NULL, objPtr, &wResult); + Tcl_SetObjResult(interp, Tcl_NewLongObj((long)wResult)); return TCL_OK; } @@ -7719,20 +7706,7 @@ ExprWideFunc( return TCL_ERROR; } objPtr = Tcl_GetObjResult(interp); - if (TclGetWideIntFromObj(NULL, objPtr, &wResult) != TCL_OK) { - /* - * Truncate the bignum; keep only bits in wide int range. - */ - - mp_int big; - - Tcl_GetBignumFromObj(NULL, objPtr, &big); - mp_mod_2d(&big, (int) CHAR_BIT * sizeof(Tcl_WideInt), &big); - objPtr = Tcl_NewBignumObj(&big); - Tcl_IncrRefCount(objPtr); - TclGetWideIntFromObj(NULL, objPtr, &wResult); - Tcl_DecrRefCount(objPtr); - } + TclGetWideBitsFromObj(NULL, objPtr, &wResult); Tcl_SetObjResult(interp, Tcl_NewWideIntObj(wResult)); return TCL_OK; } @@ -7979,7 +7953,7 @@ ExprSrandFunc( Tcl_Obj *const *objv) /* Parameter vector. */ { Interp *iPtr = (Interp *) interp; - long i = 0; /* Initialized to avoid compiler warning. */ + Tcl_WideInt w = 0; /* Initialized to avoid compiler warning. */ /* * Convert argument and use it to reset the seed. @@ -7990,20 +7964,8 @@ ExprSrandFunc( return TCL_ERROR; } - if (TclGetLongFromObj(NULL, objv[1], &i) != TCL_OK) { - Tcl_Obj *objPtr; - mp_int big; - - if (Tcl_GetBignumFromObj(interp, objv[1], &big) != TCL_OK) { - /* TODO: more ::errorInfo here? or in caller? */ - return TCL_ERROR; - } - - mp_mod_2d(&big, (int) CHAR_BIT * sizeof(long), &big); - objPtr = Tcl_NewBignumObj(&big); - Tcl_IncrRefCount(objPtr); - TclGetLongFromObj(NULL, objPtr, &i); - Tcl_DecrRefCount(objPtr); + if (TclGetWideBitsFromObj(NULL, objv[1], &w) != TCL_OK) { + return TCL_ERROR; } /* @@ -8012,8 +7974,7 @@ ExprSrandFunc( */ iPtr->flags |= RAND_SEED_INITIALIZED; - iPtr->randSeed = i; - iPtr->randSeed &= (unsigned long) 0x7fffffff; + iPtr->randSeed = (unsigned long) (w & 0x7fffffff); if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { iPtr->randSeed ^= 123459876; } diff --git a/generic/tclBinary.c b/generic/tclBinary.c index cb5a5cb..24f228e 100644 --- a/generic/tclBinary.c +++ b/generic/tclBinary.c @@ -1963,7 +1963,6 @@ FormatNumber( Tcl_Obj *src, /* Number to format. */ unsigned char **cursorPtr) /* Pointer to index into destination buffer. */ { - long value; double dvalue; Tcl_WideInt wvalue; float fvalue; @@ -2025,7 +2024,7 @@ FormatNumber( case 'w': case 'W': case 'm': - if (Tcl_GetWideIntFromObj(interp, src, &wvalue) != TCL_OK) { + if (TclGetWideBitsFromObj(interp, src, &wvalue) != TCL_OK) { return TCL_ERROR; } if (NeedReversing(type)) { @@ -2055,19 +2054,19 @@ FormatNumber( case 'i': case 'I': case 'n': - if (TclGetLongFromObj(interp, src, &value) != TCL_OK) { + if (TclGetWideBitsFromObj(interp, src, &wvalue) != TCL_OK) { return TCL_ERROR; } if (NeedReversing(type)) { - *(*cursorPtr)++ = UCHAR(value); - *(*cursorPtr)++ = UCHAR(value >> 8); - *(*cursorPtr)++ = UCHAR(value >> 16); - *(*cursorPtr)++ = UCHAR(value >> 24); + *(*cursorPtr)++ = UCHAR(wvalue); + *(*cursorPtr)++ = UCHAR(wvalue >> 8); + *(*cursorPtr)++ = UCHAR(wvalue >> 16); + *(*cursorPtr)++ = UCHAR(wvalue >> 24); } else { - *(*cursorPtr)++ = UCHAR(value >> 24); - *(*cursorPtr)++ = UCHAR(value >> 16); - *(*cursorPtr)++ = UCHAR(value >> 8); - *(*cursorPtr)++ = UCHAR(value); + *(*cursorPtr)++ = UCHAR(wvalue >> 24); + *(*cursorPtr)++ = UCHAR(wvalue >> 16); + *(*cursorPtr)++ = UCHAR(wvalue >> 8); + *(*cursorPtr)++ = UCHAR(wvalue); } return TCL_OK; @@ -2077,15 +2076,15 @@ FormatNumber( case 's': case 'S': case 't': - if (TclGetLongFromObj(interp, src, &value) != TCL_OK) { + if (TclGetWideBitsFromObj(interp, src, &wvalue) != TCL_OK) { return TCL_ERROR; } if (NeedReversing(type)) { - *(*cursorPtr)++ = UCHAR(value); - *(*cursorPtr)++ = UCHAR(value >> 8); + *(*cursorPtr)++ = UCHAR(wvalue); + *(*cursorPtr)++ = UCHAR(wvalue >> 8); } else { - *(*cursorPtr)++ = UCHAR(value >> 8); - *(*cursorPtr)++ = UCHAR(value); + *(*cursorPtr)++ = UCHAR(wvalue >> 8); + *(*cursorPtr)++ = UCHAR(wvalue); } return TCL_OK; @@ -2093,10 +2092,10 @@ FormatNumber( * 8-bit integer values. */ case 'c': - if (TclGetLongFromObj(interp, src, &value) != TCL_OK) { + if (TclGetWideBitsFromObj(interp, src, &wvalue) != TCL_OK) { return TCL_ERROR; } - *(*cursorPtr)++ = UCHAR(value); + *(*cursorPtr)++ = UCHAR(wvalue); return TCL_OK; default: diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c index 810fac6..94cb8aa 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -1398,9 +1398,9 @@ FileAttrAccessTimeCmd( * platforms. [Bug 698146] */ - long newTime; + Tcl_WideInt newTime; - if (TclGetLongFromObj(interp, objv[2], &newTime) != TCL_OK) { + if (TclGetWideIntFromObj(interp, objv[2], &newTime) != TCL_OK) { return TCL_ERROR; } @@ -1479,9 +1479,9 @@ FileAttrModifyTimeCmd( * platforms. [Bug 698146] */ - long newTime; + Tcl_WideInt newTime; - if (TclGetLongFromObj(interp, objv[2], &newTime) != TCL_OK) { + if (TclGetWideIntFromObj(interp, objv[2], &newTime) != TCL_OK) { return TCL_ERROR; } diff --git a/generic/tclInt.h b/generic/tclInt.h index 5379396..e8fecf0 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -3041,6 +3041,8 @@ MODULE_SCOPE char * TclGetStringStorage(Tcl_Obj *objPtr, MODULE_SCOPE int TclGetLoadedPackagesEx(Tcl_Interp *interp, const char *targetName, const char *packageName); +MODULE_SCOPE int TclGetWideBitsFromObj(Tcl_Interp *, Tcl_Obj *, + Tcl_WideInt *); MODULE_SCOPE int TclGlob(Tcl_Interp *interp, char *pattern, Tcl_Obj *unquotedPrefix, int globFlags, Tcl_GlobTypeData *types); diff --git a/generic/tclObj.c b/generic/tclObj.c index 16ef7c3..490e80e 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -2833,10 +2833,9 @@ Tcl_GetLongFromObj( mp_int big; UNPACK_BIGNUM(objPtr, big); - if ((size_t) big.used <= (CHAR_BIT * sizeof(long) + DIGIT_BIT - 1) + if ((size_t) big.used <= (CHAR_BIT * sizeof(unsigned long) + DIGIT_BIT - 1) / DIGIT_BIT) { - unsigned long value = 0, numBytes = sizeof(long); - long scratch; + unsigned long scratch, value = 0, numBytes = sizeof(unsigned long); unsigned char *bytes = (unsigned char *) &scratch; if (mp_to_unsigned_bin_n(&big, bytes, &numBytes) == MP_OKAY) { @@ -3107,6 +3106,73 @@ Tcl_GetWideIntFromObj( /* *---------------------------------------------------------------------- * + * TclGetWideBitsFromObj -- + * + * Attempt to return a wide integer from the Tcl object "objPtr". If the + * object is not already a int, double or bignum, an attempt will be made + * to convert it to one of these. Out-of-range values don't result in an + * error, but only the least significant 64 bits will be returned. + * + * Results: + * The return value is a standard Tcl object result. If an error occurs + * during conversion, an error message is left in the interpreter's + * result unless "interp" is NULL. + * + * Side effects: + * If the object is not already an int, double or bignum object, the + * conversion will free any old internal representation. + * + *---------------------------------------------------------------------- + */ + +int +TclGetWideBitsFromObj( + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ + Tcl_Obj *objPtr, /* Object from which to get a wide int. */ + Tcl_WideInt *wideIntPtr) /* Place to store resulting wide integer. */ +{ + do { + if (objPtr->typePtr == &tclIntType) { + *wideIntPtr = objPtr->internalRep.wideValue; + return TCL_OK; + } + if (objPtr->typePtr == &tclDoubleType) { + if (interp != NULL) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "expected integer but got \"%s\"", + TclGetString(objPtr))); + Tcl_SetErrorCode(interp, "TCL", "VALUE", "INTEGER", NULL); + } + return TCL_ERROR; + } + if (objPtr->typePtr == &tclBignumType) { + mp_int big; + + Tcl_WideUInt value = 0, scratch; + unsigned long numBytes = sizeof(Tcl_WideInt); + unsigned char *bytes = (unsigned char *) &scratch; + + Tcl_GetBignumFromObj(NULL, objPtr, &big); + mp_mod_2d(&big, (int) (CHAR_BIT * sizeof(Tcl_WideInt)), &big); + mp_to_unsigned_bin_n(&big, bytes, &numBytes); + while (numBytes-- > 0) { + value = (value << CHAR_BIT) | *bytes++; + } + if (big.sign) { + value = -value; + } + *wideIntPtr = (Tcl_WideInt) value; + mp_clear(&big); + return TCL_OK; + } + } while (TclParseNumber(interp, objPtr, "integer", NULL, -1, NULL, + TCL_PARSE_INTEGER_ONLY)==TCL_OK); + return TCL_ERROR; +} + +/* + *---------------------------------------------------------------------- + * * FreeBignum -- * * This function frees the internal rep of a bignum. diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index f98180f..f238268 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -2097,33 +2097,15 @@ Tcl_AppendFormatToObj( } #ifndef TCL_WIDE_INT_IS_LONG } else if (useWide) { - if (TclGetWideIntFromObj(NULL, segment, &w) != TCL_OK) { - Tcl_Obj *objPtr; - - if (Tcl_GetBignumFromObj(interp,segment,&big) != TCL_OK) { - goto error; - } - mp_mod_2d(&big, (int) CHAR_BIT*sizeof(Tcl_WideInt), &big); - objPtr = Tcl_NewBignumObj(&big); - Tcl_IncrRefCount(objPtr); - TclGetWideIntFromObj(NULL, objPtr, &w); - Tcl_DecrRefCount(objPtr); + if (TclGetWideBitsFromObj(interp, segment, &w) != TCL_OK) { + goto error; } isNegative = (w < (Tcl_WideInt) 0); if (w == (Tcl_WideInt) 0) gotHash = 0; #endif } else if (TclGetLongFromObj(NULL, segment, &l) != TCL_OK) { - if (TclGetWideIntFromObj(NULL, segment, &w) != TCL_OK) { - Tcl_Obj *objPtr; - - if (Tcl_GetBignumFromObj(interp,segment,&big) != TCL_OK) { - goto error; - } - mp_mod_2d(&big, (int) CHAR_BIT * sizeof(long), &big); - objPtr = Tcl_NewBignumObj(&big); - Tcl_IncrRefCount(objPtr); - TclGetLongFromObj(NULL, objPtr, &l); - Tcl_DecrRefCount(objPtr); + if (TclGetWideBitsFromObj(interp, segment, &w) != TCL_OK) { + goto error; } else { l = Tcl_WideAsLong(w); } diff --git a/tests/binary.test b/tests/binary.test index 1ee815b..54e8e94 100644 --- a/tests/binary.test +++ b/tests/binary.test @@ -1647,22 +1647,6 @@ test binary-43.2 {Tcl_BinaryObjCmd: format wide int} {} { binary format W 7810179016327718216 } lcTolleH -test binary-44.1 {Tcl_BinaryObjCmd: scan wide int} {} { - binary scan HelloTcl W x - set x -} 5216694956358656876 -test binary-44.2 {Tcl_BinaryObjCmd: scan wide int} {} { - binary scan lcTolleH w x - set x -} 5216694956358656876 -test binary-44.3 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} { - binary scan [binary format w [expr {wide(3) << 31}]] w x - set x -} 6442450944 -test binary-44.4 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} { - binary scan [binary format W [expr {wide(3) << 31}]] W x - set x -} 6442450944 test binary-43.5 {Tcl_BinaryObjCmd: scan wide int} {} { unset -nocomplain arg1 list [binary scan \x80[string repeat \x00 7] W arg1] $arg1 @@ -1684,6 +1668,31 @@ test binary-43.9 {Tcl_BinaryObjCmd: scan unsigned wide int} {} { list [binary scan [string repeat \x00 7]\x80[string repeat \x00 7]\x80 wuw arg1 arg2] $arg1 $arg2 } {2 9223372036854775808 -9223372036854775808} +test binary-44.1 {Tcl_BinaryObjCmd: scan wide int} {} { + binary scan HelloTcl W x + set x +} 5216694956358656876 +test binary-44.2 {Tcl_BinaryObjCmd: scan wide int} {} { + binary scan lcTolleH w x + set x +} 5216694956358656876 +test binary-44.3 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} { + binary scan [binary format w [expr {wide(3) << 31}]] w x + set x +} 6442450944 +test binary-44.4 {Tcl_BinaryObjCmd: scan wide int with bit 31 set} {} { + binary scan [binary format W [expr {wide(3) << 31}]] W x + set x +} 6442450944 +test binary-44.5 {Tcl_BinaryObjCmd: scan wide int with bit 31 and 64 set} {} { + binary scan [binary format w [expr {(wide(3) << 31) + (wide(3) << 64)}]] w x + set x +} 6442450944 +test binary-44.6 {Tcl_BinaryObjCmd: scan wide int with bit 31 and 64 set} {} { + binary scan [binary format W [expr {(wide(3) << 31) + (wide(3) << 64)}]] W x + set x +} 6442450944 + test binary-45.1 {Tcl_BinaryObjCmd: combined wide int handling} { binary scan [binary format sws 16450 -1 19521] c* x set x -- cgit v0.12 From 5c9968a001208bb4fc6d06ad040c28bd84b7831f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 5 Sep 2018 12:11:13 +0000 Subject: Minor code cleanup. win/tclWinPipe.c: Eliminate some compiler warnings on mingw-w64 win/tclWinNotify.c: Eliminate tsdPtr->timeout variable, since it's only being written to. other files: code cleanup, eliminate unnecessary type casts --- generic/tclBasic.c | 8 +++----- generic/tclObj.c | 2 +- win/tclWinNotify.c | 4 +--- win/tclWinPipe.c | 14 +++++++------- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 0190c13..71a1442 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -7700,13 +7700,11 @@ ExprWideFunc( Tcl_Obj *const *objv) /* Actual parameter vector. */ { Tcl_WideInt wResult; - Tcl_Obj *objPtr; if (ExprEntierFunc(NULL, interp, objc, objv) != TCL_OK) { return TCL_ERROR; } - objPtr = Tcl_GetObjResult(interp); - TclGetWideBitsFromObj(NULL, objPtr, &wResult); + TclGetWideBitsFromObj(NULL, Tcl_GetObjResult(interp), &wResult); Tcl_SetObjResult(interp, Tcl_NewWideIntObj(wResult)); return TCL_OK; } @@ -7809,7 +7807,7 @@ ExprRandFunc( * Make sure 1 <= randSeed <= (2^31) - 2. See below. */ - iPtr->randSeed &= (unsigned long) 0x7fffffff; + iPtr->randSeed &= 0x7fffffff; if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { iPtr->randSeed ^= 123459876; } @@ -7974,7 +7972,7 @@ ExprSrandFunc( */ iPtr->flags |= RAND_SEED_INITIALIZED; - iPtr->randSeed = (unsigned long) (w & 0x7fffffff); + iPtr->randSeed = (long) w & 0x7fffffff; if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { iPtr->randSeed ^= 123459876; } diff --git a/generic/tclObj.c b/generic/tclObj.c index 490e80e..ce326fe 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -3111,7 +3111,7 @@ Tcl_GetWideIntFromObj( * Attempt to return a wide integer from the Tcl object "objPtr". If the * object is not already a int, double or bignum, an attempt will be made * to convert it to one of these. Out-of-range values don't result in an - * error, but only the least significant 64 bits will be returned. + * error, but only the least significant 64 bits will be returned. * * Results: * The return value is a standard Tcl object result. If an error occurs diff --git a/win/tclWinNotify.c b/win/tclWinNotify.c index 28c8445..b34fc4f 100644 --- a/win/tclWinNotify.c +++ b/win/tclWinNotify.c @@ -36,7 +36,6 @@ typedef struct { int pending; /* Alert message pending, this field is locked * by the notifierMutex. */ HWND hwnd; /* Messaging window. */ - int timeout; /* Current timeout value. */ int timerActive; /* 1 if interval timer is running. */ } ThreadSpecificData; @@ -309,11 +308,10 @@ Tcl_SetTimer( timeout = 1; } } - tsdPtr->timeout = timeout; if (timeout != 0) { tsdPtr->timerActive = 1; SetTimer(tsdPtr->hwnd, INTERVAL_TIMER, - (unsigned long) tsdPtr->timeout, NULL); + timeout, NULL); } else { tsdPtr->timerActive = 0; KillTimer(tsdPtr->hwnd, INTERVAL_TIMER); diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c index cf0b80f..bd95ea4 100644 --- a/win/tclWinPipe.c +++ b/win/tclWinPipe.c @@ -869,7 +869,7 @@ TclpGetPid( Tcl_MutexLock(&pipeMutex); for (infoPtr = procList; infoPtr != NULL; infoPtr = infoPtr->nextPtr) { - if (infoPtr->dwProcessId == (DWORD) pid) { + if (infoPtr->dwProcessId == (DWORD) (size_t) pid) { Tcl_MutexUnlock(&pipeMutex); return infoPtr->dwProcessId; } @@ -1163,7 +1163,7 @@ TclpCreateProcess( WaitForInputIdle(procInfo.hProcess, 5000); CloseHandle(procInfo.hThread); - *pidPtr = (Tcl_Pid) procInfo.dwProcessId; + *pidPtr = (Tcl_Pid) (size_t) procInfo.dwProcessId; if (*pidPtr != 0) { TclWinAddProcess(procInfo.hProcess, procInfo.dwProcessId); } @@ -1478,10 +1478,10 @@ QuoteCmdLinePart( QuoteCmdLineBackslash(dsPtr, start, *bspos, NULL); start = *bspos; } - /* - * escape all special chars enclosed in quotes like `"..."`, note that here we + /* + * escape all special chars enclosed in quotes like `"..."`, note that here we * don't must escape `\` (with `\`), because it's outside of the main quotes, - * so `\` remains `\`, but important - not at end of part, because results as + * so `\` remains `\`, but important - not at end of part, because results as * before the quote, so `%\%\` should be escaped as `"%\%"\\`). */ TclDStringAppendLiteral(dsPtr, "\""); /* opening escape quote-char */ @@ -1636,7 +1636,7 @@ BuildCommandLine( special++; } /* rest of argument (and escape backslashes before closing main quote) */ - QuoteCmdLineBackslash(&ds, start, special, + QuoteCmdLineBackslash(&ds, start, special, (quote & CL_QUOTE) ? bspos : NULL); } if (quote & CL_QUOTE) { @@ -2476,7 +2476,7 @@ Tcl_WaitPid( prevPtrPtr = &procList; for (infoPtr = procList; infoPtr != NULL; prevPtrPtr = &infoPtr->nextPtr, infoPtr = infoPtr->nextPtr) { - if (infoPtr->dwProcessId == (DWORD) pid) { + if (infoPtr->dwProcessId == (DWORD) (size_t) pid) { *prevPtrPtr = infoPtr->nextPtr; break; } -- cgit v0.12 From b9577c0641072a7e7060bad5357e549b75928132 Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 7 Sep 2018 10:45:30 +0000 Subject: closes [631b4c45df]: segfault by usage of wrong length (no string representation) --- generic/tclProc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/generic/tclProc.c b/generic/tclProc.c index dc58cb0..e51f5b3 100644 --- a/generic/tclProc.c +++ b/generic/tclProc.c @@ -504,10 +504,11 @@ TclCreateProc( goto procError; } - nameLength = Tcl_NumUtfChars(Tcl_GetString(fieldValues[0]), fieldValues[0]->length); + argname = Tcl_GetStringFromObj(fieldValues[0], &plen); + nameLength = Tcl_NumUtfChars(argname, plen); if (fieldCount == 2) { - valueLength = Tcl_NumUtfChars(Tcl_GetString(fieldValues[1]), - fieldValues[1]->length); + const char * value = TclGetString(fieldValues[1]); + valueLength = Tcl_NumUtfChars(value, fieldValues[1]->length); } else { valueLength = 0; } @@ -516,7 +517,6 @@ TclCreateProc( * Check that the formal parameter name is a scalar. */ - argname = Tcl_GetStringFromObj(fieldValues[0], &plen); argnamei = argname; argnamelast = argname[plen-1]; while (plen--) { -- cgit v0.12 From e80eaec4d3430e0db5f54dde5059821f35e77637 Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 7 Sep 2018 11:55:01 +0000 Subject: amend to [e8ab4d85fa], proc.test: extended with new test-case to cover situation like [631b4c45df] --- tests/proc.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/proc.test b/tests/proc.test index e06720e..f70fcbd 100644 --- a/tests/proc.test +++ b/tests/proc.test @@ -110,6 +110,14 @@ test proc-1.8 {Tcl_ProcObjCmd, check that formal parameter names are simple name proc p {b:a b::a} { } } -returnCodes error -result {formal parameter "b::a" is not a simple name} +test proc-1.9 {Tcl_ProcObjCmd, arguments via canonical list (string-representation bug [631b4c45df])} -body { + set v 2 + binary scan AB cc a b + proc p [list [list a $a] [list b $b] [list v [expr {$v + 2}]]] {expr {$a + $b + $v}} + p +} -result [expr {65+66+4}] -cleanup { + rename p {} +} test proc-2.1 {TclFindProc, simple proc name and proc not in namespace} -setup { catch {namespace delete {*}[namespace children :: test_ns_*]} -- cgit v0.12 From 95db69f27b003d548813280a19d1b290332bf2ef Mon Sep 17 00:00:00 2001 From: dgp Date: Fri, 7 Sep 2018 12:04:32 +0000 Subject: Added test for [631b4c45df]. --- tests/proc.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/proc.test b/tests/proc.test index f70fcbd..8b25b0a 100644 --- a/tests/proc.test +++ b/tests/proc.test @@ -391,6 +391,14 @@ test proc-7.4 {Proc struct outlives its interp: Bug 3532959} { interp delete slave unset lambda } {} + +test proc-7.5 {[631b4c45df] Crash in argument processing} { + binary scan A c val + proc foo [list [list from $val]] {} + rename foo {} + unset -nocomplain val +} {} + # cleanup catch {rename p ""} -- cgit v0.12