summaryrefslogtreecommitdiffstats
path: root/library
diff options
context:
space:
mode:
Diffstat (limited to 'library')
-rw-r--r--library/auto.tcl225
-rw-r--r--library/clock.tcl3592
-rw-r--r--library/cookiejar/cookiejar.tcl746
-rw-r--r--library/cookiejar/idna.tcl292
-rw-r--r--library/cookiejar/pkgIndex.tcl3
-rw-r--r--library/cookiejar/public_suffix_list.dat.gzbin0 -> 70835 bytes
-rw-r--r--library/dde/pkgIndex.tcl10
-rw-r--r--library/encoding/ascii.enc2
-rw-r--r--library/encoding/big5.enc4
-rw-r--r--library/encoding/cp1250.enc4
-rw-r--r--library/encoding/cp1251.enc2
-rw-r--r--library/encoding/cp1252.enc4
-rw-r--r--library/encoding/cp1253.enc4
-rw-r--r--library/encoding/cp1254.enc4
-rw-r--r--library/encoding/cp1255.enc4
-rw-r--r--library/encoding/cp1257.enc4
-rw-r--r--library/encoding/cp1258.enc4
-rw-r--r--library/encoding/cp864.enc2
-rw-r--r--library/encoding/cp869.enc4
-rw-r--r--library/encoding/cp874.enc4
-rw-r--r--library/encoding/cp932.enc2
-rw-r--r--library/encoding/cp949.enc2
-rw-r--r--library/encoding/cp950.enc4
-rw-r--r--library/encoding/dingbats.enc4
-rw-r--r--library/encoding/ebcdic.enc1
-rw-r--r--library/encoding/euc-cn.enc4
-rw-r--r--library/encoding/euc-jp.enc4
-rw-r--r--library/encoding/euc-kr.enc4
-rw-r--r--library/encoding/gb1988.enc4
-rw-r--r--library/encoding/jis0201.enc4
-rw-r--r--library/encoding/koi8-ru.enc20
-rw-r--r--library/encoding/koi8-t.enc20
-rw-r--r--library/encoding/koi8-u.enc2
-rw-r--r--library/encoding/macDingbats.enc4
-rw-r--r--library/encoding/macJapan.enc2
-rw-r--r--library/encoding/shiftjis.enc2
-rw-r--r--library/encoding/symbol.enc4
-rw-r--r--library/encoding/tis-620.enc2
-rw-r--r--library/foreachline.tcl25
-rw-r--r--library/history.tcl332
-rw-r--r--library/http/http.tcl4942
-rw-r--r--library/http/pkgIndex.tcl6
-rw-r--r--library/http1.0/http.tcl377
-rw-r--r--library/http1.0/pkgIndex.tcl11
-rw-r--r--library/icu.tcl145
-rw-r--r--library/init.tcl341
-rw-r--r--library/install.tcl247
-rw-r--r--library/manifest.txt19
-rw-r--r--library/msgcat/msgcat.tcl940
-rw-r--r--library/msgcat/pkgIndex.tcl4
-rw-r--r--library/msgs/ar.msg84
-rw-r--r--library/msgs/ar_jo.msg62
-rw-r--r--library/msgs/ar_lb.msg62
-rw-r--r--library/msgs/ar_sy.msg62
-rw-r--r--library/msgs/be.msg80
-rw-r--r--library/msgs/bg.msg56
-rw-r--r--library/msgs/bn.msg80
-rw-r--r--library/msgs/ca.msg4
-rw-r--r--library/msgs/cs.msg34
-rw-r--r--library/msgs/da.msg8
-rw-r--r--library/msgs/de.msg2
-rw-r--r--library/msgs/de_at.msg8
-rw-r--r--library/msgs/de_be.msg4
-rw-r--r--library/msgs/el.msg80
-rw-r--r--library/msgs/eo.msg10
-rw-r--r--library/msgs/es.msg8
-rw-r--r--library/msgs/et.msg16
-rw-r--r--library/msgs/fa.msg76
-rw-r--r--library/msgs/fa_in.msg80
-rw-r--r--library/msgs/fa_ir.msg8
-rw-r--r--library/msgs/fi.msg8
-rw-r--r--library/msgs/fo.msg18
-rw-r--r--library/msgs/fr.msg12
-rw-r--r--library/msgs/ga.msg50
-rw-r--r--library/msgs/gl.msg12
-rw-r--r--library/msgs/he.msg80
-rw-r--r--library/msgs/hi.msg64
-rw-r--r--library/msgs/hr.msg12
-rw-r--r--library/msgs/hu.msg34
-rw-r--r--library/msgs/is.msg44
-rw-r--r--library/msgs/it.msg10
-rw-r--r--library/msgs/ja.msg68
-rw-r--r--library/msgs/ko.msg86
-rw-r--r--library/msgs/ko_kr.msg4
-rw-r--r--library/msgs/kok.msg66
-rw-r--r--library/msgs/lt.msg20
-rw-r--r--library/msgs/lv.msg22
-rw-r--r--library/msgs/mk.msg80
-rw-r--r--library/msgs/mr.msg62
-rw-r--r--library/msgs/mt.msg8
-rw-r--r--library/msgs/nb.msg8
-rw-r--r--library/msgs/nn.msg4
-rw-r--r--library/msgs/pl.msg22
-rw-r--r--library/msgs/pt.msg8
-rw-r--r--library/msgs/ro.msg8
-rw-r--r--library/msgs/ru.msg80
-rw-r--r--library/msgs/sh.msg4
-rw-r--r--library/msgs/sk.msg26
-rw-r--r--library/msgs/sl.msg6
-rw-r--r--library/msgs/sq.msg16
-rw-r--r--library/msgs/sr.msg80
-rw-r--r--library/msgs/sv.msg12
-rw-r--r--library/msgs/ta.msg66
-rw-r--r--library/msgs/te.msg76
-rw-r--r--library/msgs/te_in.msg4
-rw-r--r--library/msgs/th.msg84
-rw-r--r--library/msgs/tr.msg24
-rw-r--r--library/msgs/uk.msg80
-rw-r--r--library/msgs/vi.msg38
-rw-r--r--library/msgs/zh.msg92
-rw-r--r--library/msgs/zh_cn.msg2
-rw-r--r--library/msgs/zh_hk.msg42
-rw-r--r--library/msgs/zh_sg.msg4
-rw-r--r--library/msgs/zh_tw.msg4
-rw-r--r--library/opt/optparse.tcl522
-rw-r--r--library/opt/pkgIndex.tcl2
-rw-r--r--library/package.tcl330
-rw-r--r--library/parray.tcl4
-rw-r--r--library/platform/pkgIndex.tcl4
-rw-r--r--library/platform/platform.tcl15
-rw-r--r--library/platform/shell.tcl58
-rw-r--r--library/readfile.tcl23
-rw-r--r--library/reg/pkgIndex.tcl9
-rw-r--r--library/registry/pkgIndex.tcl4
-rw-r--r--library/safe.tcl972
-rw-r--r--library/tclIndex186
-rw-r--r--library/tcltest/pkgIndex.tcl2
-rw-r--r--library/tcltest/tcltest.tcl303
-rw-r--r--library/tm.tcl63
-rw-r--r--library/tzdata/Africa/Bissau2
-rw-r--r--library/tzdata/Africa/Cairo154
-rw-r--r--library/tzdata/Africa/Casablanca394
-rw-r--r--library/tzdata/Africa/El_Aaiun372
-rw-r--r--library/tzdata/Africa/Maputo4
-rw-r--r--library/tzdata/America/Araguaina110
-rw-r--r--library/tzdata/America/Argentina/Buenos_Aires122
-rw-r--r--library/tzdata/America/Argentina/Catamarca124
-rw-r--r--library/tzdata/America/Argentina/Cordoba122
-rw-r--r--library/tzdata/America/Argentina/Jujuy122
-rw-r--r--library/tzdata/America/Argentina/La_Rioja126
-rw-r--r--library/tzdata/America/Argentina/Mendoza124
-rw-r--r--library/tzdata/America/Argentina/Rio_Gallegos124
-rw-r--r--library/tzdata/America/Argentina/Salta120
-rw-r--r--library/tzdata/America/Argentina/San_Juan126
-rw-r--r--library/tzdata/America/Argentina/San_Luis124
-rw-r--r--library/tzdata/America/Argentina/Tucuman126
-rw-r--r--library/tzdata/America/Argentina/Ushuaia124
-rw-r--r--library/tzdata/America/Asuncion357
-rw-r--r--library/tzdata/America/Bahia126
-rw-r--r--library/tzdata/America/Bahia_Banderas161
-rw-r--r--library/tzdata/America/Belem60
-rw-r--r--library/tzdata/America/Boa_Vista70
-rw-r--r--library/tzdata/America/Bogota6
-rw-r--r--library/tzdata/America/Cambridge_Bay18
-rw-r--r--library/tzdata/America/Campo_Grande182
-rw-r--r--library/tzdata/America/Cancun11
-rw-r--r--library/tzdata/America/Caracas8
-rw-r--r--library/tzdata/America/Cayenne4
-rw-r--r--library/tzdata/America/Chihuahua160
-rw-r--r--library/tzdata/America/Ciudad_Juarez223
-rw-r--r--library/tzdata/America/Coyhaique139
-rw-r--r--library/tzdata/America/Cuiaba182
-rw-r--r--library/tzdata/America/Danmarkshavn66
-rw-r--r--library/tzdata/America/Dawson2
-rw-r--r--library/tzdata/America/Eirunepe72
-rw-r--r--library/tzdata/America/Fortaleza86
-rw-r--r--library/tzdata/America/Guayaquil6
-rw-r--r--library/tzdata/America/Guyana8
-rw-r--r--library/tzdata/America/Hermosillo7
-rw-r--r--library/tzdata/America/Inuvik18
-rw-r--r--library/tzdata/America/Iqaluit18
-rw-r--r--library/tzdata/America/La_Paz2
-rw-r--r--library/tzdata/America/Lima20
-rw-r--r--library/tzdata/America/Maceio94
-rw-r--r--library/tzdata/America/Manaus68
-rw-r--r--library/tzdata/America/Mazatlan161
-rw-r--r--library/tzdata/America/Merida158
-rw-r--r--library/tzdata/America/Mexico_City158
-rw-r--r--library/tzdata/America/Miquelon458
-rw-r--r--library/tzdata/America/Monterrey161
-rw-r--r--library/tzdata/America/Montevideo180
-rw-r--r--library/tzdata/America/Nipigon265
-rw-r--r--library/tzdata/America/Noronha86
-rw-r--r--library/tzdata/America/Nuuk482
-rw-r--r--library/tzdata/America/Ojinaga315
-rw-r--r--library/tzdata/America/Pangnirtung253
-rw-r--r--library/tzdata/America/Paramaribo4
-rw-r--r--library/tzdata/America/Porto_Velho60
-rw-r--r--library/tzdata/America/Punta_Arenas230
-rw-r--r--library/tzdata/America/Rainy_River265
-rw-r--r--library/tzdata/America/Rankin_Inlet18
-rw-r--r--library/tzdata/America/Recife86
-rw-r--r--library/tzdata/America/Resolute18
-rw-r--r--library/tzdata/America/Rio_Branco64
-rw-r--r--library/tzdata/America/Santarem62
-rw-r--r--library/tzdata/America/Santiago562
-rw-r--r--library/tzdata/America/Sao_Paulo184
-rw-r--r--library/tzdata/America/Scoresbysund482
-rw-r--r--library/tzdata/America/Thunder_Bay273
-rw-r--r--library/tzdata/America/Tijuana10
-rw-r--r--library/tzdata/America/Toronto12
-rw-r--r--library/tzdata/America/Whitehorse2
-rw-r--r--library/tzdata/America/Yellowknife253
-rw-r--r--library/tzdata/Antarctica/Casey29
-rw-r--r--library/tzdata/Antarctica/Davis12
-rw-r--r--library/tzdata/Antarctica/Mawson4
-rw-r--r--library/tzdata/Antarctica/Palmer164
-rw-r--r--library/tzdata/Antarctica/Rothera2
-rw-r--r--library/tzdata/Antarctica/Vostok10
-rw-r--r--library/tzdata/Asia/Almaty105
-rw-r--r--library/tzdata/Asia/Amman2
-rw-r--r--library/tzdata/Asia/Anadyr134
-rw-r--r--library/tzdata/Asia/Aqtau106
-rw-r--r--library/tzdata/Asia/Aqtobe106
-rw-r--r--library/tzdata/Asia/Ashgabat52
-rw-r--r--library/tzdata/Asia/Atyrau106
-rw-r--r--library/tzdata/Asia/Baghdad106
-rw-r--r--library/tzdata/Asia/Baku138
-rw-r--r--library/tzdata/Asia/Bangkok2
-rw-r--r--library/tzdata/Asia/Barnaul136
-rw-r--r--library/tzdata/Asia/Bishkek106
-rw-r--r--library/tzdata/Asia/Chita134
-rw-r--r--library/tzdata/Asia/Choibalsan57
-rw-r--r--library/tzdata/Asia/Colombo4
-rw-r--r--library/tzdata/Asia/Damascus2
-rw-r--r--library/tzdata/Asia/Dhaka8
-rw-r--r--library/tzdata/Asia/Dili8
-rw-r--r--library/tzdata/Asia/Dubai2
-rw-r--r--library/tzdata/Asia/Dushanbe48
-rw-r--r--library/tzdata/Asia/Famagusta2
-rw-r--r--library/tzdata/Asia/Gaza90
-rw-r--r--library/tzdata/Asia/Hebron90
-rw-r--r--library/tzdata/Asia/Ho_Chi_Minh16
-rw-r--r--library/tzdata/Asia/Hovd100
-rw-r--r--library/tzdata/Asia/Irkutsk132
-rw-r--r--library/tzdata/Asia/Jakarta4
-rw-r--r--library/tzdata/Asia/Jayapura2
-rw-r--r--library/tzdata/Asia/Kabul2
-rw-r--r--library/tzdata/Asia/Kamchatka132
-rw-r--r--library/tzdata/Asia/Karachi2
-rw-r--r--library/tzdata/Asia/Khandyga136
-rw-r--r--library/tzdata/Asia/Krasnoyarsk132
-rw-r--r--library/tzdata/Asia/Kuching34
-rw-r--r--library/tzdata/Asia/Macau10
-rw-r--r--library/tzdata/Asia/Magadan134
-rw-r--r--library/tzdata/Asia/Makassar4
-rw-r--r--library/tzdata/Asia/Manila22
-rw-r--r--library/tzdata/Asia/Novokuznetsk132
-rw-r--r--library/tzdata/Asia/Novosibirsk136
-rw-r--r--library/tzdata/Asia/Omsk132
-rw-r--r--library/tzdata/Asia/Oral106
-rw-r--r--library/tzdata/Asia/Pontianak4
-rw-r--r--library/tzdata/Asia/Qatar4
-rw-r--r--library/tzdata/Asia/Qostanay107
-rw-r--r--library/tzdata/Asia/Qyzylorda106
-rw-r--r--library/tzdata/Asia/Riyadh2
-rw-r--r--library/tzdata/Asia/Sakhalin136
-rw-r--r--library/tzdata/Asia/Samarkand52
-rw-r--r--library/tzdata/Asia/Singapore6
-rw-r--r--library/tzdata/Asia/Srednekolymsk132
-rw-r--r--library/tzdata/Asia/Tashkent52
-rw-r--r--library/tzdata/Asia/Tbilisi108
-rw-r--r--library/tzdata/Asia/Tehran74
-rw-r--r--library/tzdata/Asia/Thimphu2
-rw-r--r--library/tzdata/Asia/Tomsk136
-rw-r--r--library/tzdata/Asia/Ulaanbaatar100
-rw-r--r--library/tzdata/Asia/Urumqi2
-rw-r--r--library/tzdata/Asia/Ust-Nera132
-rw-r--r--library/tzdata/Asia/Vladivostok132
-rw-r--r--library/tzdata/Asia/Yakutsk132
-rw-r--r--library/tzdata/Asia/Yangon2
-rw-r--r--library/tzdata/Asia/Yekaterinburg132
-rw-r--r--library/tzdata/Asia/Yerevan130
-rw-r--r--library/tzdata/Atlantic/Azores681
-rw-r--r--library/tzdata/Atlantic/Canary2
-rw-r--r--library/tzdata/Atlantic/Cape_Verde8
-rw-r--r--library/tzdata/Atlantic/Madeira226
-rw-r--r--library/tzdata/Atlantic/South_Georgia2
-rw-r--r--library/tzdata/Atlantic/Stanley138
-rw-r--r--library/tzdata/Australia/Eucla20
-rw-r--r--library/tzdata/Australia/Lord_Howe238
-rw-r--r--library/tzdata/CET266
-rw-r--r--library/tzdata/CST6CDT279
-rw-r--r--library/tzdata/EET252
-rw-r--r--library/tzdata/EST6
-rw-r--r--library/tzdata/EST5EDT279
-rw-r--r--library/tzdata/Etc/GMT+12
-rw-r--r--library/tzdata/Etc/GMT+102
-rw-r--r--library/tzdata/Etc/GMT+112
-rw-r--r--library/tzdata/Etc/GMT+122
-rw-r--r--library/tzdata/Etc/GMT+22
-rw-r--r--library/tzdata/Etc/GMT+32
-rw-r--r--library/tzdata/Etc/GMT+42
-rw-r--r--library/tzdata/Etc/GMT+52
-rw-r--r--library/tzdata/Etc/GMT+62
-rw-r--r--library/tzdata/Etc/GMT+72
-rw-r--r--library/tzdata/Etc/GMT+82
-rw-r--r--library/tzdata/Etc/GMT+92
-rw-r--r--library/tzdata/Etc/GMT-12
-rw-r--r--library/tzdata/Etc/GMT-102
-rw-r--r--library/tzdata/Etc/GMT-112
-rw-r--r--library/tzdata/Etc/GMT-122
-rw-r--r--library/tzdata/Etc/GMT-132
-rw-r--r--library/tzdata/Etc/GMT-142
-rw-r--r--library/tzdata/Etc/GMT-22
-rw-r--r--library/tzdata/Etc/GMT-32
-rw-r--r--library/tzdata/Etc/GMT-42
-rw-r--r--library/tzdata/Etc/GMT-52
-rw-r--r--library/tzdata/Etc/GMT-62
-rw-r--r--library/tzdata/Etc/GMT-72
-rw-r--r--library/tzdata/Etc/GMT-82
-rw-r--r--library/tzdata/Etc/GMT-92
-rw-r--r--library/tzdata/Europe/Astrakhan132
-rw-r--r--library/tzdata/Europe/Istanbul10
-rw-r--r--library/tzdata/Europe/Kaliningrad2
-rw-r--r--library/tzdata/Europe/Kirov130
-rw-r--r--library/tzdata/Europe/Lisbon47
-rw-r--r--library/tzdata/Europe/Minsk2
-rw-r--r--library/tzdata/Europe/Samara136
-rw-r--r--library/tzdata/Europe/Saratov132
-rw-r--r--library/tzdata/Europe/Ulyanovsk136
-rw-r--r--library/tzdata/Europe/Volgograd136
-rw-r--r--library/tzdata/HST6
-rw-r--r--library/tzdata/Indian/Chagos4
-rw-r--r--library/tzdata/Indian/Maldives2
-rw-r--r--library/tzdata/Indian/Mauritius10
-rw-r--r--library/tzdata/MET266
-rw-r--r--library/tzdata/MST6
-rw-r--r--library/tzdata/MST7MDT279
-rw-r--r--library/tzdata/PST8PDT279
-rw-r--r--library/tzdata/Pacific/Apia50
-rw-r--r--library/tzdata/Pacific/Bougainville8
-rw-r--r--library/tzdata/Pacific/Chatham252
-rw-r--r--library/tzdata/Pacific/Easter524
-rw-r--r--library/tzdata/Pacific/Efate46
-rw-r--r--library/tzdata/Pacific/Fakaofo4
-rw-r--r--library/tzdata/Pacific/Fiji213
-rw-r--r--library/tzdata/Pacific/Galapagos8
-rw-r--r--library/tzdata/Pacific/Gambier2
-rw-r--r--library/tzdata/Pacific/Guadalcanal2
-rw-r--r--library/tzdata/Pacific/Guam2
-rw-r--r--library/tzdata/Pacific/Kanton6
-rw-r--r--library/tzdata/Pacific/Kiritimati6
-rw-r--r--library/tzdata/Pacific/Kosrae16
-rw-r--r--library/tzdata/Pacific/Kwajalein12
-rw-r--r--library/tzdata/Pacific/Marquesas2
-rw-r--r--library/tzdata/Pacific/Nauru4
-rw-r--r--library/tzdata/Pacific/Niue4
-rw-r--r--library/tzdata/Pacific/Norfolk326
-rw-r--r--library/tzdata/Pacific/Noumea14
-rw-r--r--library/tzdata/Pacific/Palau2
-rw-r--r--library/tzdata/Pacific/Pitcairn4
-rw-r--r--library/tzdata/Pacific/Port_Moresby2
-rw-r--r--library/tzdata/Pacific/Rarotonga54
-rw-r--r--library/tzdata/Pacific/Tahiti2
-rw-r--r--library/tzdata/Pacific/Tarawa2
-rw-r--r--library/tzdata/Pacific/Tongatapu20
-rw-r--r--library/tzdata/SystemV/AST45
-rw-r--r--library/tzdata/SystemV/AST4ADT5
-rw-r--r--library/tzdata/SystemV/CST65
-rw-r--r--library/tzdata/SystemV/CST6CDT5
-rw-r--r--library/tzdata/SystemV/EST55
-rw-r--r--library/tzdata/SystemV/EST5EDT5
-rw-r--r--library/tzdata/SystemV/HST105
-rw-r--r--library/tzdata/SystemV/MST75
-rw-r--r--library/tzdata/SystemV/MST7MDT5
-rw-r--r--library/tzdata/SystemV/PST85
-rw-r--r--library/tzdata/SystemV/PST8PDT5
-rw-r--r--library/tzdata/SystemV/YST95
-rw-r--r--library/tzdata/SystemV/YST9YDT5
-rw-r--r--library/tzdata/WET252
-rw-r--r--library/word.tcl47
-rw-r--r--library/writefile.tcl37
373 files changed, 18992 insertions, 19195 deletions
diff --git a/library/auto.tcl b/library/auto.tcl
index 9b6dbf1..cc779cf 100644
--- a/library/auto.tcl
+++ b/library/auto.tcl
@@ -3,8 +3,8 @@
# utility procs formerly in init.tcl dealing with auto execution of commands
# and can be auto loaded themselves.
#
-# Copyright (c) 1991-1993 The Regents of the University of California.
-# Copyright (c) 1994-1998 Sun Microsystems, Inc.
+# Copyright © 1991-1993 The Regents of the University of California.
+# Copyright © 1994-1998 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
@@ -45,7 +45,7 @@ proc auto_reset {} {
# initialization script and set a global library variable.
#
# Arguments:
-# basename Prefix of the directory name, (e.g., "tk")
+# basename Prefix of the directory name, (e.g., "tk")
# version Version number of the package, (e.g., "8.0")
# patch Patchlevel of the package, (e.g., "8.0.3")
# initScript Initialization script to source (e.g., tk.tcl)
@@ -74,13 +74,72 @@ proc tcl_findLibrary {basename version patch initScript enVarName varName} {
lappend dirs $env($enVarName)
}
+ catch {
+ set found 0
+ set root [zipfs root]
+ set mountpoint [file join $root lib $basename]
+ lappend dirs [file join $root app ${basename}_library]
+ lappend dirs [file join $root lib ${basename} ${basename}_library]
+ lappend dirs [file join $root lib ${basename}]
+ if {![zipfs exists [file join $root app ${basename}_library]] \
+ && ![zipfs exists $mountpoint]} {
+ set found 0
+ foreach pkgdat [info loaded] {
+ lassign $pkgdat dllfile dllpkg
+ if {$dllpkg ne $basename} continue
+ if {$dllfile eq {}} {
+ # Loaded statically
+ break
+ }
+ set found 1
+ zipfs mount $dllfile $mountpoint
+ break
+ }
+ if {!$found} {
+ set paths {}
+ if {![catch {::${basename}::pkgconfig get libdir,runtime} dir]} {
+ lappend paths $dir
+ } else {
+ catch {lappend paths [::tcl::pkgconfig get libdir,runtime]}
+ }
+ if {![catch {::${basename}::pkgconfig get bindir,runtime} dir]} {
+ lappend paths $dir
+ } else {
+ catch {lappend paths [::tcl::pkgconfig get bindir,runtime]}
+ }
+ if {[catch {::${basename}::pkgconfig get dllfile,runtime} dllfile]} {
+ set dllfile "libtcl9${basename}${version}[info sharedlibextension]"
+ }
+ set dir [file dirname [file join [pwd] [info nameofexecutable]]]
+ lappend paths $dir
+ lappend paths [file join [file dirname $dir] lib]
+ foreach path $paths {
+ set archive [file join $path $dllfile]
+ if {![file exists $archive]} {
+ continue
+ }
+ zipfs mount $archive $mountpoint
+ if {[zipfs exists [file join $mountpoint ${basename}_library $initScript]]} {
+ lappend dirs [file join $mountpoint ${basename}_library]
+ set found 1
+ break
+ } elseif {[zipfs exists [file join $mountpoint $initScript]]} {
+ lappend dirs [file join $mountpoint $initScript]
+ set found 1
+ break
+ } else {
+ catch {zipfs unmount $mountpoint}
+ }
+ }
+ }
+ }
+ }
+
# 2. In the package script directory registered within the
# configuration of the package itself.
- if {[catch {
- ::${basename}::pkgconfig get scriptdir,runtime
- } value] == 0} {
- lappend dirs $value
+ catch {
+ lappend dirs [::${basename}::pkgconfig get scriptdir,runtime]
}
# 3. Relative to auto_path directories. This checks relative to the
@@ -121,14 +180,12 @@ proc tcl_findLibrary {basename version patch initScript enVarName varName} {
$basename$patch library]
}
}
- # uniquify $dirs in order
+ # make $dirs unique, preserving order
array set seen {}
foreach i $dirs {
- # Take note that the [file normalize] below has been noted to
- # cause difficulties for the freewrap utility. See Bug 1072136.
- # Until freewrap resolves the matter, one might work around the
- # problem by disabling that branch.
+ # Make sure $i is unique under normalization. Avoid repeated [source].
if {[interp issafe]} {
+ # Safe interps have no [file normalize].
set norm $i
} else {
set norm [file normalize $i]
@@ -138,23 +195,18 @@ proc tcl_findLibrary {basename version patch initScript enVarName varName} {
}
set seen($norm) {}
- lappend uniqdirs $i
- }
- set dirs $uniqdirs
- foreach i $dirs {
set the_library $i
set file [file join $i $initScript]
- # source everything when in a safe interpreter because
- # we have a source command, but no file exists command
+ # source everything when in a safe interpreter because we have a
+ # source command, but no file exists command
if {[interp issafe] || [file exists $file]} {
if {![catch {uplevel #0 [list source $file]} msg opts]} {
return
- } else {
- append errors "$file: $msg\n"
- append errors [dict get $opts -errorinfo]\n
}
+ append errors "$file: $msg\n"
+ append errors [dict get $opts -errorinfo]\n
}
}
unset -nocomplain the_library
@@ -199,7 +251,6 @@ proc auto_mkindex {dir args} {
set oldDir [pwd]
cd $dir
- set dir [pwd]
append index "# Tcl autoload index file, version 2.0\n"
append index "# This file is generated by the \"auto_mkindex\" command\n"
@@ -214,9 +265,9 @@ proc auto_mkindex {dir args} {
auto_mkindex_parser::init
foreach file [lsort [glob -- {*}$args]] {
- if {[catch {auto_mkindex_parser::mkindex $file} msg opts] == 0} {
- append index $msg
- } else {
+ try {
+ append index [auto_mkindex_parser::mkindex $file]
+ } on error {msg opts} {
cd $oldDir
return -options $opts $msg
}
@@ -224,6 +275,7 @@ proc auto_mkindex {dir args} {
auto_mkindex_parser::cleanup
set fid [open "tclIndex" w]
+ fconfigure $fid -encoding utf-8 -translation lf
puts -nonewline $fid $index
close $fid
cd $oldDir
@@ -250,12 +302,12 @@ proc auto_mkindex_old {dir args} {
set f ""
set error [catch {
set f [open $file]
- fconfigure $f -eofchar "\032 {}"
+ fconfigure $f -encoding utf-8 -eofchar \x1A
while {[gets $f line] >= 0} {
if {[regexp {^proc[ ]+([^ ]*)} $line match procName]} {
set procName [lindex [auto_qualify $procName "::"] 0]
append index "set [list auto_index($procName)]"
- append index " \[list source \[file join \$dir [list $file]\]\]\n"
+ append index " \[list source -encoding utf-8 \[file join \$dir [list $file]\]\]\n"
}
}
close $f
@@ -269,6 +321,7 @@ proc auto_mkindex_old {dir args} {
set f ""
set error [catch {
set f [open tclIndex w]
+ fconfigure $f -encoding utf-8 -translation lf
puts -nonewline $f $index
close $f
cd $oldDir
@@ -309,7 +362,14 @@ namespace eval auto_mkindex_parser {
$parser hide namespace
$parser hide eval
$parser hide puts
- $parser invokehidden namespace delete ::
+ foreach ns [$parser invokehidden namespace children ::] {
+ # MUST NOT DELETE "::tcl" OR BAD THINGS HAPPEN!
+ if {$ns eq "::tcl"} continue
+ $parser invokehidden namespace delete $ns
+ }
+ foreach cmd [$parser invokehidden info commands ::*] {
+ $parser invokehidden rename $cmd {}
+ }
$parser invokehidden proc unknown {args} {}
# We'll need access to the "namespace" command within the
@@ -320,7 +380,7 @@ namespace eval auto_mkindex_parser {
$parser expose eval
$parser invokehidden rename eval _%@eval
- # Install all the registered psuedo-command implementations
+ # Install all the registered pseudo-command implementations
foreach cmd $initCommands {
eval $cmd
@@ -354,7 +414,7 @@ proc auto_mkindex_parser::mkindex {file} {
set scriptFile $file
set fid [open $file]
- fconfigure $fid -eofchar "\032 {}"
+ fconfigure $fid -encoding utf-8 -eofchar \x1A
set contents [read $fid]
close $fid
@@ -381,10 +441,10 @@ proc auto_mkindex_parser::mkindex {file} {
# auto_mkindex_parser::hook command
#
-# Registers a Tcl command to evaluate when initializing the slave interpreter
-# used by the mkindex parser. The command is evaluated in the master
+# Registers a Tcl command to evaluate when initializing the child interpreter
+# used by the mkindex parser. The command is evaluated in the parent
# interpreter, and can use the variable auto_mkindex_parser::parser to get to
-# the slave
+# the child
proc auto_mkindex_parser::hook {cmd} {
variable initCommands
@@ -392,16 +452,16 @@ proc auto_mkindex_parser::hook {cmd} {
lappend initCommands $cmd
}
-# auto_mkindex_parser::slavehook command
+# auto_mkindex_parser::childhook command
#
-# Registers a Tcl command to evaluate when initializing the slave interpreter
-# used by the mkindex parser. The command is evaluated in the slave
+# Registers a Tcl command to evaluate when initializing the child interpreter
+# used by the mkindex parser. The command is evaluated in the child
# interpreter.
-proc auto_mkindex_parser::slavehook {cmd} {
+proc auto_mkindex_parser::childhook {cmd} {
variable initCommands
- # The $parser variable is defined to be the name of the slave interpreter
+ # The $parser variable is defined to be the name of the child interpreter
# when this command is used later.
lappend initCommands "\$parser eval [list $cmd]"
@@ -420,9 +480,9 @@ proc auto_mkindex_parser::slavehook {cmd} {
# "tclIndex" file for auto-loading.
#
# Arguments:
-# name Name of command recognized in Tcl files.
+# name Name of command recognized in Tcl files.
# arglist Argument list for command.
-# body Implementation of command to handle indexing.
+# body Implementation of command to handle indexing.
proc auto_mkindex_parser::command {name arglist body} {
hook [list auto_mkindex_parser::commandInit $name $arglist $body]
@@ -434,9 +494,9 @@ proc auto_mkindex_parser::command {name arglist body} {
# called when the interpreter used by the parser is created.
#
# Arguments:
-# name Name of command recognized in Tcl files.
+# name Name of command recognized in Tcl files.
# arglist Argument list for command.
-# body Implementation of command to handle indexing.
+# body Implementation of command to handle indexing.
proc auto_mkindex_parser::commandInit {name arglist body} {
variable parser
@@ -513,56 +573,71 @@ proc auto_mkindex_parser::fullname {name} {
return [string map [list \0 \$] $name]
}
+# auto_mkindex_parser::indexEntry --
+#
+# Used by commands like "proc" within the auto_mkindex parser to add a
+# correctly-quoted entry to the index. This is shared code so it is done
+# *right*, in one place.
+#
+# Arguments:
+# name - Name that is being added to index.
+
+proc auto_mkindex_parser::indexEntry {name} {
+ variable index
+ variable scriptFile
+
+ # We convert all metacharacters to their backslashed form, and pre-split
+ # the file name that we know about (which will be a proper list, and so
+ # correctly quoted).
+
+ set name [string range [list \}[fullname $name]] 2 end]
+ set filenameParts [file split $scriptFile]
+
+ append index [format \
+ {set auto_index(%s) [list source -encoding utf-8 [file join $dir %s]]%s} \
+ $name $filenameParts \n]
+ return
+}
+
if {[llength $::auto_mkindex_parser::initCommands]} {
return
}
-# Register all of the procedures for the auto_mkindex parser that
-# will build the "tclIndex" file.
+# Register all of the procedures for the auto_mkindex parser that will build
+# the "tclIndex" file.
# AUTO MKINDEX: proc name arglist body
# Adds an entry to the auto index list for the given procedure name.
auto_mkindex_parser::command proc {name args} {
- variable index
- variable scriptFile
- # Do some fancy reformatting on the "source" call to handle platform
- # differences with respect to pathnames. Use format just so that the
- # command is a little easier to read (otherwise it'd be full of
- # backslashed dollar signs, etc.
- append index [list set auto_index([fullname $name])] \
- [format { [list source [file join $dir %s]]} \
- [file split $scriptFile]] "\n"
+ indexEntry $name
}
# Conditionally add support for Tcl byte code files. There are some tricky
# details here. First, we need to get the tbcload library initialized in the
-# current interpreter. We cannot load tbcload into the slave until we have
+# current interpreter. We cannot load tbcload into the child until we have
# done so because it needs access to the tcl_patchLevel variable. Second,
# because the package index file may defer loading the library until we invoke
# a command, we need to explicitly invoke auto_load to force it to be loaded.
# This should be a noop if the package has already been loaded
auto_mkindex_parser::hook {
- if {![catch {package require tbcload}]} {
+ try {
+ package require tbcload
+ } on error {} {
+ # OK, don't have it so do nothing
+ } on ok {} {
if {[namespace which -command tbcload::bcproc] eq ""} {
auto_load tbcload::bcproc
}
load {} tbcload $auto_mkindex_parser::parser
# AUTO MKINDEX: tbcload::bcproc name arglist body
- # Adds an entry to the auto index list for the given pre-compiled
+ # Adds an entry to the auto index list for the given precompiled
# procedure name.
auto_mkindex_parser::commandInit tbcload::bcproc {name args} {
- variable index
- variable scriptFile
- # Do some nice reformatting of the "source" call, to get around
- # path differences on different platforms. We use the format
- # command just so that the code is a little easier to read.
- append index [list set auto_index([fullname $name])] \
- [format { [list source [file join $dir %s]]} \
- [file split $scriptFile]] "\n"
+ indexEntry $name
}
}
}
@@ -606,11 +681,31 @@ auto_mkindex_parser::command namespace {op args} {
variable contextStack
if {[lindex $args 0] eq "create"} {
set name ::[join [lreverse $contextStack] ::]
- # create artifical proc to force an entry in the tclIndex
+ catch {
+ set name [dict get [lrange $args 1 end] -command]
+ if {![string match ::* $name]} {
+ set name ::[join [lreverse $contextStack] ::]$name
+ }
+ regsub -all ::+ $name :: name
+ }
+ # create artificial proc to force an entry in the tclIndex
$parser eval [list ::proc $name {} {}]
}
}
}
}
+# AUTO MKINDEX: oo::class create name ?definition?
+# Adds an entry to the auto index list for the given class name.
+auto_mkindex_parser::command oo::class {op name {body ""}} {
+ if {$op eq "create"} {
+ indexEntry $name
+ }
+}
+auto_mkindex_parser::command class {op name {body ""}} {
+ if {$op eq "create"} {
+ indexEntry $name
+ }
+}
+
return
diff --git a/library/clock.tcl b/library/clock.tcl
index 3018a3b..d3ad63a 100644
--- a/library/clock.tcl
+++ b/library/clock.tcl
@@ -2,37 +2,29 @@
#
# clock.tcl --
#
-# This file implements the portions of the [clock] ensemble that
-# are coded in Tcl. Refer to the users' manual to see the description
-# of the [clock] command and its subcommands.
+# This file implements the portions of the [clock] ensemble that are
+# coded in Tcl. Refer to the users' manual to see the description of
+# the [clock] command and its subcommands.
#
#
#----------------------------------------------------------------------
#
-# Copyright (c) 2004,2005,2006,2007 by Kevin B. Kenny
+# Copyright © 2004-2007 Kevin B. Kenny
+# Copyright © 2015 Sergey G. Brester aka sebres.
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
#----------------------------------------------------------------------
-# We must have message catalogs that support the root locale, and
-# we need access to the Registry on Windows systems.
+# msgcat 1.7 features are used.
-uplevel \#0 {
- package require msgcat 1.4
- if { $::tcl_platform(platform) eq {windows} } {
- if { [catch { package require registry 1.1 }] } {
- namespace eval ::tcl::clock [list variable NoRegistry {}]
- }
- }
-}
+package require msgcat 1.7
-# Put the library directory into the namespace for the ensemble
-# so that the library code can find message catalogs and time zone
-# definition files.
+# Put the library directory into the namespace for the ensemble so that the
+# library code can find message catalogs and time zone definition files.
namespace eval ::tcl::clock \
- [list variable LibDir [file dirname [info script]]]
+ [list variable LibDir [info library]]
#----------------------------------------------------------------------
#
@@ -40,8 +32,8 @@ namespace eval ::tcl::clock \
#
# Manipulate times.
#
-# The 'clock' command manipulates time. Refer to the user documentation
-# for the available subcommands and what they do.
+# The 'clock' command manipulates time. Refer to the user documentation for
+# the available subcommands and what they do.
#
#----------------------------------------------------------------------
@@ -59,8 +51,8 @@ namespace eval ::tcl::clock {
# Import the message catalog commands that we use.
- namespace import ::msgcat::mcload
namespace import ::msgcat::mclocale
+ namespace import ::msgcat::mcpackagelocale
}
@@ -76,11 +68,11 @@ namespace eval ::tcl::clock {
# Side effects:
# Namespace variable in the 'clock' subsystem are initialized.
#
-# The '::tcl::clock::Initialize' procedure initializes the namespace
-# variables and root locale message catalog for the 'clock' subsystem.
-# It is broken into a procedure rather than simply evaluated as a script
-# so that it will be able to use local variables, avoiding the dangers
-# of 'creative writing' as in Bug 1185933.
+# The '::tcl::clock::Initialize' procedure initializes the namespace variables
+# and root locale message catalog for the 'clock' subsystem. It is broken
+# into a procedure rather than simply evaluated as a script so that it will be
+# able to use local variables, avoiding the dangers of 'creative writing' as
+# in Bug 1185933.
#
#----------------------------------------------------------------------
@@ -107,6 +99,11 @@ proc ::tcl::clock::Initialize {} {
}
InitTZData
+ mcpackagelocale set {}
+ ::msgcat::mcpackageconfig set mcfolder [file join $LibDir msgs]
+ ::msgcat::mcpackageconfig set unknowncmd ""
+ ::msgcat::mcpackageconfig set changecmd ChangeCurrentLocale
+
# Define the message catalog for the root locale.
::msgcat::mcmset {} {
@@ -143,9 +140,9 @@ proc ::tcl::clock::Initialize {} {
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
}
MONTHS_FULL {
- January February March
- April May June
- July August September
+ January February March
+ April May June
+ July August September
October November December
}
PM {pm}
@@ -172,8 +169,8 @@ proc ::tcl::clock::Initialize {} {
::msgcat::mcset fr GREGORIAN_CHANGE_DATE 2299227
- # For Belgium, we follow Southern Netherlands; Liege Diocese
- # changed several weeks later.
+ # For Belgium, we follow Southern Netherlands; Liege Diocese changed
+ # several weeks later.
::msgcat::mcset fr_BE GREGORIAN_CHANGE_DATE 2299238
::msgcat::mcset nl_BE GREGORIAN_CHANGE_DATE 2299238
@@ -194,8 +191,8 @@ proc ::tcl::clock::Initialize {} {
::msgcat::mcset no GREGORIAN_CHANGE_DATE 2342032
::msgcat::mcset da GREGORIAN_CHANGE_DATE 2342032
- # Holland (Brabant, Gelderland, Flanders, Friesland, etc. changed
- # at various times)
+ # Holland (Brabant, Gelderland, Flanders, Friesland, etc. changed at
+ # various times)
::msgcat::mcset nl GREGORIAN_CHANGE_DATE 2342165
@@ -217,8 +214,8 @@ proc ::tcl::clock::Initialize {} {
::msgcat::mcset ru GREGORIAN_CHANGE_DATE 2421639
- # Romania (Transylvania changed earler - perhaps de_RO should show
- # the earlier date?)
+ # Romania (Transylvania changed earlier - perhaps de_RO should show the
+ # earlier date?)
::msgcat::mcset ro GREGORIAN_CHANGE_DATE 2422063
@@ -232,8 +229,8 @@ proc ::tcl::clock::Initialize {} {
#
#------------------------------------------------------------------
- # Paths at which binary time zone data for the Olson libraries
- # are known to reside on various operating systems
+ # Paths at which binary time zone data for the Olson libraries are known
+ # to reside on various operating systems
variable ZoneinfoPaths {}
foreach path {
@@ -250,7 +247,6 @@ proc ::tcl::clock::Initialize {} {
# Define the directories for time zone data and message catalogs.
variable DataDir [file join $LibDir tzdata]
- variable MsgDir [file join $LibDir msgs]
# Number of days in the months, in common years and leap years.
@@ -282,51 +278,58 @@ proc ::tcl::clock::Initialize {} {
variable FEB_28 58
- # Translation table to map Windows TZI onto cities, so that
- # the Olson rules can apply. In some cases the mapping is ambiguous,
- # so it's wise to specify $::env(TCL_TZ) rather than simply depending
- # on the system time zone.
+ # Default configuration
+
+ ::tcl::unsupported::clock::configure -current-locale [mclocale]
+ #::tcl::unsupported::clock::configure -default-locale C
+ #::tcl::unsupported::clock::configure -year-century 2000 \
+ # -century-switch 38
+
+ # Translation table to map Windows TZI onto cities, so that the Olson
+ # rules can apply. In some cases the mapping is ambiguous, so it's wise
+ # to specify $::env(TCL_TZ) rather than simply depending on the system
+ # time zone.
# The keys are long lists of values obtained from the time zone
# information in the Registry. In order, the list elements are:
- # Bias StandardBias DaylightBias
+ # Bias StandardBias DaylightBias
# StandardDate.wYear StandardDate.wMonth StandardDate.wDayOfWeek
# StandardDate.wDay StandardDate.wHour StandardDate.wMinute
# StandardDate.wSecond StandardDate.wMilliseconds
# DaylightDate.wYear DaylightDate.wMonth DaylightDate.wDayOfWeek
# DaylightDate.wDay DaylightDate.wHour DaylightDate.wMinute
# DaylightDate.wSecond DaylightDate.wMilliseconds
- # The values are the names of time zones where those rules apply.
- # There is considerable ambiguity in certain zones; an attempt has
- # been made to make a reasonable guess, but this table needs to be
- # taken with a grain of salt.
+ # The values are the names of time zones where those rules apply. There
+ # is considerable ambiguity in certain zones; an attempt has been made to
+ # make a reasonable guess, but this table needs to be taken with a grain
+ # of salt.
variable WinZoneInfo [dict create {*}{
{-43200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Kwajalein
{-39600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Midway
{-36000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Honolulu
- {-32400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Anchorage
- {-28800 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Los_Angeles
- {-28800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Tijuana
- {-25200 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Denver
- {-25200 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Chihuahua
+ {-32400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Anchorage
+ {-28800 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Los_Angeles
+ {-28800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Tijuana
+ {-25200 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Denver
+ {-25200 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Chihuahua
{-25200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Phoenix
{-21600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Regina
{-21600 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Chicago
- {-21600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Mexico_City
+ {-21600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Mexico_City
{-18000 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/New_York
{-18000 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Indianapolis
{-14400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Caracas
- {-14400 0 3600 0 3 6 2 23 59 59 999 0 10 6 2 23 59 59 999}
+ {-14400 0 3600 0 3 6 2 23 59 59 999 0 10 6 2 23 59 59 999}
:America/Santiago
- {-14400 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Manaus
- {-14400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Halifax
+ {-14400 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Manaus
+ {-14400 0 3600 0 11 0 1 2 0 0 0 0 3 0 2 2 0 0 0} :America/Halifax
{-12600 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/St_Johns
{-10800 0 3600 0 2 0 2 2 0 0 0 0 10 0 3 2 0 0 0} :America/Sao_Paulo
{-10800 0 3600 0 10 0 5 2 0 0 0 0 4 0 1 2 0 0 0} :America/Godthab
{-10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :America/Buenos_Aires
- {-10800 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Bahia
- {-10800 0 3600 0 3 0 2 2 0 0 0 0 10 0 1 2 0 0 0} :America/Montevideo
+ {-10800 0 3600 0 2 0 5 2 0 0 0 0 11 0 1 2 0 0 0} :America/Bahia
+ {-10800 0 3600 0 3 0 2 2 0 0 0 0 10 0 1 2 0 0 0} :America/Montevideo
{-7200 0 3600 0 9 0 5 2 0 0 0 0 3 0 5 2 0 0 0} :America/Noronha
{-3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Atlantic/Azores
{-3600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Atlantic/Cape_Verde
@@ -334,22 +337,22 @@ proc ::tcl::clock::Initialize {} {
{0 0 3600 0 10 0 5 2 0 0 0 0 3 0 5 1 0 0 0} :Europe/London
{3600 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Kinshasa
{3600 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :CET
- {7200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Harare
- {7200 0 3600 0 9 4 5 23 59 59 0 0 4 4 5 23 59 59 0}
- :Africa/Cairo
+ {7200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Africa/Harare
+ {7200 0 3600 0 9 4 5 23 59 59 0 0 4 4 5 23 59 59 0}
+ :Africa/Cairo
{7200 0 3600 0 10 0 5 4 0 0 0 0 3 0 5 3 0 0 0} :Europe/Helsinki
- {7200 0 3600 0 9 0 3 2 0 0 0 0 3 5 5 2 0 0 0} :Asia/Jerusalem
+ {7200 0 3600 0 9 0 3 2 0 0 0 0 3 5 5 2 0 0 0} :Asia/Jerusalem
{7200 0 3600 0 9 0 5 1 0 0 0 0 3 0 5 0 0 0 0} :Europe/Bucharest
{7200 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Europe/Athens
- {7200 0 3600 0 9 5 5 1 0 0 0 0 3 4 5 0 0 0 0} :Asia/Amman
- {7200 0 3600 0 10 6 5 23 59 59 999 0 3 0 5 0 0 0 0}
+ {7200 0 3600 0 9 5 5 1 0 0 0 0 3 4 5 0 0 0 0} :Asia/Amman
+ {7200 0 3600 0 10 6 5 23 59 59 999 0 3 0 5 0 0 0 0}
:Asia/Beirut
- {7200 0 -3600 0 4 0 1 2 0 0 0 0 9 0 1 2 0 0 0} :Africa/Windhoek
+ {7200 0 -3600 0 4 0 1 2 0 0 0 0 9 0 1 2 0 0 0} :Africa/Windhoek
{10800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Riyadh
{10800 0 3600 0 10 0 1 4 0 0 0 0 4 0 1 3 0 0 0} :Asia/Baghdad
{10800 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Europe/Moscow
{12600 0 3600 0 9 2 4 2 0 0 0 0 3 0 1 2 0 0 0} :Asia/Tehran
- {14400 0 3600 0 10 0 5 5 0 0 0 0 3 0 5 4 0 0 0} :Asia/Baku
+ {14400 0 3600 0 10 0 5 5 0 0 0 0 3 0 5 4 0 0 0} :Asia/Baku
{14400 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Muscat
{14400 0 3600 0 10 0 5 3 0 0 0 0 3 0 5 2 0 0 0} :Asia/Tbilisi
{16200 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Asia/Kabul
@@ -378,152 +381,6 @@ proc ::tcl::clock::Initialize {} {
{46800 0 3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} :Pacific/Tongatapu
}]
- # Groups of fields that specify the date, priorities, and
- # code bursts that determine Julian Day Number given those groups.
- # The code in [clock scan] will choose the highest priority
- # (lowest numbered) set of fields that determines the date.
-
- variable DateParseActions {
-
- { seconds } 0 {}
-
- { julianDay } 1 {}
-
- { era century yearOfCentury month dayOfMonth } 2 {
- dict set date year [expr { 100 * [dict get $date century]
- + [dict get $date yearOfCentury] }]
- set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \
- $changeover]
- }
- { era century yearOfCentury dayOfYear } 2 {
- dict set date year [expr { 100 * [dict get $date century]
- + [dict get $date yearOfCentury] }]
- set date [GetJulianDayFromEraYearDay $date[set date {}] \
- $changeover]
- }
-
- { century yearOfCentury month dayOfMonth } 3 {
- dict set date era CE
- dict set date year [expr { 100 * [dict get $date century]
- + [dict get $date yearOfCentury] }]
- set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \
- $changeover]
- }
- { century yearOfCentury dayOfYear } 3 {
- dict set date era CE
- dict set date year [expr { 100 * [dict get $date century]
- + [dict get $date yearOfCentury] }]
- set date [GetJulianDayFromEraYearDay $date[set date {}] \
- $changeover]
- }
- { iso8601Century iso8601YearOfCentury iso8601Week dayOfWeek } 3 {
- dict set date era CE
- dict set date iso8601Year \
- [expr { 100 * [dict get $date iso8601Century]
- + [dict get $date iso8601YearOfCentury] }]
- set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \
- $changeover]
- }
-
- { yearOfCentury month dayOfMonth } 4 {
- set date [InterpretTwoDigitYear $date[set date {}] $baseTime]
- dict set date era CE
- set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \
- $changeover]
- }
- { yearOfCentury dayOfYear } 4 {
- set date [InterpretTwoDigitYear $date[set date {}] $baseTime]
- dict set date era CE
- set date [GetJulianDayFromEraYearDay $date[set date {}] \
- $changeover]
- }
- { iso8601YearOfCentury iso8601Week dayOfWeek } 4 {
- set date [InterpretTwoDigitYear \
- $date[set date {}] $baseTime \
- iso8601YearOfCentury iso8601Year]
- dict set date era CE
- set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \
- $changeover]
- }
-
- { month dayOfMonth } 5 {
- set date [AssignBaseYear $date[set date {}] \
- $baseTime $timeZone $changeover]
- set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \
- $changeover]
- }
- { dayOfYear } 5 {
- set date [AssignBaseYear $date[set date {}] \
- $baseTime $timeZone $changeover]
- set date [GetJulianDayFromEraYearDay $date[set date {}] \
- $changeover]
- }
- { iso8601Week dayOfWeek } 5 {
- set date [AssignBaseIso8601Year $date[set date {}] \
- $baseTime $timeZone $changeover]
- set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \
- $changeover]
- }
-
- { dayOfMonth } 6 {
- set date [AssignBaseMonth $date[set date {}] \
- $baseTime $timeZone $changeover]
- set date [GetJulianDayFromEraYearMonthDay $date[set date {}] \
- $changeover]
- }
-
- { dayOfWeek } 7 {
- set date [AssignBaseWeek $date[set date {}] \
- $baseTime $timeZone $changeover]
- set date [GetJulianDayFromEraYearWeekDay $date[set date {}] \
- $changeover]
- }
-
- {} 8 {
- set date [AssignBaseJulianDay $date[set date {}] \
- $baseTime $timeZone $changeover]
- }
- }
-
- # Groups of fields that specify time of day, priorities,
- # and code that processes them
-
- variable TimeParseActions {
-
- seconds 1 {}
-
- { hourAMPM minute second amPmIndicator } 2 {
- dict set date secondOfDay [InterpretHMSP $date]
- }
- { hour minute second } 2 {
- dict set date secondOfDay [InterpretHMS $date]
- }
-
- { hourAMPM minute amPmIndicator } 3 {
- dict set date second 0
- dict set date secondOfDay [InterpretHMSP $date]
- }
- { hour minute } 3 {
- dict set date second 0
- dict set date secondOfDay [InterpretHMS $date]
- }
-
- { hourAMPM amPmIndicator } 4 {
- dict set date minute 0
- dict set date second 0
- dict set date secondOfDay [InterpretHMSP $date]
- }
- { hour } 4 {
- dict set date minute 0
- dict set date second 0
- dict set date secondOfDay [InterpretHMS $date]
- }
-
- { } 5 {
- dict set date secondOfDay 0
- }
- }
-
# Legacy time zones, used primarily for parsing RFC822 dates.
variable LegacyTimeZone [dict create \
@@ -549,6 +406,8 @@ proc ::tcl::clock::Initialize {} {
pdt -0700 \
yst -0900 \
ydt -0800 \
+ akst -0900 \
+ akdt -0800 \
hst -1000 \
hdt -0900 \
cat -1000 \
@@ -579,8 +438,8 @@ proc ::tcl::clock::Initialize {} {
jst +0900 \
kst +0900 \
cast +0930 \
- jdt +1000 \
- kdt +1000 \
+ jdt +1000 \
+ kdt +1000 \
cadt +1030 \
east +1000 \
eadt +1030 \
@@ -618,1797 +477,229 @@ proc ::tcl::clock::Initialize {} {
# Caches
- variable LocaleNumeralCache {}; # Dictionary whose keys are locale
- # names and whose values are pairs
- # comprising regexes matching numerals
- # in the given locales and dictionaries
- # mapping the numerals to their numeric
- # values.
- variable McLoaded {}; # Dictionary whose keys are locales
- # in which [mcload] has been executed
- # and whose values are second-level
- # dictionaries indexed by message
- # name and giving message text.
- # variable CachedSystemTimeZone; # If 'CachedSystemTimeZone' exists,
- # it contains the value of the
- # system time zone, as determined from
- # the environment.
- variable TimeZoneBad {}; # Dictionary whose keys are time zone
- # names and whose values are 1 if
+ variable LocFmtMap [dict create]; # Dictionary with localized format maps
+
+ variable TimeZoneBad [dict create]; # Dictionary whose keys are time zone
+ # names and whose values are 1 if
# the time zone is unknown and 0
- # if it is known.
+ # if it is known.
variable TZData; # Array whose keys are time zone names
# and whose values are lists of quads
# comprising start time, UTC offset,
# Daylight Saving Time indicator, and
# time zone abbreviation.
- variable FormatProc; # Array mapping format group
- # and locale to the name of a procedure
- # that renders the given format
+
+ variable mcLocales [dict create]; # Dictionary with loaded locales
+ variable mcMergedCat [dict create]; # Dictionary with merged locale catalogs
}
::tcl::clock::Initialize
#----------------------------------------------------------------------
-#
-# clock format --
-#
-# Formats a count of seconds since the Posix Epoch as a time
-# of day.
-#
-# The 'clock format' command formats times of day for output.
-# Refer to the user documentation to see what it does.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::format { args } {
- variable FormatProc
- variable TZData
-
- lassign [ParseFormatArgs {*}$args] format locale timezone
- set locale [string tolower $locale]
- set clockval [lindex $args 0]
-
- # Get the data for time changes in the given zone
-
- if {$timezone eq ""} {
- set timezone [GetSystemTimeZone]
- }
- if {![info exists TZData($timezone)]} {
- if {[catch {SetupTimeZone $timezone} retval opts]} {
- dict unset opts -errorinfo
- return -options $opts $retval
- }
- }
-
- # Build a procedure to format the result. Cache the built procedure's
- # name in the 'FormatProc' array to avoid losing its internal
- # representation, which contains the name resolution.
-
- set procName formatproc'$format'$locale
- set procName [namespace current]::[string map {: {\:} \\ {\\}} $procName]
- if {[info exists FormatProc($procName)]} {
- set procName $FormatProc($procName)
- } else {
- set FormatProc($procName) \
- [ParseClockFormatFormat $procName $format $locale]
- }
-
- return [$procName $clockval $timezone]
-
-}
-
-#----------------------------------------------------------------------
+# mcget --
#
-# ParseClockFormatFormat --
+# Return the merged translation catalog for the ::tcl::clock namespace
+# Searching of catalog is similar to "msgcat::mc".
#
-# Builds and caches a procedure that formats a time value.
+# Contrary to "msgcat::mc" may additionally load a package catalog
+# on demand.
#
-# Parameters:
-# format -- Format string to use
-# locale -- Locale in which the format string is to be interpreted
+# Arguments:
+# loc The locale used for translation.
#
# Results:
-# Returns the name of the newly-built procedure.
+# Returns the dictionary object as whole catalog of the package/locale.
#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::ParseClockFormatFormat {procName format locale} {
-
- if {[namespace which $procName] ne {}} {
- return $procName
- }
-
- # Map away the locale-dependent composite format groups
-
- EnterLocale $locale oldLocale
-
- # Change locale if a fresh locale has been given on the command line.
-
- set status [catch {
-
- ParseClockFormatFormat2 $format $locale $procName
-
- } result opts]
-
- # Restore the locale
-
- if { [info exists oldLocale] } {
- mclocale $oldLocale
+proc ::tcl::clock::mcget {loc} {
+ variable mcMergedCat
+ switch -- $loc system {
+ set loc [GetSystemLocale]
+ } current {
+ set loc [mclocale]
}
-
- # Return either the error or the proc name
-
- if { $status == 1 } {
- if { [lindex [dict get $opts -errorcode] 0] eq {clock} } {
- return -code error $result
- } else {
- return -options $opts $result
- }
- } else {
- return $result
- }
-
-}
-
-proc ::tcl::clock::ParseClockFormatFormat2 {format locale procName} {
-
- set didLocaleEra 0
- set didLocaleNumerals 0
- set preFormatCode \
- [string map [list @GREGORIAN_CHANGE_DATE@ \
- [mc GREGORIAN_CHANGE_DATE]] \
- {
- variable TZData
- set date [GetDateFields $clockval \
- $TZData($timezone) \
- @GREGORIAN_CHANGE_DATE@]
- }]
- set formatString {}
- set substituents {}
- set state {}
-
- set format [LocalizeFormat $locale $format]
-
- foreach char [split $format {}] {
- switch -exact -- $state {
- {} {
- if { [string equal % $char] } {
- set state percent
- } else {
- append formatString $char
- }
- }
- percent { # Character following a '%' character
- set state {}
- switch -exact -- $char {
- % { # A literal character, '%'
- append formatString %%
- }
- a { # Day of week, abbreviated
- append formatString %s
- append substituents \
- [string map \
- [list @DAYS_OF_WEEK_ABBREV@ \
- [list [mc DAYS_OF_WEEK_ABBREV]]] \
- { [lindex @DAYS_OF_WEEK_ABBREV@ \
- [expr {[dict get $date dayOfWeek] \
- % 7}]]}]
- }
- A { # Day of week, spelt out.
- append formatString %s
- append substituents \
- [string map \
- [list @DAYS_OF_WEEK_FULL@ \
- [list [mc DAYS_OF_WEEK_FULL]]] \
- { [lindex @DAYS_OF_WEEK_FULL@ \
- [expr {[dict get $date dayOfWeek] \
- % 7}]]}]
- }
- b - h { # Name of month, abbreviated.
- append formatString %s
- append substituents \
- [string map \
- [list @MONTHS_ABBREV@ \
- [list [mc MONTHS_ABBREV]]] \
- { [lindex @MONTHS_ABBREV@ \
- [expr {[dict get $date month]-1}]]}]
- }
- B { # Name of month, spelt out
- append formatString %s
- append substituents \
- [string map \
- [list @MONTHS_FULL@ \
- [list [mc MONTHS_FULL]]] \
- { [lindex @MONTHS_FULL@ \
- [expr {[dict get $date month]-1}]]}]
- }
- C { # Century number
- append formatString %02d
- append substituents \
- { [expr {[dict get $date year] / 100}]}
- }
- d { # Day of month, with leading zero
- append formatString %02d
- append substituents { [dict get $date dayOfMonth]}
- }
- e { # Day of month, without leading zero
- append formatString %2d
- append substituents { [dict get $date dayOfMonth]}
- }
- E { # Format group in a locale-dependent
- # alternative era
- set state percentE
- if {!$didLocaleEra} {
- append preFormatCode \
- [string map \
- [list @LOCALE_ERAS@ \
- [list [mc LOCALE_ERAS]]] \
- {
- set date [GetLocaleEra \
- $date[set date {}] \
- @LOCALE_ERAS@]}] \n
- set didLocaleEra 1
- }
- if {!$didLocaleNumerals} {
- append preFormatCode \
- [list set localeNumerals \
- [mc LOCALE_NUMERALS]] \n
- set didLocaleNumerals 1
- }
- }
- g { # Two-digit year relative to ISO8601
- # week number
- append formatString %02d
- append substituents \
- { [expr { [dict get $date iso8601Year] % 100 }]}
- }
- G { # Four-digit year relative to ISO8601
- # week number
- append formatString %02d
- append substituents { [dict get $date iso8601Year]}
- }
- H { # Hour in the 24-hour day, leading zero
- append formatString %02d
- append substituents \
- { [expr { [dict get $date localSeconds] \
- / 3600 % 24}]}
- }
- I { # Hour AM/PM, with leading zero
- append formatString %02d
- append substituents \
- { [expr { ( ( ( [dict get $date localSeconds] \
- % 86400 ) \
- + 86400 \
- - 3600 ) \
- / 3600 ) \
- % 12 + 1 }] }
- }
- j { # Day of year (001-366)
- append formatString %03d
- append substituents { [dict get $date dayOfYear]}
- }
- J { # Julian Day Number
- append formatString %07ld
- append substituents { [dict get $date julianDay]}
- }
- k { # Hour (0-23), no leading zero
- append formatString %2d
- append substituents \
- { [expr { [dict get $date localSeconds]
- / 3600
- % 24 }]}
- }
- l { # Hour (12-11), no leading zero
- append formatString %2d
- append substituents \
- { [expr { ( ( ( [dict get $date localSeconds]
- % 86400 )
- + 86400
- - 3600 )
- / 3600 )
- % 12 + 1 }]}
- }
- m { # Month number, leading zero
- append formatString %02d
- append substituents { [dict get $date month]}
- }
- M { # Minute of the hour, leading zero
- append formatString %02d
- append substituents \
- { [expr { [dict get $date localSeconds]
- / 60
- % 60 }]}
- }
- n { # A literal newline
- append formatString \n
- }
- N { # Month number, no leading zero
- append formatString %2d
- append substituents { [dict get $date month]}
- }
- O { # A format group in the locale's
- # alternative numerals
- set state percentO
- if {!$didLocaleNumerals} {
- append preFormatCode \
- [list set localeNumerals \
- [mc LOCALE_NUMERALS]] \n
- set didLocaleNumerals 1
- }
- }
- p { # Localized 'AM' or 'PM' indicator
- # converted to uppercase
- append formatString %s
- append preFormatCode \
- [list set AM [string toupper [mc AM]]] \n \
- [list set PM [string toupper [mc PM]]] \n
- append substituents \
- { [expr {(([dict get $date localSeconds]
- % 86400) < 43200) ?
- $AM : $PM}]}
- }
- P { # Localized 'AM' or 'PM' indicator
- append formatString %s
- append preFormatCode \
- [list set am [mc AM]] \n \
- [list set pm [mc PM]] \n
- append substituents \
- { [expr {(([dict get $date localSeconds]
- % 86400) < 43200) ?
- $am : $pm}]}
-
- }
- Q { # Hi, Jeff!
- append formatString %s
- append substituents { [FormatStarDate $date]}
- }
- s { # Seconds from the Posix Epoch
- append formatString %s
- append substituents { [dict get $date seconds]}
- }
- S { # Second of the minute, with
- # leading zero
- append formatString %02d
- append substituents \
- { [expr { [dict get $date localSeconds]
- % 60 }]}
- }
- t { # A literal tab character
- append formatString \t
- }
- u { # Day of the week (1-Monday, 7-Sunday)
- append formatString %1d
- append substituents { [dict get $date dayOfWeek]}
- }
- U { # Week of the year (00-53). The
- # first Sunday of the year is the
- # first day of week 01
- append formatString %02d
- append preFormatCode {
- set dow [dict get $date dayOfWeek]
- if { $dow == 7 } {
- set dow 0
- }
- incr dow
- set UweekNumber \
- [expr { ( [dict get $date dayOfYear]
- - $dow + 7 )
- / 7 }]
- }
- append substituents { $UweekNumber}
- }
- V { # The ISO8601 week number
- append formatString %02d
- append substituents { [dict get $date iso8601Week]}
- }
- w { # Day of the week (0-Sunday,
- # 6-Saturday)
- append formatString %1d
- append substituents \
- { [expr { [dict get $date dayOfWeek] % 7 }]}
- }
- W { # Week of the year (00-53). The first
- # Monday of the year is the first day
- # of week 01.
- append preFormatCode {
- set WweekNumber \
- [expr { ( [dict get $date dayOfYear]
- - [dict get $date dayOfWeek]
- + 7 )
- / 7 }]
- }
- append formatString %02d
- append substituents { $WweekNumber}
- }
- y { # The two-digit year of the century
- append formatString %02d
- append substituents \
- { [expr { [dict get $date year] % 100 }]}
- }
- Y { # The four-digit year
- append formatString %04d
- append substituents { [dict get $date year]}
- }
- z { # The time zone as hours and minutes
- # east (+) or west (-) of Greenwich
- append formatString %s
- append substituents { [FormatNumericTimeZone \
- [dict get $date tzOffset]]}
- }
- Z { # The name of the time zone
- append formatString %s
- append substituents { [dict get $date tzName]}
- }
- % { # A literal percent character
- append formatString %%
- }
- default { # An unknown escape sequence
- append formatString %% $char
- }
- }
- }
- percentE { # Character following %E
- set state {}
- switch -exact -- $char {
- E {
- append formatString %s
- append substituents { } \
- [string map \
- [list @BCE@ [list [mc BCE]] \
- @CE@ [list [mc CE]]] \
- {[dict get {BCE @BCE@ CE @CE@} \
- [dict get $date era]]}]
- }
- C { # Locale-dependent era
- append formatString %s
- append substituents { [dict get $date localeEra]}
- }
- y { # Locale-dependent year of the era
- append preFormatCode {
- set y [dict get $date localeYear]
- if { $y >= 0 && $y < 100 } {
- set Eyear [lindex $localeNumerals $y]
- } else {
- set Eyear $y
- }
- }
- append formatString %s
- append substituents { $Eyear}
- }
- default { # Unknown %E format group
- append formatString %%E $char
- }
- }
- }
- percentO { # Character following %O
- set state {}
- switch -exact -- $char {
- d - e { # Day of the month in alternative
- # numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [dict get $date dayOfMonth]]}
- }
- H - k { # Hour of the day in alternative
- # numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [expr { [dict get $date localSeconds]
- / 3600
- % 24 }]]}
- }
- I - l { # Hour (12-11) AM/PM in alternative
- # numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [expr { ( ( ( [dict get $date localSeconds]
- % 86400 )
- + 86400
- - 3600 )
- / 3600 )
- % 12 + 1 }]]}
- }
- m { # Month number in alternative numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals [dict get $date month]]}
- }
- M { # Minute of the hour in alternative
- # numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [expr { [dict get $date localSeconds]
- / 60
- % 60 }]]}
- }
- S { # Second of the minute in alternative
- # numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [expr { [dict get $date localSeconds]
- % 60 }]]}
- }
- u { # Day of the week (Monday=1,Sunday=7)
- # in alternative numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [dict get $date dayOfWeek]]}
- }
- w { # Day of the week (Sunday=0,Saturday=6)
- # in alternative numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [expr { [dict get $date dayOfWeek] % 7 }]]}
- }
- y { # Year of the century in alternative
- # numerals
- append formatString %s
- append substituents \
- { [lindex $localeNumerals \
- [expr { [dict get $date year] % 100 }]]}
- }
- default { # Unknown format group
- append formatString %%O $char
- }
- }
- }
- }
+ if {$loc ne {}} {
+ set loc [string tolower $loc]
}
- # Clean up any improperly terminated groups
-
- switch -exact -- $state {
- percent {
- append formatString %%
- }
- percentE {
- append retval %%E
- }
- percentO {
- append retval %%O
- }
+ # try to retrieve now if already available:
+ if {[dict exists $mcMergedCat $loc]} {
+ return [dict get $mcMergedCat $loc]
}
- proc $procName {clockval timezone} "
- $preFormatCode
- return \[::format [list $formatString] $substituents\]
- "
-
- # puts [list $procName [info args $procName] [info body $procName]]
-
- return $procName
-}
-
-#----------------------------------------------------------------------
-#
-# clock scan --
-#
-# Inputs a count of seconds since the Posix Epoch as a time
-# of day.
-#
-# The 'clock format' command scans times of day on input.
-# Refer to the user documentation to see what it does.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::scan { args } {
-
- set format {}
-
- # Check the count of args
-
- if { [llength $args] < 1 || [llength $args] % 2 != 1 } {
- set cmdName "clock scan"
- return -code error \
- -errorcode [list CLOCK wrongNumArgs] \
- "wrong \# args: should be\
- \"$cmdName string\
- ?-base seconds?\
- ?-format string? ?-gmt boolean?\
- ?-locale LOCALE? ?-timezone ZONE?\""
- }
-
- # Set defaults
-
- set base [clock seconds]
- set string [lindex $args 0]
- set format {}
- set gmt 0
- set locale c
- set timezone [GetSystemTimeZone]
-
- # Pick up command line options.
-
- foreach { flag value } [lreplace $args 0 0] {
- set saw($flag) {}
- switch -exact -- $flag {
- -b - -ba - -bas - -base {
- set base $value
- }
- -f - -fo - -for - -form - -forma - -format {
- set format $value
- }
- -g - -gm - -gmt {
- set gmt $value
- }
- -l - -lo - -loc - -loca - -local - -locale {
- set locale [string tolower $value]
- }
- -t - -ti - -tim - -time - -timez - -timezo - -timezon - -timezone {
- set timezone $value
- }
- default {
- return -code error \
- -errorcode [list CLOCK badSwitch $flag] \
- "bad switch \"$flag\",\
- must be -base, -format, -gmt, -locale or -timezone"
- }
- }
- }
-
- # Check options for validity
-
- if { [info exists saw(-gmt)] && [info exists saw(-timezone)] } {
- return -code error \
- -errorcode [list CLOCK gmtWithTimezone] \
- "cannot use -gmt and -timezone in same call"
- }
- if { [catch { expr { wide($base) } } result] } {
- return -code error \
- "expected integer but got \"$base\""
- }
- if { ![string is boolean $gmt] } {
- return -code error \
- "expected boolean value but got \"$gmt\""
- } else {
- if { $gmt } {
- set timezone :GMT
- }
- }
-
- if { ![info exists saw(-format)] } {
- # Perhaps someday we'll localize the legacy code. Right now,
- # it's not localized.
- if { [info exists saw(-locale)] } {
- return -code error \
- -errorcode [list CLOCK flagWithLegacyFormat] \
- "legacy \[clock scan\] does not support -locale"
-
- }
- return [FreeScan $string $base $timezone $locale]
- }
-
- # Change locale if a fresh locale has been given on the command line.
-
- EnterLocale $locale oldLocale
-
- set status [catch {
-
- # Map away the locale-dependent composite format groups
-
- set scanner [ParseClockScanFormat $format $locale]
- $scanner $string $base $timezone
-
- } result opts]
-
- # Restore the locale
-
- if { [info exists oldLocale] } {
- mclocale $oldLocale
- }
-
- if { $status == 1 } {
- if { [lindex [dict get $opts -errorcode] 0] eq {clock} } {
- return -code error $result
- } else {
- return -options $opts $result
- }
+ # get locales list for given locale (de_de -> {de_de de {}})
+ variable mcLocales
+ if {[dict exists $mcLocales $loc]} {
+ set loclist [dict get $mcLocales $loc]
} else {
- return $result
- }
-
+ # save current locale:
+ set prevloc [mclocale]
+ # lazy load catalog on demand (set it will load the catalog)
+ mcpackagelocale set $loc
+ set loclist [msgcat::mcutil::getpreferences $loc]
+ dict set $mcLocales $loc $loclist
+ # restore:
+ if {$prevloc ne $loc} {
+ mcpackagelocale set $prevloc
+ }
+ }
+ # get whole catalog:
+ mcMerge $loclist
}
-#----------------------------------------------------------------------
+# mcMerge --
#
-# FreeScan --
+# Merge message catalog dictionaries to one dictionary.
#
-# Scans a time in free format
-#
-# Parameters:
-# string - String containing the time to scan
-# base - Base time, expressed in seconds from the Epoch
-# timezone - Default time zone in which the time will be expressed
-# locale - (Unused) Name of the locale where the time will be scanned.
+# Arguments:
+# locales List of locales to merge.
#
# Results:
-# Returns the date and time extracted from the string in seconds
-# from the epoch
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::FreeScan { string base timezone locale } {
-
- variable TZData
-
- # Get the data for time changes in the given zone
-
- if {[catch {SetupTimeZone $timezone} retval opts]} {
- dict unset opts -errorinfo
- return -options $opts $retval
- }
-
- # Extract year, month and day from the base time for the
- # parser to use as defaults
-
- set date [GetDateFields \
- $base \
- $TZData($timezone) \
- 2361222]
- dict set date secondOfDay [expr { [dict get $date localSeconds]
- % 86400 }]
-
- # Parse the date. The parser will return a list comprising
- # date, time, time zone, relative month/day/seconds, relative
- # weekday, ordinal month.
-
- set status [catch {
- Oldscan $string \
- [dict get $date year] \
- [dict get $date month] \
- [dict get $date dayOfMonth]
- } result]
- if { $status != 0 } {
- return -code error "unable to convert date-time string \"$string\": $result"
- }
-
- lassign $result parseDate parseTime parseZone parseRel \
- parseWeekday parseOrdinalMonth
-
- # If the caller supplied a date in the string, update the 'date' dict
- # with the value. If the caller didn't specify a time with the date,
- # default to midnight.
-
- if { [llength $parseDate] > 0 } {
- lassign $parseDate y m d
- if { $y < 100 } {
- if { $y >= 39 } {
- incr y 1900
- } else {
- incr y 2000
- }
- }
- dict set date era CE
- dict set date year $y
- dict set date month $m
- dict set date dayOfMonth $d
- if { $parseTime eq {} } {
- set parseTime 0
- }
- }
-
- # If the caller supplied a time zone in the string, it comes back
- # as a two-element list; the first element is the number of minutes
- # east of Greenwich, and the second is a Daylight Saving Time
- # indicator ( 1 == yes, 0 == no, -1 == unknown ). We make it into
- # a time zone indicator of +-hhmm.
-
- if { [llength $parseZone] > 0 } {
- lassign $parseZone minEast dstFlag
- set timezone [FormatNumericTimeZone \
- [expr { 60 * $minEast + 3600 * $dstFlag }]]
- SetupTimeZone $timezone
- }
- dict set date tzName $timezone
-
- # Assemble date, time, zone into seconds-from-epoch
-
- set date [GetJulianDayFromEraYearMonthDay $date[set date {}] 2361222]
- if { $parseTime ne {} } {
- dict set date secondOfDay $parseTime
- } elseif { [llength $parseWeekday] != 0
- || [llength $parseOrdinalMonth] != 0
- || ( [llength $parseRel] != 0
- && ( [lindex $parseRel 0] != 0
- || [lindex $parseRel 1] != 0 ) ) } {
- dict set date secondOfDay 0
- }
-
- dict set date localSeconds \
- [expr { -210866803200
- + ( 86400 * wide([dict get $date julianDay]) )
- + [dict get $date secondOfDay] }]
- dict set date tzName $timezone
- set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) 2361222]
- set seconds [dict get $date seconds]
-
- # Do relative times
-
- if { [llength $parseRel] > 0 } {
- lassign $parseRel relMonth relDay relSecond
- set seconds [add $seconds \
- $relMonth months $relDay days $relSecond seconds \
- -timezone $timezone -locale $locale]
- }
-
- # Do relative weekday
-
- if { [llength $parseWeekday] > 0 } {
-
- lassign $parseWeekday dayOrdinal dayOfWeek
- set date2 [GetDateFields $seconds $TZData($timezone) 2361222]
- dict set date2 era CE
- set jdwkday [WeekdayOnOrBefore $dayOfWeek \
- [expr { [dict get $date2 julianDay]
- + 6 }]]
- incr jdwkday [expr { 7 * $dayOrdinal }]
- if { $dayOrdinal > 0 } {
- incr jdwkday -7
- }
- dict set date2 secondOfDay \
- [expr { [dict get $date2 localSeconds] % 86400 }]
- dict set date2 julianDay $jdwkday
- dict set date2 localSeconds \
- [expr { -210866803200
- + ( 86400 * wide([dict get $date2 julianDay]) )
- + [dict get $date secondOfDay] }]
- dict set date2 tzName $timezone
- set date2 [ConvertLocalToUTC $date2[set date2 {}] $TZData($timezone) \
- 2361222]
- set seconds [dict get $date2 seconds]
-
- }
-
- # Do relative month
-
- if { [llength $parseOrdinalMonth] > 0 } {
-
- lassign $parseOrdinalMonth monthOrdinal monthNumber
- if { $monthOrdinal > 0 } {
- set monthDiff [expr { $monthNumber - [dict get $date month] }]
- if { $monthDiff <= 0 } {
- incr monthDiff 12
+# Returns the (weak pointer) to merged dictionary of message catalog.
+#
+proc ::tcl::clock::mcMerge {locales} {
+ variable mcMergedCat
+ if {[dict exists $mcMergedCat [set loc [lindex $locales 0]]]} {
+ return [dict get $mcMergedCat $loc]
+ }
+ # package msgcat currently does not provide possibility to get whole catalog:
+ upvar ::msgcat::Msgs Msgs
+ set ns ::tcl::clock
+ # Merge sequential locales (in reverse order, e. g. {} -> en -> en_en):
+ if {[llength $locales] > 1} {
+ set mrgcat [mcMerge [lrange $locales 1 end]]
+ if {[dict exists $Msgs $ns $loc]} {
+ set mrgcat [dict merge $mrgcat [dict get $Msgs $ns $loc]]
+ dict set mrgcat L $loc
+ # remove any previously localized formats (merged from parent
+ # locale and possibly cached in parent-mc by ClockLocalizeFormat),
+ # because they may depend on values which may vary in derivate:
+ foreach k [dict keys $mrgcat] {
+ if {[string match FMT_* $k]} { dict unset mrgcat $k }
}
- incr monthOrdinal -1
} else {
- set monthDiff [expr { [dict get $date month] - $monthNumber }]
- if { $monthDiff >= 0 } {
- incr monthDiff -12
- }
- incr monthOrdinal
+ # be sure a duplicate is created, don't overwrite {} (common) locale:
+ set mrgcat [dict merge $mrgcat [dict create L $loc]]
}
- set seconds [add $seconds $monthOrdinal years $monthDiff months \
- -timezone $timezone -locale $locale]
-
- }
-
- return $seconds
-}
-
-
-#----------------------------------------------------------------------
-#
-# ParseClockScanFormat --
-#
-# Parses a format string given to [clock scan -format]
-#
-# Parameters:
-# formatString - The format being parsed
-# locale - The current locale
-#
-# Results:
-# Constructs and returns a procedure that accepts the
-# string being scanned, the base time, and the time zone.
-# The procedure will either return the scanned time or
-# else throw an error that should be rethrown to the caller
-# of [clock scan]
-#
-# Side effects:
-# The given procedure is defined in the ::tcl::clock
-# namespace. Scan procedures are not deleted once installed.
-#
-# Why do we parse dates by defining a procedure to parse them?
-# The reason is that by doing so, we have one convenient place to
-# cache all the information: the regular expressions that match the
-# patterns (which will be compiled), the code that assembles the
-# date information, everything lands in one place. In this way,
-# when a given format is reused at run time, all the information
-# of how to apply it is available in a single place.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::ParseClockScanFormat {formatString locale} {
-
- # Check whether the format has been parsed previously, and return
- # the existing recognizer if it has.
-
- set procName scanproc'$formatString'$locale
- set procName [namespace current]::[string map {: {\:} \\ {\\}} $procName]
- if { [namespace which $procName] != {} } {
- return $procName
- }
-
- variable DateParseActions
- variable TimeParseActions
-
- # Localize the %x, %X, etc. groups
-
- set formatString [LocalizeFormat $locale $formatString]
-
- # Condense whitespace
-
- regsub -all {[[:space:]]+} $formatString { } formatString
-
- # Walk through the groups of the format string. In this loop, we
- # accumulate:
- # - a regular expression that matches the string,
- # - the count of capturing brackets in the regexp
- # - a set of code that post-processes the fields captured by the regexp,
- # - a dictionary whose keys are the names of fields that are present
- # in the format string.
-
- set re {^[[:space:]]*}
- set captureCount 0
- set postcode {}
- set fieldSet [dict create]
- set fieldCount 0
- set postSep {}
- set state {}
-
- foreach c [split $formatString {}] {
- switch -exact -- $state {
- {} {
- if { $c eq "%" } {
- set state %
- } elseif { $c eq " " } {
- append re {[[:space:]]+}
- } else {
- if { ! [string is alnum $c] } {
- append re \\
- }
- append re $c
- }
- }
- % {
- set state {}
- switch -exact -- $c {
- % {
- append re %
- }
- { } {
- append re "\[\[:space:\]\]*"
- }
- a - A { # Day of week, in words
- set l {}
- foreach \
- i {7 1 2 3 4 5 6} \
- abr [mc DAYS_OF_WEEK_ABBREV] \
- full [mc DAYS_OF_WEEK_FULL] {
- dict set l [string tolower $abr] $i
- dict set l [string tolower $full] $i
- incr i
- }
- lassign [UniquePrefixRegexp $l] regex lookup
- append re ( $regex )
- dict set fieldSet dayOfWeek [incr fieldCount]
- append postcode "dict set date dayOfWeek \[" \
- "dict get " [list $lookup] " " \
- \[ {string tolower $field} [incr captureCount] \] \
- "\]\n"
- }
- b - B - h { # Name of month
- set i 0
- set l {}
- foreach \
- abr [mc MONTHS_ABBREV] \
- full [mc MONTHS_FULL] {
- incr i
- dict set l [string tolower $abr] $i
- dict set l [string tolower $full] $i
- }
- lassign [UniquePrefixRegexp $l] regex lookup
- append re ( $regex )
- dict set fieldSet month [incr fieldCount]
- append postcode "dict set date month \[" \
- "dict get " [list $lookup] \
- " " \[ {string tolower $field} \
- [incr captureCount] \] \
- "\]\n"
- }
- C { # Gregorian century
- append re \\s*(\\d\\d?)
- dict set fieldSet century [incr fieldCount]
- append postcode "dict set date century \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- d - e { # Day of month
- append re \\s*(\\d\\d?)
- dict set fieldSet dayOfMonth [incr fieldCount]
- append postcode "dict set date dayOfMonth \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- E { # Prefix for locale-specific codes
- set state %E
- }
- g { # ISO8601 2-digit year
- append re \\s*(\\d\\d)
- dict set fieldSet iso8601YearOfCentury \
- [incr fieldCount]
- append postcode \
- "dict set date iso8601YearOfCentury \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- G { # ISO8601 4-digit year
- append re \\s*(\\d\\d)(\\d\\d)
- dict set fieldSet iso8601Century [incr fieldCount]
- dict set fieldSet iso8601YearOfCentury \
- [incr fieldCount]
- append postcode \
- "dict set date iso8601Century \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n" \
- "dict set date iso8601YearOfCentury \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- H - k { # Hour of day
- append re \\s*(\\d\\d?)
- dict set fieldSet hour [incr fieldCount]
- append postcode "dict set date hour \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- I - l { # Hour, AM/PM
- append re \\s*(\\d\\d?)
- dict set fieldSet hourAMPM [incr fieldCount]
- append postcode "dict set date hourAMPM \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- j { # Day of year
- append re \\s*(\\d\\d?\\d?)
- dict set fieldSet dayOfYear [incr fieldCount]
- append postcode "dict set date dayOfYear \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- J { # Julian Day Number
- append re \\s*(\\d+)
- dict set fieldSet julianDay [incr fieldCount]
- append postcode "dict set date julianDay \[" \
- "::scan \$field" [incr captureCount] " %ld" \
- "\]\n"
- }
- m - N { # Month number
- append re \\s*(\\d\\d?)
- dict set fieldSet month [incr fieldCount]
- append postcode "dict set date month \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- M { # Minute
- append re \\s*(\\d\\d?)
- dict set fieldSet minute [incr fieldCount]
- append postcode "dict set date minute \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- n { # Literal newline
- append re \\n
- }
- O { # Prefix for locale numerics
- set state %O
- }
- p - P { # AM/PM indicator
- set l [list [string tolower [mc AM]] 0 \
- [string tolower [mc PM]] 1]
- lassign [UniquePrefixRegexp $l] regex lookup
- append re ( $regex )
- dict set fieldSet amPmIndicator [incr fieldCount]
- append postcode "dict set date amPmIndicator \[" \
- "dict get " [list $lookup] " \[string tolower " \
- "\$field" \
- [incr captureCount] \
- "\]\]\n"
- }
- Q { # Hi, Jeff!
- append re {Stardate\s+([-+]?\d+)(\d\d\d)[.](\d)}
- incr captureCount
- dict set fieldSet seconds [incr fieldCount]
- append postcode {dict set date seconds } \[ \
- {ParseStarDate $field} [incr captureCount] \
- { $field} [incr captureCount] \
- { $field} [incr captureCount] \
- \] \n
- }
- s { # Seconds from Posix Epoch
- # This next case is insanely difficult,
- # because it's problematic to determine
- # whether the field is actually within
- # the range of a wide integer.
- append re {\s*([-+]?\d+)}
- dict set fieldSet seconds [incr fieldCount]
- append postcode {dict set date seconds } \[ \
- {ScanWide $field} [incr captureCount] \] \n
- }
- S { # Second
- append re \\s*(\\d\\d?)
- dict set fieldSet second [incr fieldCount]
- append postcode "dict set date second \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- t { # Literal tab character
- append re \\t
- }
- u - w { # Day number within week, 0 or 7 == Sun
- # 1=Mon, 6=Sat
- append re \\s*(\\d)
- dict set fieldSet dayOfWeek [incr fieldCount]
- append postcode {::scan $field} [incr captureCount] \
- { %d dow} \n \
- {
- if { $dow == 0 } {
- set dow 7
- } elseif { $dow > 7 } {
- return -code error \
- -errorcode [list CLOCK badDayOfWeek] \
- "day of week is greater than 7"
- }
- dict set date dayOfWeek $dow
- }
- }
- U { # Week of year. The
- # first Sunday of the year is the
- # first day of week 01. No scan rule
- # uses this group.
- append re \\s*\\d\\d?
- }
- V { # Week of ISO8601 year
-
- append re \\s*(\\d\\d?)
- dict set fieldSet iso8601Week [incr fieldCount]
- append postcode "dict set date iso8601Week \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- W { # Week of the year (00-53). The first
- # Monday of the year is the first day
- # of week 01. No scan rule uses this
- # group.
- append re \\s*\\d\\d?
- }
- y { # Two-digit Gregorian year
- append re \\s*(\\d\\d?)
- dict set fieldSet yearOfCentury [incr fieldCount]
- append postcode "dict set date yearOfCentury \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- Y { # 4-digit Gregorian year
- append re \\s*(\\d\\d)(\\d\\d)
- dict set fieldSet century [incr fieldCount]
- dict set fieldSet yearOfCentury [incr fieldCount]
- append postcode \
- "dict set date century \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n" \
- "dict set date yearOfCentury \[" \
- "::scan \$field" [incr captureCount] " %d" \
- "\]\n"
- }
- z - Z { # Time zone name
- append re {(?:([-+]\d\d(?::?\d\d(?::?\d\d)?)?)|([[:alnum:]]{1,4}))}
- dict set fieldSet tzName [incr fieldCount]
- append postcode \
- {if } \{ { $field} [incr captureCount] \
- { ne "" } \} { } \{ \n \
- {dict set date tzName $field} \
- $captureCount \n \
- \} { else } \{ \n \
- {dict set date tzName } \[ \
- {ConvertLegacyTimeZone $field} \
- [incr captureCount] \] \n \
- \} \n \
- }
- % { # Literal percent character
- append re %
- }
- default {
- append re %
- if { ! [string is alnum $c] } {
- append re \\
- }
- append re $c
- }
- }
- }
- %E {
- switch -exact -- $c {
- C { # Locale-dependent era
- set d {}
- foreach triple [mc LOCALE_ERAS] {
- lassign $triple t symbol year
- dict set d [string tolower $symbol] $year
- }
- lassign [UniquePrefixRegexp $d] regex lookup
- append re (?: $regex )
- }
- E {
- set l {}
- dict set l [string tolower [mc BCE]] BCE
- dict set l [string tolower [mc CE]] CE
- dict set l b.c.e. BCE
- dict set l c.e. CE
- dict set l b.c. BCE
- dict set l a.d. CE
- lassign [UniquePrefixRegexp $l] regex lookup
- append re ( $regex )
- dict set fieldSet era [incr fieldCount]
- append postcode "dict set date era \["\
- "dict get " [list $lookup] \
- { } \[ {string tolower $field} \
- [incr captureCount] \] \
- "\]\n"
- }
- y { # Locale-dependent year of the era
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- incr captureCount
- }
- default {
- append re %E
- if { ! [string is alnum $c] } {
- append re \\
- }
- append re $c
- }
- }
- set state {}
- }
- %O {
- switch -exact -- $c {
- d - e {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet dayOfMonth [incr fieldCount]
- append postcode "dict set date dayOfMonth \[" \
- "dict get " [list $lookup] " \$field" \
- [incr captureCount] \
- "\]\n"
- }
- H - k {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet hour [incr fieldCount]
- append postcode "dict set date hour \[" \
- "dict get " [list $lookup] " \$field" \
- [incr captureCount] \
- "\]\n"
- }
- I - l {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet hourAMPM [incr fieldCount]
- append postcode "dict set date hourAMPM \[" \
- "dict get " [list $lookup] " \$field" \
- [incr captureCount] \
- "\]\n"
- }
- m {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet month [incr fieldCount]
- append postcode "dict set date month \[" \
- "dict get " [list $lookup] " \$field" \
- [incr captureCount] \
- "\]\n"
- }
- M {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet minute [incr fieldCount]
- append postcode "dict set date minute \[" \
- "dict get " [list $lookup] " \$field" \
- [incr captureCount] \
- "\]\n"
- }
- S {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet second [incr fieldCount]
- append postcode "dict set date second \[" \
- "dict get " [list $lookup] " \$field" \
- [incr captureCount] \
- "\]\n"
- }
- u - w {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet dayOfWeek [incr fieldCount]
- append postcode "set dow \[dict get " [list $lookup] \
- { $field} [incr captureCount] \] \n \
- {
- if { $dow == 0 } {
- set dow 7
- } elseif { $dow > 7 } {
- return -code error \
- -errorcode [list CLOCK badDayOfWeek] \
- "day of week is greater than 7"
- }
- dict set date dayOfWeek $dow
- }
- }
- y {
- lassign [LocaleNumeralMatcher $locale] regex lookup
- append re $regex
- dict set fieldSet yearOfCentury [incr fieldCount]
- append postcode {dict set date yearOfCentury } \[ \
- {dict get } [list $lookup] { $field} \
- [incr captureCount] \] \n
- }
- default {
- append re %O
- if { ! [string is alnum $c] } {
- append re \\
- }
- append re $c
- }
- }
- set state {}
- }
- }
- }
-
- # Clean up any unfinished format groups
-
- append re $state \\s*\$
-
- # Build the procedure
-
- set procBody {}
- append procBody "variable ::tcl::clock::TZData" \n
- append procBody "if \{ !\[ regexp -nocase [list $re] \$string ->"
- for { set i 1 } { $i <= $captureCount } { incr i } {
- append procBody " " field $i
- }
- append procBody "\] \} \{" \n
- append procBody {
- return -code error -errorcode [list CLOCK badInputString] \
- {input string does not match supplied format}
- }
- append procBody \}\n
- append procBody "set date \[dict create\]" \n
- append procBody {dict set date tzName $timeZone} \n
- append procBody $postcode
- append procBody [list set changeover [mc GREGORIAN_CHANGE_DATE]] \n
-
- # Get time zone if needed
-
- if { ![dict exists $fieldSet seconds]
- && ![dict exists $fieldSet starDate] } {
- if { [dict exists $fieldSet tzName] } {
- append procBody {
- set timeZone [dict get $date tzName]
- }
- }
- append procBody {
- ::tcl::clock::SetupTimeZone $timeZone
- }
- }
-
- # Add code that gets Julian Day Number from the fields.
-
- append procBody [MakeParseCodeFromFields $fieldSet $DateParseActions]
-
- # Get time of day
-
- append procBody [MakeParseCodeFromFields $fieldSet $TimeParseActions]
-
- # Assemble seconds, and convert local nominal time to UTC.
-
- if { ![dict exists $fieldSet seconds]
- && ![dict exists $fieldSet starDate] } {
- append procBody {
- if { [dict get $date julianDay] > 5373484 } {
- return -code error -errorcode [list CLOCK dateTooLarge] \
- "requested date too large to represent"
- }
- dict set date localSeconds \
- [expr { -210866803200
- + ( 86400 * wide([dict get $date julianDay]) )
- + [dict get $date secondOfDay] }]
- }
- append procBody {
- set date [::tcl::clock::ConvertLocalToUTC $date[set date {}] \
- $TZData($timeZone) \
- $changeover]
- }
- }
-
- # Return result
-
- append procBody {return [dict get $date seconds]} \n
-
- proc $procName { string baseTime timeZone } $procBody
-
- # puts [list proc $procName [list string baseTime timeZone] $procBody]
-
- return $procName
-}
-
-#----------------------------------------------------------------------
-#
-# LocaleNumeralMatcher --
-#
-# Composes a regexp that captures the numerals in the given
-# locale, and a dictionary to map them to conventional numerals.
-#
-# Parameters:
-# locale - Name of the current locale
-#
-# Results:
-# Returns a two-element list comprising the regexp and the
-# dictionary.
-#
-# Side effects:
-# Caches the result.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::LocaleNumeralMatcher {l} {
-
- variable LocaleNumeralCache
-
- if { ![dict exists $LocaleNumeralCache $l] } {
- set d {}
- set i 0
- set sep \(
- foreach n [mc LOCALE_NUMERALS] {
- dict set d $n $i
- regsub -all {[^[:alnum:]]} $n \\\\& subex
- append re $sep $subex
- set sep |
- incr i
+ } else {
+ if {[dict exists $Msgs $ns $loc]} {
+ set mrgcat [dict get $Msgs $ns $loc]
+ dict set mrgcat L $loc
+ } else {
+ # be sure a duplicate is created, don't overwrite {} (common) locale:
+ set mrgcat [dict create L $loc]
}
- append re \)
- dict set LocaleNumeralCache $l [list $re $d]
}
- return [dict get $LocaleNumeralCache $l]
+ dict set mcMergedCat $loc $mrgcat
+ # return smart reference (shared dict as object with exact one ref-counter)
+ return $mrgcat
}
-
-
#----------------------------------------------------------------------
#
-# UniquePrefixRegexp --
+# GetSystemLocale --
#
-# Composes a regexp that performs unique-prefix matching. The
-# RE matches one of a supplied set of strings, or any unique
-# prefix thereof.
+# Determines the system locale, which corresponds to "system"
+# keyword for locale parameter of 'clock' command.
#
# Parameters:
-# data - List of alternating match-strings and values.
-# Match-strings with distinct values are considered
-# distinct.
-#
-# Results:
-# Returns a two-element list. The first is a regexp that
-# matches any unique prefix of any of the strings. The second
-# is a dictionary whose keys are match values from the regexp
-# and whose values are the corresponding values from 'data'.
-#
-# Side effects:
# None.
#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::UniquePrefixRegexp { data } {
-
- # The 'successors' dictionary will contain, for each string that
- # is a prefix of any key, all characters that may follow that
- # prefix. The 'prefixMapping' dictionary will have keys that
- # are prefixes of keys and values that correspond to the keys.
-
- set prefixMapping [dict create]
- set successors [dict create {} {}]
-
- # Walk the key-value pairs
-
- foreach { key value } $data {
-
- # Construct all prefixes of the key;
-
- set prefix {}
- foreach char [split $key {}] {
- set oldPrefix $prefix
- dict set successors $oldPrefix $char {}
- append prefix $char
-
- # Put the prefixes in the 'prefixMapping' and 'successors'
- # dictionaries
-
- dict lappend prefixMapping $prefix $value
- if { ![dict exists $successors $prefix] } {
- dict set successors $prefix {}
- }
- }
- }
-
- # Identify those prefixes that designate unique values, and
- # those that are the full keys
-
- set uniquePrefixMapping {}
- dict for { key valueList } $prefixMapping {
- if { [llength $valueList] == 1 } {
- dict set uniquePrefixMapping $key [lindex $valueList 0]
- }
- }
- foreach { key value } $data {
- dict set uniquePrefixMapping $key $value
- }
-
- # Construct the re.
-
- return [list \
- [MakeUniquePrefixRegexp $successors $uniquePrefixMapping {}] \
- $uniquePrefixMapping]
-}
-
-#----------------------------------------------------------------------
-#
-# MakeUniquePrefixRegexp --
-#
-# Service procedure for 'UniquePrefixRegexp' that constructs
-# a regular expresison that matches the unique prefixes.
-#
-# Parameters:
-# successors - Dictionary whose keys are all prefixes
-# of keys passed to 'UniquePrefixRegexp' and whose
-# values are dictionaries whose keys are the characters
-# that may follow those prefixes.
-# uniquePrefixMapping - Dictionary whose keys are the unique
-# prefixes and whose values are not examined.
-# prefixString - Current prefix being processed.
-#
# Results:
-# Returns a constructed regular expression that matches the set
-# of unique prefixes beginning with the 'prefixString'.
+# Returns the system locale.
#
# Side effects:
# None.
#
#----------------------------------------------------------------------
-proc ::tcl::clock::MakeUniquePrefixRegexp { successors
- uniquePrefixMapping
- prefixString } {
+proc ::tcl::clock::GetSystemLocale {} {
+ if { $::tcl_platform(platform) ne {windows} } {
+ # On a non-windows platform, the 'system' locale is the same as
+ # the 'current' locale
- # Get the characters that may follow the current prefix string
-
- set schars [lsort -ascii [dict keys [dict get $successors $prefixString]]]
- if { [llength $schars] == 0 } {
- return {}
+ return [mclocale]
}
- # If there is more than one successor character, or if the current
- # prefix is a unique prefix, surround the generated re with non-capturing
- # parentheses.
+ # On a windows platform, the 'system' locale is adapted from the
+ # 'current' locale by applying the date and time formats from the
+ # Control Panel. First, load the 'current' locale if it's not yet
+ # loaded
- set re {}
- if { [dict exists $uniquePrefixMapping $prefixString]
- || [llength $schars] > 1 } {
- append re "(?:"
- }
-
- # Generate a regexp that matches the successors.
-
- set sep ""
- foreach { c } $schars {
- set nextPrefix $prefixString$c
- regsub -all {[^[:alnum:]]} $c \\\\& rechar
- append re $sep $rechar \
- [MakeUniquePrefixRegexp \
- $successors $uniquePrefixMapping $nextPrefix]
- set sep |
- }
+ mcpackagelocale set [mclocale]
- # If the current prefix is a unique prefix, make all following text
- # optional. Otherwise, if there is more than one successor character,
- # close the non-capturing parentheses.
+ # Make a new locale string for the system locale, and get the
+ # Control Panel information
- if { [dict exists $uniquePrefixMapping $prefixString] } {
- append re ")?"
- } elseif { [llength $schars] > 1 } {
- append re ")"
+ set locale [mclocale]_windows
+ if { ! [mcpackagelocale present $locale] } {
+ LoadWindowsDateTimeFormats $locale
}
- return $re
+ return $locale
}
#----------------------------------------------------------------------
#
-# MakeParseCodeFromFields --
+# EnterLocale --
#
-# Composes Tcl code to extract the Julian Day Number from a
-# dictionary containing date fields.
+# Switch [mclocale] to a given locale if necessary
#
# Parameters:
-# dateFields -- Dictionary whose keys are fields of the date,
-# and whose values are the rightmost positions
-# at which those fields appear.
-# parseActions -- List of triples: field set, priority, and
-# code to emit. Smaller priorities are better, and
-# the list must be in ascending order by priority
+# locale -- Desired locale
#
# Results:
-# Returns a burst of code that extracts the day number from the
-# given date.
+# Returns the locale that was previously current.
#
# Side effects:
-# None.
+# Does [mclocale]. If necessary, loades the designated locale's files.
#
#----------------------------------------------------------------------
-proc ::tcl::clock::MakeParseCodeFromFields { dateFields parseActions } {
-
- set currPrio 999
- set currFieldPos [list]
- set currCodeBurst {
- error "in ::tcl::clock::MakeParseCodeFromFields: can't happen"
- }
-
- foreach { fieldSet prio parseAction } $parseActions {
-
- # If we've found an answer that's better than any that follow,
- # quit now.
-
- if { $prio > $currPrio } {
- break
- }
-
- # Accumulate the field positions that are used in the current
- # field grouping.
-
- set fieldPos [list]
- set ok true
- foreach field $fieldSet {
- if { ! [dict exists $dateFields $field] } {
- set ok 0
- break
- }
- lappend fieldPos [dict get $dateFields $field]
- }
-
- # Quit if we don't have a complete set of fields
- if { !$ok } {
- continue
- }
-
- # Determine whether the current answer is better than the last.
-
- set fPos [lsort -integer -decreasing $fieldPos]
-
- if { $prio == $currPrio } {
- foreach currPos $currFieldPos newPos $fPos {
- if { ![string is integer $newPos]
- || ![string is integer $currPos]
- || $newPos > $currPos } {
- break
- }
- if { $newPos < $currPos } {
- set ok 0
- break
- }
- }
- }
- if { !$ok } {
- continue
- }
-
- # Remember the best possibility for extracting date information
-
- set currPrio $prio
- set currFieldPos $fPos
- set currCodeBurst $parseAction
-
+proc ::tcl::clock::EnterLocale { locale } {
+ switch -- $locale system {
+ set locale [GetSystemLocale]
+ } current {
+ set locale [mclocale]
}
-
- return $currCodeBurst
-
+ # Select the locale, eventually load it
+ mcpackagelocale set $locale
+ return $locale
}
#----------------------------------------------------------------------
#
-# EnterLocale --
-#
-# Switch [mclocale] to a given locale if necessary
-#
-# Parameters:
-# locale -- Desired locale
-# oldLocaleVar -- Name of a variable in caller's scope that
-# tracks the previous locale name.
+# _hasRegistry --
#
-# Results:
-# Returns the locale that was previously current.
-#
-# Side effects:
-# Does [mclocale]. If necessary, uses [mcload] to load the
-# designated locale's files, and tracks that it has done so
-# in the 'McLoaded' variable.
+# Helper that checks whether registry module is available (Windows only)
+# and loads it on demand.
#
#----------------------------------------------------------------------
-
-proc ::tcl::clock::EnterLocale { locale oldLocaleVar } {
-
- upvar 1 $oldLocaleVar oldLocale
-
- variable MsgDir
- variable McLoaded
-
- set oldLocale [mclocale]
- if { $locale eq {system} } {
-
- if { $::tcl_platform(platform) ne {windows} } {
-
- # On a non-windows platform, the 'system' locale is
- # the same as the 'current' locale
-
- set locale current
- } else {
-
- # On a windows platform, the 'system' locale is
- # adapted from the 'current' locale by applying the
- # date and time formats from the Control Panel.
- # First, load the 'current' locale if it's not yet loaded
-
- if {![dict exists $McLoaded $oldLocale] } {
- mcload $MsgDir
- dict set McLoaded $oldLocale {}
- }
-
- # Make a new locale string for the system locale, and
- # get the Control Panel information
-
- set locale ${oldLocale}_windows
- if { ![dict exists $McLoaded $locale] } {
- LoadWindowsDateTimeFormats $locale
- dict set McLoaded $locale {}
- }
+proc ::tcl::clock::_hasRegistry {} {
+ set res 0
+ if { $::tcl_platform(platform) eq {windows} } {
+ if { [catch { package require registry 1.3 }] } {
+ # try to load registry directly from root (if uninstalled / development env):
+ if {[regexp {[/\\]library$} [info library]]} {catch {
+ load [lindex \
+ [glob -tails -directory [file dirname [info nameofexecutable]] \
+ tcl9registry*[expr {[::tcl::pkgconfig get debug] ? {g} : {}}].dll] 0 \
+ ] Registry
+ }}
+ }
+ if { [namespace which -command ::registry] ne "" } {
+ set res 1
}
}
- if { $locale eq {current}} {
- set locale $oldLocale
- unset oldLocale
- } elseif { $locale eq $oldLocale } {
- unset oldLocale
- } else {
- mclocale $locale
- }
- if { ![dict exists $McLoaded $locale] } {
- mcload $MsgDir
- dict set McLoaded $locale {}
- }
-
+ proc ::tcl::clock::_hasRegistry {} [list return $res]
+ return $res
}
#----------------------------------------------------------------------
#
# LoadWindowsDateTimeFormats --
#
-# Load the date/time formats from the Control Panel in Windows
-# and convert them so that they're usable by Tcl.
+# Load the date/time formats from the Control Panel in Windows and
+# convert them so that they're usable by Tcl.
#
# Parameters:
# locale - Name of the locale in whose message catalog
@@ -2420,18 +711,15 @@ proc ::tcl::clock::EnterLocale { locale oldLocaleVar } {
# Side effects:
# Updates the given message catalog with the locale strings.
#
-# Presumes that on entry, [mclocale] is set to the current locale,
-# so that default strings can be obtained if the Registry query
-# fails.
+# Presumes that on entry, [mclocale] is set to the current locale, so that
+# default strings can be obtained if the Registry query fails.
#
#----------------------------------------------------------------------
proc ::tcl::clock::LoadWindowsDateTimeFormats { locale } {
-
# Bail out if we can't find the Registry
- variable NoRegistry
- if { [info exists NoRegistry] } return
+ if { ![_hasRegistry] } return
if { ![catch {
registry get "HKEY_CURRENT_USER\\Control Panel\\International" \
@@ -2451,8 +739,8 @@ proc ::tcl::clock::LoadWindowsDateTimeFormats { locale } {
M %N
yyyy %Y
yy %y
- y %y
- gg {}
+ y %y
+ gg {}
} $unquoted]
if { $quoted eq {} } {
set quote '
@@ -2481,8 +769,8 @@ proc ::tcl::clock::LoadWindowsDateTimeFormats { locale } {
M %N
yyyy %Y
yy %y
- y %y
- gg {}
+ y %y
+ gg {}
} $unquoted]
if { $quoted eq {} } {
set quote '
@@ -2542,510 +830,63 @@ proc ::tcl::clock::LoadWindowsDateTimeFormats { locale } {
# locale -- Current [mclocale] locale, supplied to avoid
# an extra call
# format -- Format supplied to [clock scan] or [clock format]
+# mcd -- Message catalog dictionary for current locale (read-only,
+# don't store it to avoid shared references).
#
# Results:
-# Returns the string with locale-dependent composite format
-# groups substituted out.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::LocalizeFormat { locale format } {
-
- variable McLoaded
-
- if { [dict exists $McLoaded $locale FORMAT $format] } {
- return [dict get $McLoaded $locale FORMAT $format]
- }
- set inFormat $format
-
- # Handle locale-dependent format groups by mapping them out of the format
- # string. Note that the order of the [string map] operations is
- # significant because later formats can refer to later ones; for example
- # %c can refer to %X, which in turn can refer to %T.
-
- set list {
- %% %%
- %D %m/%d/%Y
- %+ {%a %b %e %H:%M:%S %Z %Y}
- }
- lappend list %EY [string map $list [mc LOCALE_YEAR_FORMAT]]
- lappend list %T [string map $list [mc TIME_FORMAT_24_SECS]]
- lappend list %R [string map $list [mc TIME_FORMAT_24]]
- lappend list %r [string map $list [mc TIME_FORMAT_12]]
- lappend list %X [string map $list [mc TIME_FORMAT]]
- lappend list %EX [string map $list [mc LOCALE_TIME_FORMAT]]
- lappend list %x [string map $list [mc DATE_FORMAT]]
- lappend list %Ex [string map $list [mc LOCALE_DATE_FORMAT]]
- lappend list %c [string map $list [mc DATE_TIME_FORMAT]]
- lappend list %Ec [string map $list [mc LOCALE_DATE_TIME_FORMAT]]
- set format [string map $list $format]
-
- dict set McLoaded $locale FORMAT $inFormat $format
- return $format
-}
-
-#----------------------------------------------------------------------
-#
-# FormatNumericTimeZone --
-#
-# Formats a time zone as +hhmmss
-#
-# Parameters:
-# z - Time zone in seconds east of Greenwich
-#
-# Results:
-# Returns the time zone formatted in a numeric form
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::FormatNumericTimeZone { z } {
-
- if { $z < 0 } {
- set z [expr { - $z }]
- set retval -
- } else {
- set retval +
- }
- append retval [::format %02d [expr { $z / 3600 }]]
- set z [expr { $z % 3600 }]
- append retval [::format %02d [expr { $z / 60 }]]
- set z [expr { $z % 60 }]
- if { $z != 0 } {
- append retval [::format %02d $z]
- }
- return $retval
-
-}
-
-#----------------------------------------------------------------------
-#
-# FormatStarDate --
-#
-# Formats a date as a StarDate.
-#
-# Parameters:
-# date - Dictionary containing 'year', 'dayOfYear', and
-# 'localSeconds' fields.
-#
-# Results:
-# Returns the given date formatted as a StarDate.
+# Returns the string with locale-dependent composite format groups
+# substituted out.
#
# Side effects:
# None.
#
-# Jeff Hobbs put this in to support an atrocious pun about Tcl being
-# "Enterprise ready." Now we're stuck with it.
-#
#----------------------------------------------------------------------
-proc ::tcl::clock::FormatStarDate { date } {
-
- variable Roddenberry
+proc ::tcl::clock::LocalizeFormat { locale format mcd } {
+ variable LocFmtMap
- # Get day of year, zero based
-
- set doy [expr { [dict get $date dayOfYear] - 1 }]
-
- # Determine whether the year is a leap year
-
- set lp [IsGregorianLeapYear $date]
-
- # Convert day of year to a fractional year
-
- if { $lp } {
- set fractYear [expr { 1000 * $doy / 366 }]
+ # get map list cached or build it:
+ if {[dict exists $LocFmtMap $locale]} {
+ set mlst [dict get $LocFmtMap $locale]
} else {
- set fractYear [expr { 1000 * $doy / 365 }]
- }
-
- # Put together the StarDate
-
- return [::format "Stardate %02d%03d.%1d" \
- [expr { [dict get $date year] - $Roddenberry }] \
- $fractYear \
- [expr { [dict get $date localSeconds] % 86400
- / ( 86400 / 10 ) }]]
-}
-
-#----------------------------------------------------------------------
-#
-# ParseStarDate --
-#
-# Parses a StarDate
-#
-# Parameters:
-# year - Year from the Roddenberry epoch
-# fractYear - Fraction of a year specifiying the day of year.
-# fractDay - Fraction of a day
-#
-# Results:
-# Returns a count of seconds from the Posix epoch.
-#
-# Side effects:
-# None.
-#
-# Jeff Hobbs put this in to support an atrocious pun about Tcl being
-# "Enterprise ready." Now we're stuck with it.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::ParseStarDate { year fractYear fractDay } {
-
- variable Roddenberry
-
- # Build a tentative date from year and fraction.
-
- set date [dict create \
- gregorian 1 \
- era CE \
- year [expr { $year + $Roddenberry }] \
- dayOfYear [expr { $fractYear * 365 / 1000 + 1 }]]
- set date [GetJulianDayFromGregorianEraYearDay $date[set date {}]]
-
- # Determine whether the given year is a leap year
-
- set lp [IsGregorianLeapYear $date]
-
- # Reconvert the fractional year according to whether the given
- # year is a leap year
-
- if { $lp } {
- dict set date dayOfYear \
- [expr { $fractYear * 366 / 1000 + 1 }]
- } else {
- dict set date dayOfYear \
- [expr { $fractYear * 365 / 1000 + 1 }]
- }
- dict unset date julianDay
- dict unset date gregorian
- set date [GetJulianDayFromGregorianEraYearDay $date[set date {}]]
-
- return [expr { 86400 * [dict get $date julianDay]
- - 210866803200
- + ( 86400 / 10 ) * $fractDay }]
-
-}
-
-#----------------------------------------------------------------------
-#
-# ScanWide --
-#
-# Scans a wide integer from an input
-#
-# Parameters:
-# str - String containing a decimal wide integer
-#
-# Results:
-# Returns the string as a pure wide integer. Throws an error if
-# the string is misformatted or out of range.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::ScanWide { str } {
- set count [::scan $str {%ld %c} result junk]
- if { $count != 1 } {
- return -code error -errorcode [list CLOCK notAnInteger $str] \
- "\"$str\" is not an integer"
- }
- if { [incr result 0] != $str } {
- return -code error -errorcode [list CLOCK integervalueTooLarge] \
- "integer value too large to represent"
- }
- return $result
-}
-
-#----------------------------------------------------------------------
-#
-# InterpretTwoDigitYear --
-#
-# Given a date that contains only the year of the century,
-# determines the target value of a two-digit year.
-#
-# Parameters:
-# date - Dictionary containing fields of the date.
-# baseTime - Base time relative to which the date is expressed.
-# twoDigitField - Name of the field that stores the two-digit year.
-# Default is 'yearOfCentury'
-# fourDigitField - Name of the field that will receive the four-digit
-# year. Default is 'year'
-#
-# Results:
-# Returns the dictionary augmented with the four-digit year, stored in
-# the given key.
-#
-# Side effects:
-# None.
-#
-# The current rule for interpreting a two-digit year is that the year
-# shall be between 1937 and 2037, thus staying within the range of a
-# 32-bit signed value for time. This rule may change to a sliding
-# window in future versions, so the 'baseTime' parameter (which is
-# currently ignored) is provided in the procedure signature.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::InterpretTwoDigitYear { date baseTime
- { twoDigitField yearOfCentury }
- { fourDigitField year } } {
-
- set yr [dict get $date $twoDigitField]
- if { $yr <= 37 } {
- dict set date $fourDigitField [expr { $yr + 2000 }]
- } else {
- dict set date $fourDigitField [expr { $yr + 1900 }]
- }
- return $date
-
-}
-
-#----------------------------------------------------------------------
-#
-# AssignBaseYear --
-#
-# Places the number of the current year into a dictionary.
-#
-# Parameters:
-# date - Dictionary value to update
-# baseTime - Base time from which to extract the year, expressed
-# in seconds from the Posix epoch
-# timezone - the time zone in which the date is being scanned
-# changeover - the Julian Day on which the Gregorian calendar
-# was adopted in the target locale.
-#
-# Results:
-# Returns the dictionary with the current year assigned.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AssignBaseYear { date baseTime timezone changeover } {
-
- variable TZData
-
- # Find the Julian Day Number corresponding to the base time, and
- # find the Gregorian year corresponding to that Julian Day.
-
- set date2 [GetDateFields $baseTime $TZData($timezone) $changeover]
-
- # Store the converted year
-
- dict set date era [dict get $date2 era]
- dict set date year [dict get $date2 year]
-
- return $date
-
-}
-
-#----------------------------------------------------------------------
-#
-# AssignBaseIso8601Year --
-#
-# Determines the base year in the ISO8601 fiscal calendar.
-#
-# Parameters:
-# date - Dictionary containing the fields of the date that
-# is to be augmented with the base year.
-# baseTime - Base time expressed in seconds from the Posix epoch.
-# timeZone - Target time zone
-# changeover - Julian Day of adoption of the Gregorian calendar in
-# the target locale.
-#
-# Results:
-# Returns the given date with "iso8601Year" set to the
-# base year.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AssignBaseIso8601Year {date baseTime timeZone changeover} {
-
- variable TZData
-
- # Find the Julian Day Number corresponding to the base time
-
- set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover]
-
- # Calculate the ISO8601 date and transfer the year
-
- dict set date era CE
- dict set date iso8601Year [dict get $date2 iso8601Year]
- return $date
-}
-
-#----------------------------------------------------------------------
-#
-# AssignBaseMonth --
-#
-# Places the number of the current year and month into a
-# dictionary.
-#
-# Parameters:
-# date - Dictionary value to update
-# baseTime - Time from which the year and month are to be
-# obtained, expressed in seconds from the Posix epoch.
-# timezone - Name of the desired time zone
-# changeover - Julian Day on which the Gregorian calendar was adopted.
-#
-# Results:
-# Returns the dictionary with the base year and month assigned.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AssignBaseMonth {date baseTime timezone changeover} {
-
- variable TZData
-
- # Find the year and month corresponding to the base time
-
- set date2 [GetDateFields $baseTime $TZData($timezone) $changeover]
- dict set date era [dict get $date2 era]
- dict set date year [dict get $date2 year]
- dict set date month [dict get $date2 month]
- return $date
-
-}
-
-#----------------------------------------------------------------------
-#
-# AssignBaseWeek --
-#
-# Determines the base year and week in the ISO8601 fiscal calendar.
-#
-# Parameters:
-# date - Dictionary containing the fields of the date that
-# is to be augmented with the base year and week.
-# baseTime - Base time expressed in seconds from the Posix epoch.
-# changeover - Julian Day on which the Gregorian calendar was adopted
-# in the target locale.
-#
-# Results:
-# Returns the given date with "iso8601Year" set to the
-# base year and "iso8601Week" to the week number.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AssignBaseWeek {date baseTime timeZone changeover} {
-
- variable TZData
-
- # Find the Julian Day Number corresponding to the base time
-
- set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover]
-
- # Calculate the ISO8601 date and transfer the year
-
- dict set date era CE
- dict set date iso8601Year [dict get $date2 iso8601Year]
- dict set date iso8601Week [dict get $date2 iso8601Week]
- return $date
-}
-
-#----------------------------------------------------------------------
-#
-# AssignBaseJulianDay --
-#
-# Determines the base day for a time-of-day conversion.
-#
-# Parameters:
-# date - Dictionary that is to get the base day
-# baseTime - Base time expressed in seconds from the Posix epoch
-# changeover - Julian day on which the Gregorian calendar was
-# adpoted in the target locale.
-#
-# Results:
-# Returns the given dictionary augmented with a 'julianDay' field
-# that contains the base day.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AssignBaseJulianDay { date baseTime timeZone changeover } {
-
- variable TZData
-
- # Find the Julian Day Number corresponding to the base time
-
- set date2 [GetDateFields $baseTime $TZData($timeZone) $changeover]
- dict set date julianDay [dict get $date2 julianDay]
-
- return $date
-}
-
-#----------------------------------------------------------------------
-#
-# InterpretHMSP --
-#
-# Interprets a time in the form "hh:mm:ss am".
-#
-# Parameters:
-# date -- Dictionary containing "hourAMPM", "minute", "second"
-# and "amPmIndicator" fields.
-#
-# Results:
-# Returns the number of seconds from local midnight.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::InterpretHMSP { date } {
-
- set hr [dict get $date hourAMPM]
- if { $hr == 12 } {
- set hr 0
- }
- if { [dict get $date amPmIndicator] } {
- incr hr 12
- }
- dict set date hour $hr
- return [InterpretHMS $date[set date {}]]
-
-}
-
-#----------------------------------------------------------------------
-#
-# InterpretHMS --
-#
-# Interprets a 24-hour time "hh:mm:ss"
-#
-# Parameters:
-# date -- Dictionary containing the "hour", "minute" and "second"
-# fields.
-#
-# Results:
-# Returns the given dictionary augmented with a "secondOfDay"
-# field containing the number of seconds from local midnight.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::InterpretHMS { date } {
-
- return [expr { ( [dict get $date hour] * 60
- + [dict get $date minute] ) * 60
- + [dict get $date second] }]
-
+ # Handle locale-dependent format groups by mapping them out of the format
+ # string. Note that the order of the [string map] operations is
+ # significant because later formats can refer to later ones; for example
+ # %c can refer to %X, which in turn can refer to %T.
+
+ set mlst {
+ %% %%
+ %D %m/%d/%Y
+ %+ {%a %b %e %H:%M:%S %Z %Y}
+ }
+ lappend mlst %EY [string map $mlst [dict get $mcd LOCALE_YEAR_FORMAT]]
+ lappend mlst %T [string map $mlst [dict get $mcd TIME_FORMAT_24_SECS]]
+ lappend mlst %R [string map $mlst [dict get $mcd TIME_FORMAT_24]]
+ lappend mlst %r [string map $mlst [dict get $mcd TIME_FORMAT_12]]
+ lappend mlst %X [string map $mlst [dict get $mcd TIME_FORMAT]]
+ lappend mlst %EX [string map $mlst [dict get $mcd LOCALE_TIME_FORMAT]]
+ lappend mlst %x [string map $mlst [dict get $mcd DATE_FORMAT]]
+ lappend mlst %Ex [string map $mlst [dict get $mcd LOCALE_DATE_FORMAT]]
+ lappend mlst %c [string map $mlst [dict get $mcd DATE_TIME_FORMAT]]
+ lappend mlst %Ec [string map $mlst [dict get $mcd LOCALE_DATE_TIME_FORMAT]]
+
+ dict set LocFmtMap $locale $mlst
+ }
+
+ # translate copy of format (don't use format object here, because otherwise
+ # it can lose its internal representation (string map - convert to unicode)
+ set locfmt [string map $mlst [string range " $format" 1 end]]
+
+ # Save original format as long as possible, because of internal
+ # representation (performance).
+ # Note that in this case such format will be never localized (also
+ # using another locales). To prevent this return a duplicate (but
+ # it may be slower).
+ if {$locfmt eq $format} {
+ set locfmt $format
+ }
+
+ return $locfmt
}
#----------------------------------------------------------------------
@@ -3062,115 +903,81 @@ proc ::tcl::clock::InterpretHMS { date } {
# Returns the system time zone.
#
# Side effects:
-# Stores the sustem time zone in the 'CachedSystemTimeZone'
-# variable, since determining it may be an expensive process.
+# Stores the system time zone in engine configuration, since
+# determining it may be an expensive process.
#
#----------------------------------------------------------------------
proc ::tcl::clock::GetSystemTimeZone {} {
-
- variable CachedSystemTimeZone
variable TimeZoneBad
if {[set result [getenv TCL_TZ]] ne {}} {
set timezone $result
} elseif {[set result [getenv TZ]] ne {}} {
set timezone $result
- }
- if {![info exists timezone]} {
- # Cache the time zone only if it was detected by one of the
- # expensive methods.
- if { [info exists CachedSystemTimeZone] } {
- set timezone $CachedSystemTimeZone
- } elseif { $::tcl_platform(platform) eq {windows} } {
- set timezone [GuessWindowsTimeZone]
- } elseif { [file exists /etc/localtime]
- && ![catch {ReadZoneinfoFile \
- Tcl/Localtime /etc/localtime}] } {
- set timezone :Tcl/Localtime
- } else {
- set timezone :localtime
- }
- set CachedSystemTimeZone $timezone
+ } else {
+ # ask engine for the cached timezone:
+ set timezone [::tcl::unsupported::clock::configure -system-tz]
+ if { $timezone ne "" } {
+ return $timezone
+ }
+ if { $::tcl_platform(platform) eq {windows} } {
+ set timezone [GuessWindowsTimeZone]
+ } elseif { [file exists /etc/localtime]
+ && ![catch {ReadZoneinfoFile \
+ Tcl/Localtime /etc/localtime}] } {
+ set timezone :Tcl/Localtime
+ } else {
+ set timezone :localtime
+ }
}
if { ![dict exists $TimeZoneBad $timezone] } {
- dict set TimeZoneBad $timezone [catch {SetupTimeZone $timezone}]
- }
- if { [dict get $TimeZoneBad $timezone] } {
- return :localtime
- } else {
- return $timezone
+ catch {set timezone [SetupTimeZone $timezone]}
}
-}
-
-#----------------------------------------------------------------------
-#
-# ConvertLegacyTimeZone --
-#
-# Given an alphanumeric time zone identifier and the system
-# time zone, convert the alphanumeric identifier to an
-# unambiguous time zone.
-#
-# Parameters:
-# tzname - Name of the time zone to convert
-#
-# Results:
-# Returns a time zone name corresponding to tzname, but
-# in an unambiguous form, generally +hhmm.
-#
-# This procedure is implemented primarily to allow the parsing of
-# RFC822 date/time strings. Processing a time zone name on input
-# is not recommended practice, because there is considerable room
-# for ambiguity; for instance, is BST Brazilian Standard Time, or
-# British Summer Time?
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::ConvertLegacyTimeZone { tzname } {
-
- variable LegacyTimeZone
-
- set tzname [string tolower $tzname]
- if { ![dict exists $LegacyTimeZone $tzname] } {
- return -code error -errorcode [list CLOCK badTZName $tzname] \
- "time zone \"$tzname\" not found"
- } else {
- return [dict get $LegacyTimeZone $tzname]
+ if { [dict exists $TimeZoneBad $timezone] } {
+ set timezone :localtime
}
+ # tell backend - current system timezone:
+ ::tcl::unsupported::clock::configure -system-tz $timezone
+
+ return $timezone
}
#----------------------------------------------------------------------
#
# SetupTimeZone --
#
-# Given the name or specification of a time zone, sets up
-# its in-memory data.
+# Given the name or specification of a time zone, sets up its in-memory
+# data.
#
# Parameters:
# tzname - Name of a time zone
#
# Results:
-# Unless the time zone is ':localtime', sets the TZData array
-# to contain the lookup table for local<->UTC conversion.
-# Returns an error if the time zone cannot be parsed.
+# Unless the time zone is ':localtime', sets the TZData array to contain
+# the lookup table for local<->UTC conversion. Returns an error if the
+# time zone cannot be parsed.
#
#----------------------------------------------------------------------
-proc ::tcl::clock::SetupTimeZone { timezone } {
-
+proc ::tcl::clock::SetupTimeZone { timezone {alias {}} } {
variable TZData
if {! [info exists TZData($timezone)] } {
- variable MINWIDE
- if { $timezone eq {:localtime} } {
-
- # Nothing to do, we'll convert using the localtime function
-
- } elseif { [regexp {^([-+])(\d\d)(?::?(\d\d)(?::?(\d\d))?)?} $timezone \
- -> s hh mm ss] } {
+ variable TimeZoneBad
+ if { [dict exists $TimeZoneBad $timezone] } {
+ return -code error \
+ -errorcode [list CLOCK badTimeZone $timezone] \
+ "time zone \"$timezone\" not found"
+ }
+ variable MINWIDE
+ if {
+ [regexp {^([-+])(\d\d)(?::?(\d\d)(?::?(\d\d))?)?} $timezone \
+ -> s hh mm ss]
+ } then {
# Make a fixed offset
::scan $hh %d hh
@@ -3191,50 +998,73 @@ proc ::tcl::clock::SetupTimeZone { timezone } {
set TZData($timezone) [list [list $MINWIDE $offset -1 $timezone]]
} elseif { [string index $timezone 0] eq {:} } {
-
# Convert using a time zone file
if {
[catch {
LoadTimeZoneFile [string range $timezone 1 end]
- }]
- && [catch {
+ }] && [catch {
LoadZoneinfoFile [string range $timezone 1 end]
- }]
- } {
- return -code error \
- -errorcode [list CLOCK badTimeZone $timezone] \
- "time zone \"$timezone\" not found"
+ } ret opts]
+ } then {
+ dict unset opts -errorinfo
+ if {[lindex [dict get $opts -errorcode] 0] ne "CLOCK"} {
+ dict set opts -errorcode [list CLOCK badTimeZone $timezone]
+ set ret "time zone \"$timezone\" not found: $ret"
+ }
+ dict set TimeZoneBad $timezone 1
+ return -options $opts $ret
}
-
} elseif { ![catch {ParsePosixTimeZone $timezone} tzfields] } {
-
# This looks like a POSIX time zone - try to process it
- if { [catch {ProcessPosixTimeZone $tzfields} data opts] } {
- if { [lindex [dict get $opts -errorcode] 0] eq {CLOCK} } {
- dict unset opts -errorinfo
+ if { [catch {ProcessPosixTimeZone $tzfields} ret opts] } {
+ dict unset opts -errorinfo
+ if {[lindex [dict get $opts -errorcode] 0] ne "CLOCK"} {
+ dict set opts -errorcode [list CLOCK badTimeZone $timezone]
+ set ret "time zone \"$timezone\" not found: $ret"
}
- return -options $opts $data
+ dict set TimeZoneBad $timezone 1
+ return -options $opts $ret
} else {
- set TZData($timezone) $data
+ set TZData($timezone) $ret
}
} else {
- # We couldn't parse this as a POSIX time zone. Try
- # again with a time zone file - this time without a colon
+ variable LegacyTimeZone
+
+ # We couldn't parse this as a POSIX time zone. Try again with a
+ # time zone file - this time without a colon
if { [catch { LoadTimeZoneFile $timezone }]
- && [catch { LoadZoneinfoFile $timezone } - opts] } {
+ && [catch { LoadZoneinfoFile $timezone } ret opts] } {
+
+ # Check may be a legacy zone:
+
+ if { $alias eq {} && ![catch {
+ set tzname [dict get $LegacyTimeZone [string tolower $timezone]]
+ }] } {
+ set tzname [::tcl::clock::SetupTimeZone $tzname $timezone]
+ set TZData($timezone) $TZData($tzname)
+ # tell backend - timezone is initialized and return shared timezone object:
+ return [::tcl::unsupported::clock::configure -setup-tz $timezone]
+ }
+
dict unset opts -errorinfo
- return -options $opts "time zone $timezone not found"
+ if {[lindex [dict get $opts -errorcode] 0] ne "CLOCK"} {
+ dict set opts -errorcode [list CLOCK badTimeZone $timezone]
+ set ret "time zone \"$timezone\" not found: $ret"
+ }
+ dict set TimeZoneBad $timezone 1
+ return -options $opts $ret
}
set TZData($timezone) $TZData(:$timezone)
}
}
- return
+ # tell backend - timezone is initialized and return shared timezone object:
+ ::tcl::unsupported::clock::configure -setup-tz $timezone
}
#----------------------------------------------------------------------
@@ -3247,30 +1077,26 @@ proc ::tcl::clock::SetupTimeZone { timezone } {
# None.
#
# Results:
-# Returns a time zone specifier that corresponds to the system
-# time zone information found in the Registry.
+# Returns a time zone specifier that corresponds to the system time zone
+# information found in the Registry.
#
# Bugs:
-# Fixed dates for DST change are unimplemented at present, because
-# no time zone information supplied with Windows actually uses
-# them!
+# Fixed dates for DST change are unimplemented at present, because no
+# time zone information supplied with Windows actually uses them!
#
-# On a Windows system where neither $env(TCL_TZ) nor $env(TZ) is
-# specified, GuessWindowsTimeZone looks in the Registry for the
-# system time zone information. It then attempts to find an entry
-# in WinZoneInfo for a time zone that uses the same rules. If
-# it finds one, it returns it; otherwise, it constructs a Posix-style
-# time zone string and returns that.
+# On a Windows system where neither $env(TCL_TZ) nor $env(TZ) is specified,
+# GuessWindowsTimeZone looks in the Registry for the system time zone
+# information. It then attempts to find an entry in WinZoneInfo for a time
+# zone that uses the same rules. If it finds one, it returns it; otherwise,
+# it constructs a Posix-style time zone string and returns that.
#
#----------------------------------------------------------------------
proc ::tcl::clock::GuessWindowsTimeZone {} {
-
variable WinZoneInfo
- variable NoRegistry
variable TimeZoneBad
- if { [info exists NoRegistry] } {
+ if { ![_hasRegistry] } {
return :localtime
}
@@ -3296,26 +1122,24 @@ proc ::tcl::clock::GuessWindowsTimeZone {} {
lappend data $val
}
}] } {
-
# Missing values in the Registry - bail out
return :localtime
}
- # Make up a Posix time zone specifier if we can't find one.
- # Check here that the tzdata file exists, in case we're running
- # in an environment (e.g. starpack) where tzdata is incomplete.
- # (Bug 1237907)
+ # Make up a Posix time zone specifier if we can't find one. Check here
+ # that the tzdata file exists, in case we're running in an environment
+ # (e.g. starpack) where tzdata is incomplete. (Bug 1237907)
if { [dict exists $WinZoneInfo $data] } {
set tzname [dict get $WinZoneInfo $data]
if { ! [dict exists $TimeZoneBad $tzname] } {
- dict set TimeZoneBad $tzname [catch {SetupTimeZone $tzname}]
+ catch {set tzname [SetupTimeZone $tzname]}
}
} else {
set tzname {}
}
- if { $tzname eq {} || [dict get $TimeZoneBad $tzname] } {
+ if { $tzname eq {} || [dict exists $TimeZoneBad $tzname] } {
lassign $data \
bias stdBias dstBias \
stdYear stdMonth stdDayOfWeek stdDayOfMonth \
@@ -3353,11 +1177,11 @@ proc ::tcl::clock::GuessWindowsTimeZone {} {
if { $dstYear == 0 } {
append tzname ,M $dstMonth . $dstDayOfMonth . $dstDayOfWeek
} else {
- # I have not been able to find any locale on which
- # Windows converts time zone on a fixed day of the year,
- # hence don't know how to interpret the fields.
- # If someone can inform me, I'd be glad to code it up.
- # For right now, we bail out in such a case.
+ # I have not been able to find any locale on which Windows
+ # converts time zone on a fixed day of the year, hence don't
+ # know how to interpret the fields. If someone can inform me,
+ # I'd be glad to code it up. For right now, we bail out in
+ # such a case.
return :localtime
}
append tzname / [::format %02d $dstHour] \
@@ -3366,11 +1190,11 @@ proc ::tcl::clock::GuessWindowsTimeZone {} {
if { $stdYear == 0 } {
append tzname ,M $stdMonth . $stdDayOfMonth . $stdDayOfWeek
} else {
- # I have not been able to find any locale on which
- # Windows converts time zone on a fixed day of the year,
- # hence don't know how to interpret the fields.
- # If someone can inform me, I'd be glad to code it up.
- # For right now, we bail out in such a case.
+ # I have not been able to find any locale on which Windows
+ # converts time zone on a fixed day of the year, hence don't
+ # know how to interpret the fields. If someone can inform me,
+ # I'd be glad to code it up. For right now, we bail out in
+ # such a case.
return :localtime
}
append tzname / [::format %02d $stdHour] \
@@ -3381,7 +1205,6 @@ proc ::tcl::clock::GuessWindowsTimeZone {} {
}
return [dict get $WinZoneInfo $data]
-
}
#----------------------------------------------------------------------
@@ -3410,18 +1233,18 @@ proc ::tcl::clock::LoadTimeZoneFile { fileName } {
return
}
- # Since an unsafe interp uses the [clock] command in the master,
- # this code is security sensitive. Make sure that the path name
- # cannot escape the given directory.
+ # Since an unsafe interp uses the [clock] command in the parent, this code
+ # is security sensitive. Make sure that the path name cannot escape the
+ # given directory.
- if { ![regexp {^[[.-.][:alpha:]_]+(?:/[[.-.][:alpha:]_]+)*$} $fileName] } {
+ if { [regexp {^[/\\]|^[a-zA-Z]+:|(?:^|[/\\])\.\.} $fileName] } {
return -code error \
- -errorcode [list CLOCK badTimeZone $:fileName] \
+ -errorcode [list CLOCK badTimeZone :$fileName] \
"time zone \":$fileName\" not valid"
}
- if { [catch {
- source -encoding utf-8 [file join $DataDir $fileName]
- }] } {
+ try {
+ source [file join $DataDir $fileName]
+ } on error {} {
return -code error \
-errorcode [list CLOCK badTimeZone :$fileName] \
"time zone \":$fileName\" not found"
@@ -3439,8 +1262,8 @@ proc ::tcl::clock::LoadTimeZoneFile { fileName } {
# fileName - Relative path name of the file to load.
#
# Results:
-# Returns an empty result normally; returns an error if no
-# Olson file was found or the file was malformed in some way.
+# Returns an empty result normally; returns an error if no Olson file
+# was found or the file was malformed in some way.
#
# Side effects:
# TZData(:fileName) contains the time zone data
@@ -3448,24 +1271,29 @@ proc ::tcl::clock::LoadTimeZoneFile { fileName } {
#----------------------------------------------------------------------
proc ::tcl::clock::LoadZoneinfoFile { fileName } {
-
variable ZoneinfoPaths
- # Since an unsafe interp uses the [clock] command in the master,
- # this code is security sensitive. Make sure that the path name
- # cannot escape the given directory.
+ # Since an unsafe interp uses the [clock] command in the parent, this code
+ # is security sensitive. Make sure that the path name cannot escape the
+ # given directory.
- if { ![regexp {^[[.-.][:alpha:]_]+(?:/[[.-.][:alpha:]_]+)*$} $fileName] } {
+ if { [regexp {^[/\\]|^[a-zA-Z]+:|(?:^|[/\\])\.\.} $fileName] } {
return -code error \
- -errorcode [list CLOCK badTimeZone $:fileName] \
+ -errorcode [list CLOCK badTimeZone :$fileName] \
"time zone \":$fileName\" not valid"
}
+ set fname ""
foreach d $ZoneinfoPaths {
set fname [file join $d $fileName]
if { [file readable $fname] && [file isfile $fname] } {
break
}
- unset fname
+ set fname ""
+ }
+ if {$fname eq ""} {
+ return -code error \
+ -errorcode [list CLOCK badTimeZone :$fileName] \
+ "time zone \":$fileName\" not found"
}
ReadZoneinfoFile $fileName $fname
}
@@ -3482,15 +1310,14 @@ proc ::tcl::clock::LoadZoneinfoFile { fileName } {
# fname - Absolute path name of the file.
#
# Results:
-# Returns an empty result normally; returns an error if no
-# Olson file was found or the file was malformed in some way.
+# Returns an empty result normally; returns an error if no Olson file
+# was found or the file was malformed in some way.
#
# Side effects:
# TZData(:fileName) contains the time zone data
#
#----------------------------------------------------------------------
-
proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
variable MINWIDE
variable TZData
@@ -3509,8 +1336,8 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
set d [read $f]
close $f
- # The file begins with a magic number, sixteen reserved bytes,
- # and then six 4-byte integers giving counts of fileds in the file.
+ # The file begins with a magic number, sixteen reserved bytes, and then
+ # six 4-byte integers giving counts of fields in the file.
binary scan $d a4a1x15IIIIII \
magic version nIsGMT nIsStd nLeap nTime nType nChar
@@ -3528,18 +1355,19 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
return -code error "$fileName contains leap seconds"
}
- # In a version 2 file, we use the second part of the file, which
- # contains 64-bit transition times.
+ # In a version 2 file, we use the second part of the file, which contains
+ # 64-bit transition times.
if {$version eq "2"} {
- set seek [expr {44
- + 5 * $nTime
- + 6 * $nType
- + 4 * $nLeap
- + $nIsStd
- + $nIsGMT
- + $nChar
- }]
+ set seek [expr {
+ 44
+ + 5 * $nTime
+ + 6 * $nType
+ + 4 * $nLeap
+ + $nIsStd
+ + $nIsGMT
+ + $nChar
+ }]
binary scan $d @${seek}a4a1x15IIIIII \
magic version nIsGMT nIsStd nLeap nTime nType nChar
if {$magic ne {TZif}} {
@@ -3563,9 +1391,9 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
}
set codes [linsert $codes 0 0]
- # Next come ${nType} time type descriptions, each of which has an
- # offset (seconds east of GMT), a DST indicator, and an index into
- # the abbreviation text.
+ # Next come ${nType} time type descriptions, each of which has an offset
+ # (seconds east of GMT), a DST indicator, and an index into the
+ # abbreviation text.
for { set i 0 } { $i < $nType } { incr i } {
binary scan $d @${seek}Icc gmtOff isDst abbrInd
@@ -3573,10 +1401,10 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
incr seek 6
}
- # Next come $nChar characters of time zone name abbreviations,
- # which are null-terminated.
- # We build them up into a dictionary indexed by character index,
- # because that's what's in the indices above.
+ # Next come $nChar characters of time zone name abbreviations, which are
+ # null-terminated.
+ # We build them up into a dictionary indexed by character index, because
+ # that's what's in the indices above.
binary scan $d @${seek}a${nChar} abbrs
incr seek ${nChar}
@@ -3606,8 +1434,8 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
}
# In a version 2 file, there is also a POSIX-style time zone description
- # at the very end of the file. To get to it, skip over
- # nLeap leap second values (8 bytes each),
+ # at the very end of the file. To get to it, skip over nLeap leap second
+ # values (8 bytes each),
# nIsStd standard/DST indicators and nIsGMT UTC/local indicators.
if {$version eq {2}} {
@@ -3640,8 +1468,8 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
# tz Time zone specifier to be interpreted
#
# Results:
-# Returns a dictionary whose values contain the various pieces of
-# the time zone specification.
+# Returns a dictionary whose values contain the various pieces of the
+# time zone specification.
#
# Side effects:
# None.
@@ -3698,13 +1526,12 @@ proc ::tcl::clock::ReadZoneinfoFile {fileName fname} {
# Specify the end of DST in the same way that the start* fields
# specify the beginning of DST.
#
-# This procedure serves only to break the time specifier into fields.
-# No attempt is made to canonicalize the fields or supply default values.
+# This procedure serves only to break the time specifier into fields. No
+# attempt is made to canonicalize the fields or supply default values.
#
#----------------------------------------------------------------------
proc ::tcl::clock::ParsePosixTimeZone { tz } {
-
if {[regexp -expanded -nocase -- {
^
# 1 - Standard time zone name
@@ -3717,7 +1544,7 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
# 4 - Standard time zone offset, minutes
: ([[:digit:]]{1,2})
(?:
- # 5 - Standard time zone offset, seconds
+ # 5 - Standard time zone offset, seconds
: ([[:digit:]]{1,2} )
)?
)?
@@ -3725,7 +1552,7 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
# 6 - DST time zone name
([[:alpha:]]+ | <[-+[:alnum:]]+>)
(?:
- (?:
+ (?:
# 7 - DST time zone offset, signum
([-+]?)
# 8 - DST time zone offset, hours
@@ -3734,17 +1561,17 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
# 9 - DST time zone offset, minutes
: ([[:digit:]]{1,2})
(?:
- # 10 - DST time zone offset, seconds
+ # 10 - DST time zone offset, seconds
: ([[:digit:]]{1,2})
)?
)?
)?
- (?:
+ (?:
,
(?:
# 11 - Optional J in n and Jn form 12 - Day of year
- ( J ? ) ( [[:digit:]]+ )
- | M
+ ( J ? ) ( [[:digit:]]+ )
+ | M
# 13 - Month number 14 - Week of month 15 - Day of week
( [[:digit:]] + )
[.] ( [[:digit:]] + )
@@ -3753,7 +1580,7 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
(?:
# 16 - Start time of DST - hours
/ ( [[:digit:]]{1,2} )
- (?:
+ (?:
# 17 - Start time of DST - minutes
: ( [[:digit:]]{1,2} )
(?:
@@ -3765,8 +1592,8 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
,
(?:
# 19 - Optional J in n and Jn form 20 - Day of year
- ( J ? ) ( [[:digit:]]+ )
- | M
+ ( J ? ) ( [[:digit:]]+ )
+ | M
# 21 - Month number 22 - Week of month 23 - Day of week
( [[:digit:]] + )
[.] ( [[:digit:]] + )
@@ -3775,7 +1602,7 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
(?:
# 24 - End time of DST - hours
/ ( [[:digit:]]{1,2} )
- (?:
+ (?:
# 25 - End time of DST - minutes
: ( [[:digit:]]{1,2} )
(?:
@@ -3784,9 +1611,9 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
)?
)?
)?
- )?
+ )?
)?
- )?
+ )?
$
} $tz -> x(stdName) x(stdSignum) x(stdHours) x(stdMinutes) x(stdSeconds) \
x(dstName) x(dstSignum) x(dstHours) x(dstMinutes) x(dstSeconds) \
@@ -3796,27 +1623,21 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
x(endJ) x(endDayOfYear) \
x(endMonth) x(endWeekOfMonth) x(endDayOfWeek) \
x(endHours) x(endMinutes) x(endSeconds)] } {
-
# it's a good timezone
return [array get x]
-
- } else {
-
- return -code error\
- -errorcode [list CLOCK badTimeZone $tz] \
- "unable to parse time zone specification \"$tz\""
-
}
+ return -code error\
+ -errorcode [list CLOCK badTimeZone $tz] \
+ "unable to parse time zone specification \"$tz\""
}
#----------------------------------------------------------------------
#
# ProcessPosixTimeZone --
#
-# Handle a Posix time zone after it's been broken out into
-# fields.
+# Handle a Posix time zone after it's been broken out into fields.
#
# Parameters:
# z - Dictionary returned from 'ParsePosixTimeZone'
@@ -3830,7 +1651,6 @@ proc ::tcl::clock::ParsePosixTimeZone { tz } {
#----------------------------------------------------------------------
proc ::tcl::clock::ProcessPosixTimeZone { z } {
-
variable MINWIDE
variable TZData
@@ -3856,9 +1676,9 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
} else {
set stdSeconds 0
}
- set stdOffset [expr { ( ( $stdHours * 60 + $stdMinutes )
- * 60 + $stdSeconds )
- * $stdSignum }]
+ set stdOffset [expr {
+ (($stdHours * 60 + $stdMinutes) * 60 + $stdSeconds) * $stdSignum
+ }]
set data [list [list $MINWIDE $stdOffset 0 $stdName]]
# If there's no daylight zone, we're done
@@ -3892,9 +1712,9 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
} else {
set dstSeconds 0
}
- set dstOffset [expr { ( ( $dstHours * 60 + $dstMinutes )
- * 60 + $dstSeconds )
- * $dstSignum }]
+ set dstOffset [expr {
+ (($dstHours*60 + $dstMinutes) * 60 + $dstSeconds) * $dstSignum
+ }]
}
# Fill in defaults for European or US DST rules
@@ -3903,8 +1723,10 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
# US end time is the first Sunday in November.
# EU end time is the last Sunday in October
- if { [dict get $z startDayOfYear] eq {}
- && [dict get $z startMonth] eq {} } {
+ if {
+ [dict get $z startDayOfYear] eq {}
+ && [dict get $z startMonth] eq {}
+ } then {
if {($stdSignum * $stdHours>=0) && ($stdSignum * $stdHours<=12)} {
# EU
dict set z startWeekOfMonth 5
@@ -3923,8 +1745,10 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
dict set z startMinutes 0
dict set z startSeconds 0
}
- if { [dict get $z endDayOfYear] eq {}
- && [dict get $z endMonth] eq {} } {
+ if {
+ [dict get $z endDayOfYear] eq {}
+ && [dict get $z endMonth] eq {}
+ } then {
if {($stdSignum * $stdHours>=0) && ($stdSignum * $stdHours<=12)} {
# EU
dict set z endMonth 10
@@ -3964,15 +1788,14 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
}
return $data
-
}
#----------------------------------------------------------------------
#
# DeterminePosixDSTTime --
#
-# Determines the time that Daylight Saving Time starts or ends
-# from a Posix time zone specification.
+# Determines the time that Daylight Saving Time starts or ends from a
+# Posix time zone specification.
#
# Parameters:
# z - Time zone data returned from ParsePosixTimeZone.
@@ -3982,8 +1805,8 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } {
# y - The year for which the transition time is to be determined.
#
# Results:
-# Returns the transition time as a count of seconds from
-# the epoch. The time is relative to the wall clock, not UTC.
+# Returns the transition time as a count of seconds from the epoch. The
+# time is relative to the wall clock, not UTC.
#
#----------------------------------------------------------------------
@@ -3993,21 +1816,20 @@ proc ::tcl::clock::DeterminePosixDSTTime { z bound y } {
# Determine the start or end day of DST
- set date [dict create era CE year $y]
+ set date [dict create era CE year $y gregorian 1]
set doy [dict get $z ${bound}DayOfYear]
if { $doy ne {} } {
# Time was specified as a day of the year
if { [dict get $z ${bound}J] ne {}
- && [IsGregorianLeapYear $y]
+ && [IsGregorianLeapYear $date]
&& ( $doy > $FEB_28 ) } {
incr doy
}
dict set date dayOfYear $doy
set date [GetJulianDayFromEraYearDay $date[set date {}] 2361222]
} else {
-
# Time was specified as a day of the week within a month
dict set date month [dict get $z ${bound}Month]
@@ -4022,8 +1844,9 @@ proc ::tcl::clock::DeterminePosixDSTTime { z bound y } {
}
set jd [dict get $date julianDay]
- set seconds [expr { wide($jd) * wide(86400)
- - wide(210866803200) }]
+ set seconds [expr {
+ wide($jd) * wide(86400) - wide(210866803200)
+ }]
set h [dict get $z ${bound}Hours]
if { $h eq {} } {
@@ -4045,44 +1868,6 @@ proc ::tcl::clock::DeterminePosixDSTTime { z bound y } {
}
set tod [expr { ( $h * 60 + $m ) * 60 + $s }]
return [expr { $seconds + $tod }]
-
-}
-
-#----------------------------------------------------------------------
-#
-# GetLocaleEra --
-#
-# Given local time expressed in seconds from the Posix epoch,
-# determine localized era and year within the era.
-#
-# Parameters:
-# date - Dictionary that must contain the keys, 'localSeconds',
-# whose value is expressed as the appropriate local time;
-# and 'year', whose value is the Gregorian year.
-# etable - Value of the LOCALE_ERAS key in the message catalogue
-# for the target locale.
-#
-# Results:
-# Returns the dictionary, augmented with the keys, 'localeEra'
-# and 'localeYear'.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::GetLocaleEra { date etable } {
-
- set index [BSearch $etable [dict get $date localSeconds]]
- if { $index < 0} {
- dict set date localeEra \
- [::format %02d [expr { [dict get $date year] / 100 }]]
- dict set date localeYear \
- [expr { [dict get $date year] % 100 }]
- } else {
- dict set date localeEra [lindex $etable $index 1]
- dict set date localeYear [expr { [dict get $date year]
- - [lindex $etable $index 2] }]
- }
- return $date
-
}
#----------------------------------------------------------------------
@@ -4100,10 +1885,9 @@ proc ::tcl::clock::GetLocaleEra { date etable } {
# adopted in the current locale.
#
# Results:
-# Returns the given dictionary augmented with a 'julianDay' key
-# whose value is the desired Julian Day Number, and a 'gregorian'
-# key that specifies whether the calendar is Gregorian (1) or
-# Julian (0).
+# Returns the given dictionary augmented with a 'julianDay' key whose
+# value is the desired Julian Day Number, and a 'gregorian' key that
+# specifies whether the calendar is Gregorian (1) or Julian (0).
#
# Side effects:
# None.
@@ -4114,7 +1898,6 @@ proc ::tcl::clock::GetLocaleEra { date etable } {
#----------------------------------------------------------------------
proc ::tcl::clock::GetJulianDayFromEraYearDay {date changeover} {
-
# Get absolute year number from the civil year
switch -exact -- [dict get $date era] {
@@ -4130,21 +1913,25 @@ proc ::tcl::clock::GetJulianDayFromEraYearDay {date changeover} {
# Try the Gregorian calendar first.
dict set date gregorian 1
- set jd [expr { 1721425
- + [dict get $date dayOfYear]
- + ( 365 * $ym1 )
- + ( $ym1 / 4 )
- - ( $ym1 / 100 )
- + ( $ym1 / 400 ) }]
+ set jd [expr {
+ 1721425
+ + [dict get $date dayOfYear]
+ + ( 365 * $ym1 )
+ + ( $ym1 / 4 )
+ - ( $ym1 / 100 )
+ + ( $ym1 / 400 )
+ }]
# If the date is before the Gregorian change, use the Julian calendar.
if { $jd < $changeover } {
dict set date gregorian 0
- set jd [expr { 1721423
- + [dict get $date dayOfYear]
- + ( 365 * $ym1 )
- + ( $ym1 / 4 ) }]
+ set jd [expr {
+ 1721423
+ + [dict get $date dayOfYear]
+ + ( 365 * $ym1 )
+ + ( $ym1 / 4 )
+ }]
}
dict set date julianDay $jd
@@ -4155,8 +1942,8 @@ proc ::tcl::clock::GetJulianDayFromEraYearDay {date changeover} {
#
# GetJulianDayFromEraYearMonthWeekDay --
#
-# Determines the Julian Day number corresponding to the nth
-# given day-of-the-week in a given month.
+# Determines the Julian Day number corresponding to the nth given
+# day-of-the-week in a given month.
#
# Parameters:
# date - Dictionary containing the keys, 'era', 'year', 'month'
@@ -4175,10 +1962,9 @@ proc ::tcl::clock::GetJulianDayFromEraYearDay {date changeover} {
#----------------------------------------------------------------------
proc ::tcl::clock::GetJulianDayFromEraYearMonthWeekDay {date changeover} {
-
- # Come up with a reference day; either the zeroeth day of the
- # given month (dayOfWeekInMonth >= 0) or the seventh day of the
- # following month (dayOfWeekInMonth < 0)
+ # Come up with a reference day; either the zeroeth day of the given month
+ # (dayOfWeekInMonth >= 0) or the seventh day of the following month
+ # (dayOfWeekInMonth < 0)
set date2 $date
set week [dict get $date dayOfWeekInMonth]
@@ -4194,7 +1980,6 @@ proc ::tcl::clock::GetJulianDayFromEraYearMonthWeekDay {date changeover} {
[dict get $date2 julianDay]]
dict set date julianDay [expr { $wd0 + 7 * $week }]
return $date
-
}
#----------------------------------------------------------------------
@@ -4217,7 +2002,6 @@ proc ::tcl::clock::GetJulianDayFromEraYearMonthWeekDay {date changeover} {
#----------------------------------------------------------------------
proc ::tcl::clock::IsGregorianLeapYear { date } {
-
switch -exact -- [dict get $date era] {
BCE {
set year [expr { 1 - [dict get $date year]}]
@@ -4237,15 +2021,14 @@ proc ::tcl::clock::IsGregorianLeapYear { date } {
} else {
return 1
}
-
}
#----------------------------------------------------------------------
#
# WeekdayOnOrBefore --
#
-# Determine the nearest day of week (given by the 'weekday'
-# parameter, Sunday==0) on or before a given Julian Day.
+# Determine the nearest day of week (given by the 'weekday' parameter,
+# Sunday==0) on or before a given Julian Day.
#
# Parameters:
# weekday -- Day of the week
@@ -4260,397 +2043,30 @@ proc ::tcl::clock::IsGregorianLeapYear { date } {
#----------------------------------------------------------------------
proc ::tcl::clock::WeekdayOnOrBefore { weekday j } {
-
set k [expr { ( $weekday + 6 ) % 7 }]
return [expr { $j - ( $j - $k ) % 7 }]
-
-}
-
-#----------------------------------------------------------------------
-#
-# BSearch --
-#
-# Service procedure that does binary search in several places
-# inside the 'clock' command.
-#
-# Parameters:
-# list - List of lists, sorted in ascending order by the
-# first elements
-# key - Value to search for
-#
-# Results:
-# Returns the index of the greatest element in $list that is less
-# than or equal to $key.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::BSearch { list key } {
-
- if {[llength $list] == 0} {
- return -1
- }
- if { $key < [lindex $list 0 0] } {
- return -1
- }
-
- set l 0
- set u [expr { [llength $list] - 1 }]
-
- while { $l < $u } {
-
- # At this point, we know that
- # $k >= [lindex $list $l 0]
- # Either $u == [llength $list] or else $k < [lindex $list $u+1 0]
- # We find the midpoint of the interval {l,u} rounded UP, compare
- # against it, and set l or u to maintain the invariant. Note
- # that the interval shrinks at each step, guaranteeing convergence.
-
- set m [expr { ( $l + $u + 1 ) / 2 }]
- if { $key >= [lindex $list $m 0] } {
- set l $m
- } else {
- set u [expr { $m - 1 }]
- }
- }
-
- return $l
-}
-
-#----------------------------------------------------------------------
-#
-# clock add --
-#
-# Adds an offset to a given time.
-#
-# Syntax:
-# clock add clockval ?count unit?... ?-option value?
-#
-# Parameters:
-# clockval -- Starting time value
-# count -- Amount of a unit of time to add
-# unit -- Unit of time to add, must be one of:
-# years year months month weeks week
-# days day hours hour minutes minute
-# seconds second
-#
-# Options:
-# -gmt BOOLEAN
-# (Deprecated) Flag synonymous with '-timezone :GMT'
-# -timezone ZONE
-# Name of the time zone in which calculations are to be done.
-# -locale NAME
-# Name of the locale in which calculations are to be done.
-# Used to determine the Gregorian change date.
-#
-# Results:
-# Returns the given time adjusted by the given offset(s) in
-# order.
-#
-# Notes:
-# It is possible that adding a number of months or years will adjust
-# the day of the month as well. For instance, the time at
-# one month after 31 January is either 28 or 29 February, because
-# February has fewer than 31 days.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::add { clockval args } {
-
- if { [llength $args] % 2 != 0 } {
- set cmdName "clock add"
- return -code error \
- -errorcode [list CLOCK wrongNumArgs] \
- "wrong \# args: should be\
- \"$cmdName clockval ?number units?...\
- ?-gmt boolean? ?-locale LOCALE? ?-timezone ZONE?\""
- }
- if { [catch { expr {wide($clockval)} } result] } {
- return -code error $result
- }
-
- set offsets {}
- set gmt 0
- set locale c
- set timezone [GetSystemTimeZone]
-
- foreach { a b } $args {
-
- if { [string is integer -strict $a] } {
-
- lappend offsets $a $b
-
- } else {
-
- switch -exact -- $a {
-
- -g - -gm - -gmt {
- set gmt $b
- }
- -l - -lo - -loc - -loca - -local - -locale {
- set locale [string tolower $b]
- }
- -t - -ti - -tim - -time - -timez - -timezo - -timezon -
- -timezone {
- set timezone $b
- }
- default {
- return -code error \
- -errorcode [list CLOCK badSwitch $a] \
- "bad switch \"$a\",\
- must be -gmt, -locale or -timezone"
- }
- }
- }
- }
-
- # Check options for validity
-
- if { [info exists saw(-gmt)] && [info exists saw(-timezone)] } {
- return -code error \
- -errorcode [list CLOCK gmtWithTimezone] \
- "cannot use -gmt and -timezone in same call"
- }
- if { [catch { expr { wide($clockval) } } result] } {
- return -code error \
- "expected integer but got \"$clockval\""
- }
- if { ![string is boolean $gmt] } {
- return -code error \
- "expected boolean value but got \"$gmt\""
- } else {
- if { $gmt } {
- set timezone :GMT
- }
- }
-
- EnterLocale $locale oldLocale
-
- set changeover [mc GREGORIAN_CHANGE_DATE]
-
- if {[catch {SetupTimeZone $timezone} retval opts]} {
- dict unset opts -errorinfo
- return -options $opts $retval
- }
-
- set status [catch {
-
- foreach { quantity unit } $offsets {
-
- switch -exact -- $unit {
-
- years - year {
- set clockval \
- [AddMonths [expr { 12 * $quantity }] \
- $clockval $timezone $changeover]
- }
- months - month {
- set clockval [AddMonths $quantity $clockval $timezone \
- $changeover]
- }
-
- weeks - week {
- set clockval [AddDays [expr { 7 * $quantity }] \
- $clockval $timezone $changeover]
- }
- days - day {
- set clockval [AddDays $quantity $clockval $timezone \
- $changeover]
- }
-
- hours - hour {
- set clockval [expr { 3600 * $quantity + $clockval }]
- }
- minutes - minute {
- set clockval [expr { 60 * $quantity + $clockval }]
- }
- seconds - second {
- set clockval [expr { $quantity + $clockval }]
- }
-
- default {
- error "unknown unit \"$unit\", must be \
- years, months, weeks, days, hours, minutes or seconds" \
- "unknown unit \"$unit\", must be \
- years, months, weeks, days, hours, minutes or seconds" \
- [list CLOCK badUnit $unit]
- }
- }
- }
- } result opts]
-
- # Restore the locale
-
- if { [info exists oldLocale] } {
- mclocale $oldLocale
- }
-
- if { $status == 1 } {
- if { [lindex [dict get $opts -errorcode] 0] eq {CLOCK} } {
- dict unset opts -errorinfo
- }
- return -options $opts $result
- } else {
- return $clockval
- }
-
-}
-
-#----------------------------------------------------------------------
-#
-# AddMonths --
-#
-# Add a given number of months to a given clock value in a given
-# time zone.
-#
-# Parameters:
-# months - Number of months to add (may be negative)
-# clockval - Seconds since the epoch before the operation
-# timezone - Time zone in which the operation is to be performed
-#
-# Results:
-# Returns the new clock value as a number of seconds since
-# the epoch.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AddMonths { months clockval timezone changeover } {
-
- variable DaysInRomanMonthInCommonYear
- variable DaysInRomanMonthInLeapYear
- variable TZData
-
- # Convert the time to year, month, day, and fraction of day.
-
- set date [GetDateFields $clockval $TZData($timezone) $changeover]
- dict set date secondOfDay [expr { [dict get $date localSeconds]
- % 86400 }]
- dict set date tzName $timezone
-
- # Add the requisite number of months
-
- set m [dict get $date month]
- incr m $months
- incr m -1
- set delta [expr { $m / 12 }]
- set mm [expr { $m % 12 }]
- dict set date month [expr { $mm + 1 }]
- dict incr date year $delta
-
- # If the date doesn't exist in the current month, repair it
-
- if { [IsGregorianLeapYear $date] } {
- set hath [lindex $DaysInRomanMonthInLeapYear $mm]
- } else {
- set hath [lindex $DaysInRomanMonthInCommonYear $mm]
- }
- if { [dict get $date dayOfMonth] > $hath } {
- dict set date dayOfMonth $hath
- }
-
- # Reconvert to a number of seconds
-
- set date [GetJulianDayFromEraYearMonthDay \
- $date[set date {}]\
- $changeover]
- dict set date localSeconds \
- [expr { -210866803200
- + ( 86400 * wide([dict get $date julianDay]) )
- + [dict get $date secondOfDay] }]
- set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) \
- $changeover]
-
- return [dict get $date seconds]
-
-}
-
-#----------------------------------------------------------------------
-#
-# AddDays --
-#
-# Add a given number of days to a given clock value in a given
-# time zone.
-#
-# Parameters:
-# days - Number of days to add (may be negative)
-# clockval - Seconds since the epoch before the operation
-# timezone - Time zone in which the operation is to be performed
-# changeover - Julian Day on which the Gregorian calendar was adopted
-# in the target locale.
-#
-# Results:
-# Returns the new clock value as a number of seconds since
-# the epoch.
-#
-# Side effects:
-# None.
-#
-#----------------------------------------------------------------------
-
-proc ::tcl::clock::AddDays { days clockval timezone changeover } {
-
- variable TZData
-
- # Convert the time to Julian Day
-
- set date [GetDateFields $clockval $TZData($timezone) $changeover]
- dict set date secondOfDay [expr { [dict get $date localSeconds]
- % 86400 }]
- dict set date tzName $timezone
-
- # Add the requisite number of days
-
- dict incr date julianDay $days
-
- # Reconvert to a number of seconds
-
- dict set date localSeconds \
- [expr { -210866803200
- + ( 86400 * wide([dict get $date julianDay]) )
- + [dict get $date secondOfDay] }]
- set date [ConvertLocalToUTC $date[set date {}] $TZData($timezone) \
- $changeover]
-
- return [dict get $date seconds]
-
}
#----------------------------------------------------------------------
#
-# mc --
+# ChangeCurrentLocale --
#
-# Wrapper around ::msgcat::mc that caches the result according
-# to the locale.
+# The global locale was changed within msgcat.
+# Clears the buffered parse functions of the current locale.
#
# Parameters:
-# Accepts the name of the message to retrieve.
+# loclist (ignored)
#
# Results:
-# Returns the message text.
+# None.
#
# Side effects:
-# Caches the message text.
-#
-# Notes:
-# Only the single-argument version of [mc] is supported.
+# Buffered parse functions are cleared.
#
#----------------------------------------------------------------------
-proc ::tcl::clock::mc { name } {
- variable McLoaded
- set Locale [mclocale]
- if { [dict exists $McLoaded $Locale $name] } {
- return [dict get $McLoaded $Locale $name]
- } else {
- set val [::msgcat::mc $name]
- dict set McLoaded $Locale $name $val
- return $val
- }
+proc ::tcl::clock::ChangeCurrentLocale {args} {
+ ::tcl::unsupported::clock::configure -current-locale [lindex $args 0]
}
#----------------------------------------------------------------------
@@ -4671,25 +2087,17 @@ proc ::tcl::clock::mc { name } {
#----------------------------------------------------------------------
proc ::tcl::clock::ClearCaches {} {
-
- variable FormatProc
- variable LocaleNumeralCache
- variable McLoaded
- variable CachedSystemTimeZone
+ variable LocFmtMap
+ variable mcMergedCat
variable TimeZoneBad
- foreach p [info procs [namespace current]::scanproc'*] {
- rename $p {}
- }
- foreach p [info procs [namespace current]::formatproc'*] {
- rename $p {}
- }
+ # tell backend - should invalidate:
+ ::tcl::unsupported::clock::configure -clear
+
+ # clear msgcat cache:
+ set mcMergedCat [dict create]
- catch {unset FormatProc}
- set LocaleNumeralCache {}
- set McLoaded {}
- catch {unset CachedSystemTimeZone}
+ set LocFmtMap {}
set TimeZoneBad {}
InitTZData
-
}
diff --git a/library/cookiejar/cookiejar.tcl b/library/cookiejar/cookiejar.tcl
new file mode 100644
index 0000000..c9c0b1c
--- /dev/null
+++ b/library/cookiejar/cookiejar.tcl
@@ -0,0 +1,746 @@
+# cookiejar.tcl --
+#
+# Implementation of an HTTP cookie storage engine using SQLite. The
+# implementation is done as a TclOO class, and includes a punycode
+# encoder and decoder (though only the encoder is currently used).
+#
+# See the file "license.terms" for information on usage and redistribution of
+# this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+# Dependencies
+package require Tcl 8.6-
+package require http 2.8.4
+package require sqlite3
+package require tcl::idna 1.0
+
+#
+# Configuration for the cookiejar package, plus basic support procedures.
+#
+
+# This is the class that we are creating
+if {![llength [info commands ::http::cookiejar]]} {
+ ::oo::class create ::http::cookiejar
+}
+
+namespace eval [info object namespace ::http::cookiejar] {
+ proc setInt {*var val} {
+ upvar 1 ${*var} var
+ if {[catch {incr dummy $val} msg]} {
+ return -code error $msg
+ }
+ set var $val
+ }
+ proc setInterval {trigger *var val} {
+ upvar 1 ${*var} var
+ if {![string is integer -strict $val] || $val < 1} {
+ return -code error "expected positive integer but got \"$val\""
+ }
+ set var $val
+ {*}$trigger
+ }
+ proc setBool {*var val} {
+ upvar 1 ${*var} var
+ if {[catch {if {$val} {}} msg]} {
+ return -code error $msg
+ }
+ set var [expr {!!$val}]
+ }
+
+ proc setLog {*var val} {
+ upvar 1 ${*var} var
+ set var [::tcl::prefix match -message "log level" \
+ {debug info warn error} $val]
+ }
+
+ # Keep this in sync with pkgIndex.tcl and with the install directories in
+ # Makefiles
+ variable version 0.2.0
+
+ variable domainlist \
+ https://publicsuffix.org/list/public_suffix_list.dat
+ variable domainfile \
+ [file join [file dirname [info script]] public_suffix_list.dat.gz]
+ # The list is directed to from http://publicsuffix.org/list/
+ variable loglevel info
+ variable vacuumtrigger 200
+ variable retainlimit 100
+ variable offline false
+ variable purgeinterval 60000
+ variable refreshinterval 10000000
+ variable domaincache {}
+
+ # Some support procedures, none particularly useful in general
+ namespace eval support {
+ # Set up a logger if the http package isn't actually loaded yet.
+ if {![llength [info commands ::http::Log]]} {
+ proc ::http::Log args {
+ # Do nothing by default...
+ }
+ }
+
+ namespace export *
+ proc locn {secure domain path {key ""}} {
+ if {$key eq ""} {
+ format "%s://%s%s" [expr {$secure?"https":"http"}] \
+ [::tcl::idna encode $domain] $path
+ } else {
+ format "%s://%s%s?%s" \
+ [expr {$secure?"https":"http"}] [::tcl::idna encode $domain] \
+ $path $key
+ }
+ }
+ proc splitDomain domain {
+ set pieces [split $domain "."]
+ for {set i [llength $pieces]} {[incr i -1] >= 0} {} {
+ lappend result [join [lrange $pieces $i end] "."]
+ }
+ return $result
+ }
+ proc splitPath path {
+ set pieces [split [string trimleft $path "/"] "/"]
+ set result /
+ for {set j 0} {$j < [llength $pieces]} {incr j} {
+ lappend result /[join [lrange $pieces 0 $j] "/"]
+ }
+ return $result
+ }
+ proc isoNow {} {
+ set ms [clock milliseconds]
+ set ts [expr {$ms / 1000}]
+ set ms [format %03d [expr {$ms % 1000}]]
+ clock format $ts -format "%Y%m%dT%H%M%S.${ms}Z" -gmt 1
+ }
+ proc log {level msg args} {
+ namespace upvar [info object namespace ::http::cookiejar] \
+ loglevel loglevel
+ set who [uplevel 1 self class]
+ set mth [uplevel 1 self method]
+ set map {debug 0 info 1 warn 2 error 3}
+ if {[string map $map $level] >= [string map $map $loglevel]} {
+ set msg [format $msg {*}$args]
+ set LVL [string toupper $level]
+ ::http::Log "[isoNow] $LVL $who $mth - $msg"
+ }
+ }
+ }
+}
+
+# Now we have enough information to provide the package.
+package provide cookiejar \
+ [set [info object namespace ::http::cookiejar]::version]
+
+# The implementation of the cookiejar package
+::oo::define ::http::cookiejar {
+ self {
+ method configure {{optionName "\x00\x00"} {optionValue "\x00\x00"}} {
+ set tbl {
+ -domainfile {domainfile set}
+ -domainlist {domainlist set}
+ -domainrefresh {refreshinterval setInterval}
+ -loglevel {loglevel setLog}
+ -offline {offline setBool}
+ -purgeold {purgeinterval setInterval}
+ -retain {retainlimit setInt}
+ -vacuumtrigger {vacuumtrigger setInt}
+ }
+ dict lappend tbl -domainrefresh [namespace code {
+ my IntervalTrigger PostponeRefresh
+ }]
+ dict lappend tbl -purgeold [namespace code {
+ my IntervalTrigger PostponePurge
+ }]
+ if {$optionName eq "\x00\x00"} {
+ return [dict keys $tbl]
+ }
+ set opt [::tcl::prefix match -message "option" \
+ [dict keys $tbl] $optionName]
+ set setter [lassign [dict get $tbl $opt] varname]
+ namespace upvar [namespace current] $varname var
+ if {$optionValue ne "\x00\x00"} {
+ {*}$setter var $optionValue
+ }
+ return $var
+ }
+
+ method IntervalTrigger {method} {
+ # TODO: handle subclassing
+ foreach obj [info class instances [self]] {
+ [info object namespace $obj]::my $method
+ }
+ }
+ }
+
+ variable purgeTimer deletions refreshTimer
+ constructor {{path ""}} {
+ namespace import [info object namespace [self class]]::support::*
+
+ if {$path eq ""} {
+ sqlite3 [namespace current]::db :memory:
+ set storeorigin "constructed cookie store in memory"
+ } else {
+ sqlite3 [namespace current]::db $path
+ db timeout 500
+ set storeorigin "loaded cookie store from $path"
+ }
+
+ set deletions 0
+ db transaction {
+ db eval {
+ --;# Store the persistent cookies in this table.
+ --;# Deletion policy: once they expire, or if explicitly
+ --;# killed.
+ CREATE TABLE IF NOT EXISTS persistentCookies (
+ id INTEGER PRIMARY KEY,
+ secure INTEGER NOT NULL,
+ domain TEXT NOT NULL COLLATE NOCASE,
+ path TEXT NOT NULL,
+ key TEXT NOT NULL,
+ value TEXT NOT NULL,
+ originonly INTEGER NOT NULL,
+ expiry INTEGER NOT NULL,
+ lastuse INTEGER NOT NULL,
+ creation INTEGER NOT NULL);
+ CREATE UNIQUE INDEX IF NOT EXISTS persistentUnique
+ ON persistentCookies (domain, path, key);
+ CREATE INDEX IF NOT EXISTS persistentLookup
+ ON persistentCookies (domain, path);
+
+ --;# Store the session cookies in this table.
+ --;# Deletion policy: at cookiejar instance deletion, if
+ --;# explicitly killed, or if the number of session cookies is
+ --;# too large and the cookie has not been used recently.
+ CREATE TEMP TABLE sessionCookies (
+ id INTEGER PRIMARY KEY,
+ secure INTEGER NOT NULL,
+ domain TEXT NOT NULL COLLATE NOCASE,
+ path TEXT NOT NULL,
+ key TEXT NOT NULL,
+ originonly INTEGER NOT NULL,
+ value TEXT NOT NULL,
+ lastuse INTEGER NOT NULL,
+ creation INTEGER NOT NULL);
+ CREATE UNIQUE INDEX sessionUnique
+ ON sessionCookies (domain, path, key);
+ CREATE INDEX sessionLookup ON sessionCookies (domain, path);
+
+ --;# View to allow for simple looking up of a cookie.
+ --;# Deletion policy: NOT SUPPORTED via this view.
+ CREATE TEMP VIEW cookies AS
+ SELECT id, domain, (
+ CASE originonly WHEN 1 THEN path ELSE '.' || path END
+ ) AS path, key, value, secure, 1 AS persistent
+ FROM persistentCookies
+ UNION
+ SELECT id, domain, (
+ CASE originonly WHEN 1 THEN path ELSE '.' || path END
+ ) AS path, key, value, secure, 0 AS persistent
+ FROM sessionCookies;
+
+ --;# Encoded domain permission policy; if forbidden is 1, no
+ --;# cookie may be ever set for the domain, and if forbidden
+ --;# is 0, cookies *may* be created for the domain (overriding
+ --;# the forbiddenSuper table).
+ --;# Deletion policy: normally not modified.
+ CREATE TABLE IF NOT EXISTS domains (
+ domain TEXT PRIMARY KEY NOT NULL,
+ forbidden INTEGER NOT NULL);
+
+ --;# Domains that may not have a cookie defined for direct
+ --;# child domains of them.
+ --;# Deletion policy: normally not modified.
+ CREATE TABLE IF NOT EXISTS forbiddenSuper (
+ domain TEXT PRIMARY KEY);
+
+ --;# When we last retrieved the domain list.
+ CREATE TABLE IF NOT EXISTS domainCacheMetadata (
+ id INTEGER PRIMARY KEY,
+ retrievalDate INTEGER,
+ installDate INTEGER);
+ }
+
+ set cookieCount "no"
+ db eval {
+ SELECT COUNT(*) AS cookieCount FROM persistentCookies
+ }
+ log info "%s with %s entries" $storeorigin $cookieCount
+
+ my PostponePurge
+
+ if {$path ne ""} {
+ if {[db exists {SELECT 1 FROM domains}]} {
+ my RefreshDomains
+ } else {
+ my InitDomainList
+ my PostponeRefresh
+ }
+ } else {
+ set data [my GetDomainListOffline metadata]
+ my InstallDomainData $data $metadata
+ my PostponeRefresh
+ }
+ }
+ }
+
+ method PostponePurge {} {
+ namespace upvar [info object namespace [self class]] \
+ purgeinterval interval
+ catch {after cancel $purgeTimer}
+ set purgeTimer [after $interval [namespace code {my PurgeCookies}]]
+ }
+
+ method PostponeRefresh {} {
+ namespace upvar [info object namespace [self class]] \
+ refreshinterval interval
+ catch {after cancel $refreshTimer}
+ set refreshTimer [after $interval [namespace code {my RefreshDomains}]]
+ }
+
+ method RefreshDomains {} {
+ # TODO: domain list refresh policy
+ my PostponeRefresh
+ }
+
+ method HttpGet {url {timeout 0} {maxRedirects 5}} {
+ for {set r 0} {$r < $maxRedirects} {incr r} {
+ set tok [::http::geturl $url -timeout $timeout]
+ try {
+ if {[::http::status $tok] eq "timeout"} {
+ return -code error "connection timed out"
+ } elseif {[::http::ncode $tok] == 200} {
+ return [::http::data $tok]
+ } elseif {[::http::ncode $tok] >= 400} {
+ return -code error [::http::error $tok]
+ } elseif {[dict exists [::http::meta $tok] Location]} {
+ set url [dict get [::http::meta $tok] Location]
+ continue
+ }
+ return -code error \
+ "unexpected state: [::http::code $tok]"
+ } finally {
+ ::http::cleanup $tok
+ }
+ }
+ return -code error "too many redirects"
+ }
+ method GetDomainListOnline {metaVar} {
+ upvar 1 $metaVar meta
+ namespace upvar [info object namespace [self class]] \
+ domainlist url domaincache cache
+ lassign $cache when data
+ if {$when > [clock seconds] - 3600} {
+ log debug "using cached value created at %s" \
+ [clock format $when -format {%Y%m%dT%H%M%SZ} -gmt 1]
+ dict set meta retrievalDate $when
+ return $data
+ }
+ log debug "loading domain list from %s" $url
+ try {
+ set when [clock seconds]
+ set data [my HttpGet $url]
+ set cache [list $when $data]
+ # TODO: Should we use the Last-Modified header instead?
+ dict set meta retrievalDate $when
+ return $data
+ } on error msg {
+ log error "failed to fetch list of forbidden cookie domains from %s: %s" \
+ $url $msg
+ return {}
+ }
+ }
+ method GetDomainListOffline {metaVar} {
+ upvar 1 $metaVar meta
+ namespace upvar [info object namespace [self class]] \
+ domainfile filename
+ log debug "loading domain list from %s" $filename
+ try {
+ set f [open $filename]
+ try {
+ if {[string match *.gz $filename]} {
+ zlib push gunzip $f
+ }
+ fconfigure $f -encoding utf-8
+ dict set meta retrievalDate [file mtime $filename]
+ return [read $f]
+ } finally {
+ close $f
+ }
+ } on error {msg opt} {
+ log error "failed to read list of forbidden cookie domains from %s: %s" \
+ $filename $msg
+ return -options $opt $msg
+ }
+ }
+ method InitDomainList {} {
+ namespace upvar [info object namespace [self class]] \
+ offline offline
+ if {!$offline} {
+ try {
+ set data [my GetDomainListOnline metadata]
+ if {[string length $data]} {
+ my InstallDomainData $data $metadata
+ return
+ }
+ } on error {} {
+ log warn "attempting to fall back to built in version"
+ }
+ }
+ set data [my GetDomainListOffline metadata]
+ my InstallDomainData $data $metadata
+ }
+
+ method InstallDomainData {data meta} {
+ set n [db total_changes]
+ db transaction {
+ foreach line [split $data "\n"] {
+ if {[string trim $line] eq ""} {
+ continue
+ } elseif {[string match //* $line]} {
+ continue
+ } elseif {[string match !* $line]} {
+ set line [string range $line 1 end]
+ set idna [string tolower [::tcl::idna encode $line]]
+ set utf [::tcl::idna decode [string tolower $line]]
+ db eval {
+ INSERT OR REPLACE INTO domains (domain, forbidden)
+ VALUES ($utf, 0);
+ }
+ if {$idna ne $utf} {
+ db eval {
+ INSERT OR REPLACE INTO domains (domain, forbidden)
+ VALUES ($idna, 0);
+ }
+ }
+ } else {
+ if {[string match {\*.*} $line]} {
+ set line [string range $line 2 end]
+ set idna [string tolower [::tcl::idna encode $line]]
+ set utf [::tcl::idna decode [string tolower $line]]
+ db eval {
+ INSERT OR REPLACE INTO forbiddenSuper (domain)
+ VALUES ($utf);
+ }
+ if {$idna ne $utf} {
+ db eval {
+ INSERT OR REPLACE INTO forbiddenSuper (domain)
+ VALUES ($idna);
+ }
+ }
+ } else {
+ set idna [string tolower [::tcl::idna encode $line]]
+ set utf [::tcl::idna decode [string tolower $line]]
+ }
+ db eval {
+ INSERT OR REPLACE INTO domains (domain, forbidden)
+ VALUES ($utf, 1);
+ }
+ if {$idna ne $utf} {
+ db eval {
+ INSERT OR REPLACE INTO domains (domain, forbidden)
+ VALUES ($idna, 1);
+ }
+ }
+ }
+ if {$utf ne [::tcl::idna decode [string tolower $idna]]} {
+ log warn "mismatch in IDNA handling for %s (%d, %s, %s)" \
+ $idna $line $utf [::tcl::idna decode $idna]
+ }
+ }
+
+ dict with meta {
+ set installDate [clock seconds]
+ db eval {
+ INSERT OR REPLACE INTO domainCacheMetadata
+ (id, retrievalDate, installDate)
+ VALUES (1, $retrievalDate, $installDate);
+ }
+ }
+ }
+ set n [expr {[db total_changes] - $n}]
+ log info "constructed domain info with %d entries" $n
+ }
+
+ # This forces the rebuild of the domain data, loading it from
+ method forceLoadDomainData {} {
+ db transaction {
+ db eval {
+ DELETE FROM domains;
+ DELETE FROM forbiddenSuper;
+ INSERT OR REPLACE INTO domainCacheMetadata
+ (id, retrievalDate, installDate)
+ VALUES (1, -1, -1);
+ }
+ my InitDomainList
+ }
+ }
+
+ destructor {
+ catch {
+ after cancel $purgeTimer
+ }
+ catch {
+ after cancel $refreshTimer
+ }
+ catch {
+ db close
+ }
+ return
+ }
+
+ method GetCookiesForHostAndPath {listVar secure host path fullhost} {
+ upvar 1 $listVar result
+ log debug "check for cookies for %s" [locn $secure $host $path]
+ set exact [expr {$host eq $fullhost}]
+ db eval {
+ SELECT key, value FROM persistentCookies
+ WHERE domain = $host AND path = $path AND secure <= $secure
+ AND (NOT originonly OR domain = $fullhost)
+ AND originonly = $exact
+ } {
+ lappend result $key $value
+ db eval {
+ UPDATE persistentCookies SET lastuse = $now WHERE id = $id
+ }
+ }
+ set now [clock seconds]
+ db eval {
+ SELECT id, key, value FROM sessionCookies
+ WHERE domain = $host AND path = $path AND secure <= $secure
+ AND (NOT originonly OR domain = $fullhost)
+ AND originonly = $exact
+ } {
+ lappend result $key $value
+ db eval {
+ UPDATE sessionCookies SET lastuse = $now WHERE id = $id
+ }
+ }
+ }
+
+ method getCookies {proto host path} {
+ set result {}
+ set paths [splitPath $path]
+ if {[regexp {[^0-9.]} $host]} {
+ set domains [splitDomain [string tolower [::tcl::idna encode $host]]]
+ } else {
+ # Ugh, it's a numeric domain! Restrict it to just itself...
+ set domains [list $host]
+ }
+ set secure [string equal -nocase $proto "https"]
+ # Open question: how to move these manipulations into the database
+ # engine (if that's where they *should* be).
+ #
+ # Suggestion from kbk:
+ #LENGTH(theColumn) <= LENGTH($queryStr) AND
+ #SUBSTR(theColumn, LENGTH($queryStr) LENGTH(theColumn)+1) = $queryStr
+ #
+ # However, we instead do most of the work in Tcl because that lets us
+ # do the splitting exactly right, and it's far easier to work with
+ # strings in Tcl than in SQL.
+ db transaction {
+ foreach domain $domains {
+ foreach p $paths {
+ my GetCookiesForHostAndPath result $secure $domain $p $host
+ }
+ }
+ return $result
+ }
+ }
+
+ method BadDomain options {
+ if {![dict exists $options domain]} {
+ log error "no domain present in options"
+ return 0
+ }
+ dict with options {}
+ if {$domain ne $origin} {
+ log debug "cookie domain varies from origin (%s, %s)" \
+ $domain $origin
+ if {[string match .* $domain]} {
+ set dotd $domain
+ } else {
+ set dotd .$domain
+ }
+ if {![string equal -length [string length $dotd] \
+ [string reverse $dotd] [string reverse $origin]]} {
+ log warn "bad cookie: domain not suffix of origin"
+ return 1
+ }
+ }
+ if {![regexp {[^0-9.]} $domain]} {
+ if {$domain eq $origin} {
+ # May set for itself
+ return 0
+ }
+ log warn "bad cookie: for a numeric address"
+ return 1
+ }
+ db eval {
+ SELECT forbidden FROM domains WHERE domain = $domain
+ } {
+ if {$forbidden} {
+ log warn "bad cookie: for a forbidden address"
+ }
+ return $forbidden
+ }
+ if {[regexp {^[^.]+\.(.+)$} $domain -> super] && [db exists {
+ SELECT 1 FROM forbiddenSuper WHERE domain = $super
+ }]} then {
+ log warn "bad cookie: for a forbidden address"
+ return 1
+ }
+ return 0
+ }
+
+ # A defined extension point to allow users to easily impose extra policies
+ # on whether to accept cookies from a particular domain and path.
+ method policyAllow {operation domain path} {
+ return true
+ }
+
+ method storeCookie {options} {
+ db transaction {
+ if {[my BadDomain $options]} {
+ return
+ }
+ set now [clock seconds]
+ set persistent [dict exists $options expires]
+ dict with options {}
+ if {!$persistent} {
+ if {![my policyAllow session $domain $path]} {
+ log warn "bad cookie: $domain prohibited by user policy"
+ return
+ }
+ db eval {
+ INSERT OR REPLACE INTO sessionCookies (
+ secure, domain, path, key, value, originonly, creation,
+ lastuse)
+ VALUES ($secure, $domain, $path, $key, $value, $hostonly,
+ $now, $now);
+ DELETE FROM persistentCookies
+ WHERE domain = $domain AND path = $path AND key = $key
+ AND secure <= $secure AND originonly = $hostonly
+ }
+ incr deletions [db changes]
+ log debug "defined session cookie for %s" \
+ [locn $secure $domain $path $key]
+ } elseif {$expires < $now} {
+ if {![my policyAllow delete $domain $path]} {
+ log warn "bad cookie: $domain prohibited by user policy"
+ return
+ }
+ db eval {
+ DELETE FROM persistentCookies
+ WHERE domain = $domain AND path = $path AND key = $key
+ AND secure <= $secure AND originonly = $hostonly
+ }
+ set del [db changes]
+ db eval {
+ DELETE FROM sessionCookies
+ WHERE domain = $domain AND path = $path AND key = $key
+ AND secure <= $secure AND originonly = $hostonly
+ }
+ incr deletions [incr del [db changes]]
+ log debug "deleted %d cookies for %s" \
+ $del [locn $secure $domain $path $key]
+ } else {
+ if {![my policyAllow set $domain $path]} {
+ log warn "bad cookie: $domain prohibited by user policy"
+ return
+ }
+ db eval {
+ INSERT OR REPLACE INTO persistentCookies (
+ secure, domain, path, key, value, originonly, expiry,
+ creation, lastuse)
+ VALUES ($secure, $domain, $path, $key, $value, $hostonly,
+ $expires, $now, $now);
+ DELETE FROM sessionCookies
+ WHERE domain = $domain AND path = $path AND key = $key
+ AND secure <= $secure AND originonly = $hostonly
+ }
+ incr deletions [db changes]
+ log debug "defined persistent cookie for %s, expires at %s" \
+ [locn $secure $domain $path $key] \
+ [clock format $expires]
+ }
+ }
+ }
+
+ method PurgeCookies {} {
+ namespace upvar [info object namespace [self class]] \
+ vacuumtrigger trigger retainlimit retain
+ my PostponePurge
+ set now [clock seconds]
+ log debug "purging cookies that expired before %s" [clock format $now]
+ db transaction {
+ db eval {
+ DELETE FROM persistentCookies WHERE expiry < $now
+ }
+ incr deletions [db changes]
+ db eval {
+ DELETE FROM persistentCookies WHERE id IN (
+ SELECT id FROM persistentCookies ORDER BY lastuse ASC
+ LIMIT -1 OFFSET $retain)
+ }
+ incr deletions [db changes]
+ db eval {
+ DELETE FROM sessionCookies WHERE id IN (
+ SELECT id FROM sessionCookies ORDER BY lastuse
+ LIMIT -1 OFFSET $retain)
+ }
+ incr deletions [db changes]
+ }
+
+ # Once we've deleted a fair bit, vacuum the database. Must be done
+ # outside a transaction.
+ if {$deletions > $trigger} {
+ set deletions 0
+ log debug "vacuuming cookie database"
+ catch {
+ db eval {
+ VACUUM
+ }
+ }
+ }
+ }
+
+ forward Database db
+
+ method lookup {{host ""} {key ""}} {
+ set host [string tolower [::tcl::idna encode $host]]
+ db transaction {
+ if {$host eq ""} {
+ set result {}
+ db eval {
+ SELECT DISTINCT domain FROM cookies
+ ORDER BY domain
+ } {
+ lappend result [::tcl::idna decode [string tolower $domain]]
+ }
+ return $result
+ } elseif {$key eq ""} {
+ set result {}
+ db eval {
+ SELECT DISTINCT key FROM cookies
+ WHERE domain = $host
+ ORDER BY key
+ } {
+ lappend result $key
+ }
+ return $result
+ } else {
+ db eval {
+ SELECT value FROM cookies
+ WHERE domain = $host AND key = $key
+ LIMIT 1
+ } {
+ return $value
+ }
+ return -code error "no such key for that host"
+ }
+ }
+ }
+}
+
+# Local variables:
+# mode: tcl
+# fill-column: 78
+# End:
diff --git a/library/cookiejar/idna.tcl b/library/cookiejar/idna.tcl
new file mode 100644
index 0000000..dc25cd8
--- /dev/null
+++ b/library/cookiejar/idna.tcl
@@ -0,0 +1,292 @@
+# idna.tcl --
+#
+# Implementation of IDNA (Internationalized Domain Names for
+# Applications) encoding/decoding system, built on a punycode engine
+# developed directly from the code in RFC 3492, Appendix C (with
+# substantial modifications).
+#
+# This implementation includes code from that RFC, translated to Tcl; the
+# other parts are:
+# Copyright © 2014 Donal K. Fellows
+#
+# See the file "license.terms" for information on usage and redistribution of
+# this file, and for a DISCLAIMER OF ALL WARRANTIES.
+
+namespace eval ::tcl::idna {
+ namespace ensemble create -command puny -map {
+ encode punyencode
+ decode punydecode
+ }
+ namespace ensemble create -command ::tcl::idna -map {
+ encode IDNAencode
+ decode IDNAdecode
+ puny puny
+ version {::apply {{} {package present tcl::idna} ::}}
+ }
+
+ proc IDNAencode hostname {
+ set parts {}
+ # Split term from RFC 3490, Sec 3.1
+ foreach part [split $hostname "\x2E\u3002\uFF0E\uFF61"] {
+ if {[regexp {[^-A-Za-z0-9]} $part]} {
+ if {[regexp {[^-A-Za-z0-9\xA1-\uFFFF]} $part ch]} {
+ scan $ch %c c
+ if {$ch < "!" || $ch > "~"} {
+ set ch [format "\\u%04x" $c]
+ }
+ throw [list IDNA INVALID_NAME_CHARACTER $ch] \
+ "bad character \"$ch\" in DNS name"
+ }
+ set part xn--[punyencode $part]
+ # Length restriction from RFC 5890, Sec 2.3.1
+ if {[string length $part] > 63} {
+ throw [list IDNA OVERLONG_PART $part] \
+ "hostname part too long"
+ }
+ }
+ lappend parts $part
+ }
+ return [join $parts .]
+ }
+ proc IDNAdecode hostname {
+ set parts {}
+ # Split term from RFC 3490, Sec 3.1
+ foreach part [split $hostname "\x2E\u3002\uFF0E\uFF61"] {
+ if {[string match -nocase "xn--*" $part]} {
+ set part [punydecode [string range $part 4 end]]
+ }
+ lappend parts $part
+ }
+ return [join $parts .]
+ }
+
+ variable digits [split "abcdefghijklmnopqrstuvwxyz0123456789" ""]
+ # Bootstring parameters for Punycode
+ variable base 36
+ variable tmin 1
+ variable tmax 26
+ variable skew 38
+ variable damp 700
+ variable initial_bias 72
+ variable initial_n 0x80
+
+ variable max_codepoint 0x10FFFF
+
+ proc adapt {delta first numchars} {
+ variable base
+ variable tmin
+ variable tmax
+ variable damp
+ variable skew
+
+ set delta [expr {$delta / ($first ? $damp : 2)}]
+ incr delta [expr {$delta / $numchars}]
+ set k 0
+ while {$delta > ($base - $tmin) * $tmax / 2} {
+ set delta [expr {$delta / ($base-$tmin)}]
+ incr k $base
+ }
+ return [expr {$k + ($base-$tmin+1) * $delta / ($delta+$skew)}]
+ }
+
+ # Main punycode encoding function
+ proc punyencode {string {case ""}} {
+ variable digits
+ variable tmin
+ variable tmax
+ variable base
+ variable initial_n
+ variable initial_bias
+
+ if {![string is boolean $case]} {
+ return -code error "\"$case\" must be boolean"
+ }
+
+ set in {}
+ foreach char [set string [split $string ""]] {
+ scan $char "%c" ch
+ lappend in $ch
+ }
+ set output {}
+
+ # Initialize the state:
+ set n $initial_n
+ set delta 0
+ set bias $initial_bias
+
+ # Handle the basic code points:
+ foreach ch $string {
+ if {$ch < "\x80"} {
+ if {$case eq ""} {
+ append output $ch
+ } elseif {[string is true $case]} {
+ append output [string toupper $ch]
+ } elseif {[string is false $case]} {
+ append output [string tolower $ch]
+ }
+ }
+ }
+
+ set b [string length $output]
+
+ # h is the number of code points that have been handled, b is the
+ # number of basic code points.
+
+ if {$b > 0} {
+ append output "-"
+ }
+
+ # Main encoding loop:
+
+ for {set h $b} {$h < [llength $in]} {incr delta; incr n} {
+ # All non-basic code points < n have been handled already. Find
+ # the next larger one:
+
+ set m inf
+ foreach ch $in {
+ if {$ch >= $n && $ch < $m} {
+ set m $ch
+ }
+ }
+
+ # Increase delta enough to advance the decoder's <n,i> state to
+ # <m,0>, but guard against overflow:
+
+ if {$m-$n > (0xFFFFFFFF-$delta)/($h+1)} {
+ throw {PUNYCODE OVERFLOW} "overflow in delta computation"
+ }
+ incr delta [expr {($m-$n) * ($h+1)}]
+ set n $m
+
+ foreach ch $in {
+ if {$ch < $n && ([incr delta] & 0xFFFFFFFF) == 0} {
+ throw {PUNYCODE OVERFLOW} "overflow in delta computation"
+ }
+
+ if {$ch != $n} {
+ continue
+ }
+
+ # Represent delta as a generalized variable-length integer:
+
+ for {set q $delta; set k $base} true {incr k $base} {
+ set t [expr {min(max($k-$bias, $tmin), $tmax)}]
+ if {$q < $t} {
+ break
+ }
+ append output \
+ [lindex $digits [expr {$t + ($q-$t)%($base-$t)}]]
+ set q [expr {($q-$t) / ($base-$t)}]
+ }
+
+ append output [lindex $digits $q]
+ set bias [adapt $delta [expr {$h==$b}] [expr {$h+1}]]
+ set delta 0
+ incr h
+ }
+ }
+
+ return $output
+ }
+
+ # Main punycode decode function
+ proc punydecode {string {case ""}} {
+ variable tmin
+ variable tmax
+ variable base
+ variable initial_n
+ variable initial_bias
+ variable max_codepoint
+
+ if {![string is boolean $case]} {
+ return -code error "\"$case\" must be boolean"
+ }
+
+ # Initialize the state:
+
+ set n $initial_n
+ set i 0
+ set first 1
+ set bias $initial_bias
+
+ # Split the string into the "real" ASCII characters and the ones to
+ # feed into the main decoder. Note that we don't need to check the
+ # result of [regexp] because that RE will technically match any string
+ # at all.
+
+ regexp {^(?:(.*)-)?([^-]*)$} $string -> pre post
+ if {[string is true -strict $case]} {
+ set pre [string toupper $pre]
+ } elseif {[string is false -strict $case]} {
+ set pre [string tolower $pre]
+ }
+ set output [split $pre ""]
+ set out [llength $output]
+
+ # Main decoding loop:
+
+ for {set in 0} {$in < [string length $post]} {incr in} {
+ # Decode a generalized variable-length integer into delta, which
+ # gets added to i. The overflow checking is easier if we increase
+ # i as we go, then subtract off its starting value at the end to
+ # obtain delta.
+
+ for {set oldi $i; set w 1; set k $base} 1 {incr in} {
+ if {[set ch [string index $post $in]] eq ""} {
+ throw {PUNYCODE BAD_INPUT LENGTH} "exceeded input data"
+ }
+ if {[string match -nocase {[a-z]} $ch]} {
+ scan [string toupper $ch] %c digit
+ incr digit -65
+ } elseif {[string match {[0-9]} $ch]} {
+ set digit [expr {$ch + 26}]
+ } else {
+ throw {PUNYCODE BAD_INPUT CHAR} \
+ "bad decode character \"$ch\""
+ }
+ incr i [expr {$digit * $w}]
+ set t [expr {min(max($tmin, $k-$bias), $tmax)}]
+ if {$digit < $t} {
+ set bias [adapt [expr {$i-$oldi}] $first [incr out]]
+ set first 0
+ break
+ }
+ if {[set w [expr {$w * ($base - $t)}]] > 0x7FFFFFFF} {
+ throw {PUNYCODE OVERFLOW} \
+ "excessively large integer computed in digit decode"
+ }
+ incr k $base
+ }
+
+ # i was supposed to wrap around from out+1 to 0, incrementing n
+ # each time, so we'll fix that now:
+
+ if {[incr n [expr {$i / $out}]] > 0x7FFFFFFF} {
+ throw {PUNYCODE OVERFLOW} \
+ "excessively large integer computed in character choice"
+ } elseif {$n > $max_codepoint} {
+ if {$n >= 0x00D800 && $n < 0x00E000} {
+ # Bare surrogate?!
+ throw {PUNYCODE NON_BMP} \
+ [format "unsupported character U+%06x" $n]
+ }
+ throw {PUNYCODE NON_UNICODE} "bad codepoint $n"
+ }
+ set i [expr {$i % $out}]
+
+ # Insert n at position i of the output:
+
+ set output [linsert $output $i [format "%c" $n]]
+ incr i
+ }
+
+ return [join $output ""]
+ }
+}
+
+package provide tcl::idna 1.0.1
+
+# Local variables:
+# mode: tcl
+# fill-column: 78
+# End:
diff --git a/library/cookiejar/pkgIndex.tcl b/library/cookiejar/pkgIndex.tcl
new file mode 100644
index 0000000..b1853aa
--- /dev/null
+++ b/library/cookiejar/pkgIndex.tcl
@@ -0,0 +1,3 @@
+if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
+package ifneeded cookiejar 0.2.0 [list source [file join $dir cookiejar.tcl]]
+package ifneeded tcl::idna 1.0.1 [list source [file join $dir idna.tcl]]
diff --git a/library/cookiejar/public_suffix_list.dat.gz b/library/cookiejar/public_suffix_list.dat.gz
new file mode 100644
index 0000000..65bf75a
--- /dev/null
+++ b/library/cookiejar/public_suffix_list.dat.gz
Binary files differ
diff --git a/library/dde/pkgIndex.tcl b/library/dde/pkgIndex.tcl
index 1ca9c5a..25125c8 100644
--- a/library/dde/pkgIndex.tcl
+++ b/library/dde/pkgIndex.tcl
@@ -1,7 +1,5 @@
-if {![package vsatisfies [package provide Tcl] 8.5]} return
+if {![package vsatisfies [package provide Tcl] 9.0-]} return
if {[info sharedlibextension] != ".dll"} return
-if {[::tcl::pkgconfig get debug]} {
- package ifneeded dde 1.4.3 [list load [file join $dir tcldde14g.dll] Dde]
-} else {
- package ifneeded dde 1.4.3 [list load [file join $dir tcldde14.dll] Dde]
-}
+package ifneeded dde 1.5a0 \
+ [list load [file join $dir tcl9dde15.dll] Dde]
+
diff --git a/library/encoding/ascii.enc b/library/encoding/ascii.enc
index e0320b8..284a9f5 100644
--- a/library/encoding/ascii.enc
+++ b/library/encoding/ascii.enc
@@ -9,7 +9,7 @@ S
0040004100420043004400450046004700480049004A004B004C004D004E004F
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
-0070007100720073007400750076007700780079007A007B007C007D007E0000
+0070007100720073007400750076007700780079007A007B007C007D007E007F
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/big5.enc b/library/encoding/big5.enc
index 26179f4..d6ff760 100644
--- a/library/encoding/big5.enc
+++ b/library/encoding/big5.enc
@@ -10,8 +10,8 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/cp1250.enc b/library/encoding/cp1250.enc
index 070ad90..f40b485 100644
--- a/library/encoding/cp1250.enc
+++ b/library/encoding/cp1250.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0083201E2026202020210088203001602039015A0164017D0179
-009020182019201C201D202220132014009821220161203A015B0165017E017A
+20AC0000201A0000201E2026202020210000203001602039015A0164017D0179
+000020182019201C201D202220132014000021220161203A015B0165017E017A
00A002C702D8014100A4010400A600A700A800A9015E00AB00AC00AD00AE017B
00B000B102DB014200B400B500B600B700B80105015F00BB013D02DD013E017C
015400C100C2010200C40139010600C7010C00C9011800CB011A00CD00CE010E
diff --git a/library/encoding/cp1251.enc b/library/encoding/cp1251.enc
index 376b1b4..f9513c2 100644
--- a/library/encoding/cp1251.enc
+++ b/library/encoding/cp1251.enc
@@ -11,7 +11,7 @@ S
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
04020403201A0453201E20262020202120AC203004092039040A040C040B040F
-045220182019201C201D202220132014009821220459203A045A045C045B045F
+045220182019201C201D202220132014000021220459203A045A045C045B045F
00A0040E045E040800A4049000A600A7040100A9040400AB00AC00AD00AE0407
00B000B104060456049100B500B600B704512116045400BB0458040504550457
0410041104120413041404150416041704180419041A041B041C041D041E041F
diff --git a/library/encoding/cp1252.enc b/library/encoding/cp1252.enc
index dd525ea..b45a7f8 100644
--- a/library/encoding/cp1252.enc
+++ b/library/encoding/cp1252.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0192201E20262020202102C62030016020390152008D017D008F
-009020182019201C201D20222013201402DC21220161203A0153009D017E0178
+20AC0000201A0192201E20262020202102C620300160203901520000017D0000
+000020182019201C201D20222013201402DC21220161203A01530000017E0178
00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF
00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF
00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF
diff --git a/library/encoding/cp1253.enc b/library/encoding/cp1253.enc
index a8754c3..dcc8084 100644
--- a/library/encoding/cp1253.enc
+++ b/library/encoding/cp1253.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0192201E20262020202100882030008A2039008C008D008E008F
-009020182019201C201D20222013201400982122009A203A009C009D009E009F
+20AC0000201A0192201E20262020202100002030000020390000000000000000
+000020182019201C201D202220132014000021220000203A0000000000000000
00A00385038600A300A400A500A600A700A800A9000000AB00AC00AD00AE2015
00B000B100B200B3038400B500B600B703880389038A00BB038C00BD038E038F
0390039103920393039403950396039703980399039A039B039C039D039E039F
diff --git a/library/encoding/cp1254.enc b/library/encoding/cp1254.enc
index b9e3b3c..4922f3c 100644
--- a/library/encoding/cp1254.enc
+++ b/library/encoding/cp1254.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0192201E20262020202102C62030016020390152008D008E008F
-009020182019201C201D20222013201402DC21220161203A0153009D009E0178
+20AC0000201A0192201E20262020202102C62030016020390152000000000000
+000020182019201C201D20222013201402DC21220161203A0153000000000178
00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF
00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF
00C000C100C200C300C400C500C600C700C800C900CA00CB00CC00CD00CE00CF
diff --git a/library/encoding/cp1255.enc b/library/encoding/cp1255.enc
index 6e78b95..74ef0c1 100644
--- a/library/encoding/cp1255.enc
+++ b/library/encoding/cp1255.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0192201E20262020202102C62030008A2039008C008D008E008F
-009020182019201C201D20222013201402DC2122009A203A009C009D009E009F
+20AC0000201A0192201E20262020202102C62030000020390000000000000000
+000020182019201C201D20222013201402DC21220000203A0000000000000000
00A000A100A200A320AA00A500A600A700A800A900D700AB00AC00AD00AE00AF
00B000B100B200B300B400B500B600B700B800B900F700BB00BC00BD00BE00BF
05B005B105B205B305B405B505B605B705B805B9000005BB05BC05BD05BE05BF
diff --git a/library/encoding/cp1257.enc b/library/encoding/cp1257.enc
index 4aa135d..42c6905 100644
--- a/library/encoding/cp1257.enc
+++ b/library/encoding/cp1257.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0083201E20262020202100882030008A2039008C00A802C700B8
-009020182019201C201D20222013201400982122009A203A009C00AF02DB009F
+20AC0000201A0000201E2026202020210000203000002039000000A802C700B8
+000020182019201C201D202220132014000021220000203A000000AF02DB0000
00A0000000A200A300A4000000A600A700D800A9015600AB00AC00AD00AE00C6
00B000B100B200B300B400B500B600B700F800B9015700BB00BC00BD00BE00E6
0104012E0100010600C400C501180112010C00C90179011601220136012A013B
diff --git a/library/encoding/cp1258.enc b/library/encoding/cp1258.enc
index 95fdef8..bbe2b12 100644
--- a/library/encoding/cp1258.enc
+++ b/library/encoding/cp1258.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC0081201A0192201E20262020202102C62030008A20390152008D008E008F
-009020182019201C201D20222013201402DC2122009A203A0153009D009E0178
+20AC0000201A0192201E20262020202102C62030000020390152000000000000
+000020182019201C201D20222013201402DC21220000203A0153000000000178
00A000A100A200A300A400A500A600A700A800A900AA00AB00AC00AD00AE00AF
00B000B100B200B300B400B500B600B700B800B900BA00BB00BC00BD00BE00BF
00C000C100C2010200C400C500C600C700C800C900CA00CB030000CD00CE00CF
diff --git a/library/encoding/cp864.enc b/library/encoding/cp864.enc
index 71f9e62..dad7c20 100644
--- a/library/encoding/cp864.enc
+++ b/library/encoding/cp864.enc
@@ -11,7 +11,7 @@ S
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
00B000B72219221A259225002502253C2524252C251C25342510250C25142518
-03B2221E03C600B100BD00BC224800AB00BBFEF7FEF8009B009CFEFBFEFC009F
+03B2221E03C600B100BD00BC224800AB00BBFEF7FEF800000000FEFBFEFC0000
00A000ADFE8200A300A4FE8400000000FE8EFE8FFE95FE99060CFE9DFEA1FEA5
0660066106620663066406650666066706680669FED1061BFEB1FEB5FEB9061F
00A2FE80FE81FE83FE85FECAFE8BFE8DFE91FE93FE97FE9BFE9FFEA3FEA7FEA9
diff --git a/library/encoding/cp869.enc b/library/encoding/cp869.enc
index 9fd2929..4670826 100644
--- a/library/encoding/cp869.enc
+++ b/library/encoding/cp869.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080008100820083008400850386008700B700AC00A620182019038820150389
-038A03AA038C00930094038E03AB00A9038F00B200B303AC00A303AD03AE03AF
+0000000000000000000000000386000000B700AC00A620182019038820150389
+038A03AA038C00000000038E03AB00A9038F00B200B303AC00A303AD03AE03AF
03CA039003CC03CD039103920393039403950396039700BD0398039900AB00BB
25912592259325022524039A039B039C039D256325512557255D039E039F2510
25142534252C251C2500253C03A003A1255A25542569256625602550256C03A3
diff --git a/library/encoding/cp874.enc b/library/encoding/cp874.enc
index 0487b97..e2e8433 100644
--- a/library/encoding/cp874.enc
+++ b/library/encoding/cp874.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-20AC008100820083008420260086008700880089008A008B008C008D008E008F
-009020182019201C201D20222013201400980099009A009B009C009D009E009F
+20AC000000000000000020260000000000000000000000000000000000000000
+000020182019201C201D20222013201400000000000000000000000000000000
00A00E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F
0E100E110E120E130E140E150E160E170E180E190E1A0E1B0E1C0E1D0E1E0E1F
0E200E210E220E230E240E250E260E270E280E290E2A0E2B0E2C0E2D0E2E0E2F
diff --git a/library/encoding/cp932.enc b/library/encoding/cp932.enc
index 8da8cd6..0699000 100644
--- a/library/encoding/cp932.enc
+++ b/library/encoding/cp932.enc
@@ -10,7 +10,7 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080000000000000000000850086000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F
FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F
diff --git a/library/encoding/cp949.enc b/library/encoding/cp949.enc
index 2f3ec39..459dbd9 100644
--- a/library/encoding/cp949.enc
+++ b/library/encoding/cp949.enc
@@ -10,7 +10,7 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/cp950.enc b/library/encoding/cp950.enc
index f33d785..f582bd9 100644
--- a/library/encoding/cp950.enc
+++ b/library/encoding/cp950.enc
@@ -10,8 +10,8 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/dingbats.enc b/library/encoding/dingbats.enc
index 9729487..bd466b2 100644
--- a/library/encoding/dingbats.enc
+++ b/library/encoding/dingbats.enc
@@ -10,8 +10,8 @@ S
2730273127322733273427352736273727382739273A273B273C273D273E273F
2740274127422743274427452746274727482749274A274B25CF274D25A0274F
27502751275225B225BC25C6275625D727582759275A275B275C275D275E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000276127622763276427652766276726632666266526602460246124622463
2464246524662467246824692776277727782779277A277B277C277D277E277F
2780278127822783278427852786278727882789278A278B278C278D278E278F
diff --git a/library/encoding/ebcdic.enc b/library/encoding/ebcdic.enc
index f451de5..f83ce7d 100644
--- a/library/encoding/ebcdic.enc
+++ b/library/encoding/ebcdic.enc
@@ -1,3 +1,4 @@
+# Encoding file: ebcdic, single-byte
S
006F 0 1
00
diff --git a/library/encoding/euc-cn.enc b/library/encoding/euc-cn.enc
index 4b2f8c7..ff0f984 100644
--- a/library/encoding/euc-cn.enc
+++ b/library/encoding/euc-cn.enc
@@ -10,8 +10,8 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/euc-jp.enc b/library/encoding/euc-jp.enc
index db56c88..d4337d9 100644
--- a/library/encoding/euc-jp.enc
+++ b/library/encoding/euc-jp.enc
@@ -10,8 +10,8 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080008100820083008400850086008700880089008A008B008C008D0000008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/euc-kr.enc b/library/encoding/euc-kr.enc
index 5e9bb93..0433260 100644
--- a/library/encoding/euc-kr.enc
+++ b/library/encoding/euc-kr.enc
@@ -10,8 +10,8 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
diff --git a/library/encoding/gb1988.enc b/library/encoding/gb1988.enc
index 298732c..8254684 100644
--- a/library/encoding/gb1988.enc
+++ b/library/encoding/gb1988.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D203E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F
FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F
FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F
diff --git a/library/encoding/jis0201.enc b/library/encoding/jis0201.enc
index 64f423f..70e099d 100644
--- a/library/encoding/jis0201.enc
+++ b/library/encoding/jis0201.enc
@@ -10,8 +10,8 @@ S
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D203E007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F
FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F
FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F
diff --git a/library/encoding/koi8-ru.enc b/library/encoding/koi8-ru.enc
new file mode 100644
index 0000000..52a8b36
--- /dev/null
+++ b/library/encoding/koi8-ru.enc
@@ -0,0 +1,20 @@
+# Encoding file: koi8-ru, single-byte
+S
+003F 0 1
+00
+0000000100020003000400050006000700080009000A000B000C000D000E000F
+0010001100120013001400150016001700180019001A001B001C001D001E001F
+0020002100220023002400250026002700280029002A002B002C002D002E002F
+0030003100320033003400350036003700380039003A003B003C003D003E003F
+0040004100420043004400450046004700480049004A004B004C004D004E004F
+0050005100520053005400550056005700580059005A005B005C005D005E005F
+0060006100620063006400650066006700680069006A006B006C006D006E006F
+0070007100720073007400750076007700780079007A007B007C007D007E007F
+25002502250C251025142518251C2524252C2534253C258025842588258C2590
+259125922593232025A02219221A22482264226500A0232100B000B200B700F7
+25502551255204510454255404560457255725582559255A255B0491045E255E
+255F25602561040104042563040604072566256725682569256A0490040E00A9
+044E0430043104460434043504440433044504380439043A043B043C043D043E
+043F044F044004410442044304360432044C044B04370448044D04490447044A
+042E0410041104260414041504240413042504180419041A041B041C041D041E
+041F042F042004210422042304160412042C042B04170428042D04290427042A
diff --git a/library/encoding/koi8-t.enc b/library/encoding/koi8-t.enc
new file mode 100644
index 0000000..23b2de7
--- /dev/null
+++ b/library/encoding/koi8-t.enc
@@ -0,0 +1,20 @@
+# Encoding file: koi8-t, single-byte
+S
+003F 0 1
+00
+0000000100020003000400050006000700080009000A000B000C000D000E000F
+0010001100120013001400150016001700180019001A001B001C001D001E001F
+0020002100220023002400250026002700280029002A002B002C002D002E002F
+0030003100320033003400350036003700380039003A003B003C003D003E003F
+0040004100420043004400450046004700480049004A004B004C004D004E004F
+0050005100520053005400550056005700580059005A005B005C005D005E005F
+0060006100620063006400650066006700680069006A006B006C006D006E006F
+0070007100720073007400750076007700780079007A007B007C007D007E007F
+049B0493201A0492201E2026202020210000203004B3203904B204B704B60000
+049A20182019201C201D202220132014000021220000203A0000000000000000
+000004EF04EE045100A404E300A600A700000000000000AB00AC00AD00AE0000
+00B000B100B20401000004E200B600B700002116000000BB00000000000000A9
+044E0430043104460434043504440433044504380439043A043B043C043D043E
+043F044F044004410442044304360432044C044B04370448044D04490447044A
+042E0410041104260414041504240413042504180419041A041B041C041D041E
+041F042F042004210422042304160412042C042B04170428042D04290427042A
diff --git a/library/encoding/koi8-u.enc b/library/encoding/koi8-u.enc
index e4eeb84..332f924 100644
--- a/library/encoding/koi8-u.enc
+++ b/library/encoding/koi8-u.enc
@@ -13,7 +13,7 @@ S
25002502250C251025142518251C2524252C2534253C258025842588258C2590
259125922593232025A02219221A22482264226500A0232100B000B200B700F7
25502551255204510454255404560457255725582559255A255B0491255D255E
-255F25602561040104032563040604072566256725682569256A0490256C00A9
+255F25602561040104042563040604072566256725682569256A0490256C00A9
044E0430043104460434043504440433044504380439043A043B043C043D043E
043F044F044004410442044304360432044C044B04370448044D04490447044A
042E0410041104260414041504240413042504180419041A041B041C041D041E
diff --git a/library/encoding/macDingbats.enc b/library/encoding/macDingbats.enc
index 28449cd..9fa47b5 100644
--- a/library/encoding/macDingbats.enc
+++ b/library/encoding/macDingbats.enc
@@ -10,8 +10,8 @@ S
2730273127322733273427352736273727382739273A273B273C273D273E273F
2740274127422743274427452746274727482749274A274B25CF274D25A0274F
27502751275225B225BC25C6275625D727582759275A275B275C275D275E007F
-F8D7F8D8F8D9F8DAF8DBF8DCF8DDF8DEF8DFF8E0F8E1F8E2F8E3F8E4008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+F8D7F8D8F8D9F8DAF8DBF8DCF8DDF8DEF8DFF8E0F8E1F8E2F8E3F8E400000000
+0000000000000000000000000000000000000000000000000000000000000000
0000276127622763276427652766276726632666266526602460246124622463
2464246524662467246824692776277727782779277A277B277C277D277E277F
2780278127822783278427852786278727882789278A278B278C278D278E278F
diff --git a/library/encoding/macJapan.enc b/library/encoding/macJapan.enc
index dba24bd..9f3f03b 100644
--- a/library/encoding/macJapan.enc
+++ b/library/encoding/macJapan.enc
@@ -10,7 +10,7 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00A0FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F
FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F
diff --git a/library/encoding/shiftjis.enc b/library/encoding/shiftjis.enc
index 140aec4..3ba972e 100644
--- a/library/encoding/shiftjis.enc
+++ b/library/encoding/shiftjis.enc
@@ -10,7 +10,7 @@ M
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
0070007100720073007400750076007700780079007A007B007C007D007E007F
-0080000000000000000000850086008700000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F
FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F
diff --git a/library/encoding/symbol.enc b/library/encoding/symbol.enc
index ffda9e3..ebd2f49 100644
--- a/library/encoding/symbol.enc
+++ b/library/encoding/symbol.enc
@@ -10,8 +10,8 @@ S
03A0039803A103A303A403A503C203A9039E03A80396005B2234005D22A5005F
F8E503B103B203C703B403B503C603B303B703B903D503BA03BB03BC03BD03BF
03C003B803C103C303C403C503D603C903BE03C803B6007B007C007D223C007F
-0080008100820083008400850086008700880089008A008B008C008D008E008F
-0090009100920093009400950096009700980099009A009B009C009D009E009F
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
000003D2203222642044221E0192266326662665266021942190219121922193
00B000B12033226500D7221D2202202200F72260226122482026F8E6F8E721B5
21352111211C21182297229522052229222A2283228722842282228622082209
diff --git a/library/encoding/tis-620.enc b/library/encoding/tis-620.enc
index 2e9142a..af77326 100644
--- a/library/encoding/tis-620.enc
+++ b/library/encoding/tis-620.enc
@@ -9,7 +9,7 @@ S
0040004100420043004400450046004700480049004A004B004C004D004E004F
0050005100520053005400550056005700580059005A005B005C005D005E005F
0060006100620063006400650066006700680069006A006B006C006D006E006F
-0070007100720073007400750076007700780079007A007B007C007D007E0000
+0070007100720073007400750076007700780079007A007B007C007D007E007F
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000E010E020E030E040E050E060E070E080E090E0A0E0B0E0C0E0D0E0E0E0F
diff --git a/library/foreachline.tcl b/library/foreachline.tcl
new file mode 100644
index 0000000..aacbd5b
--- /dev/null
+++ b/library/foreachline.tcl
@@ -0,0 +1,25 @@
+# foreachLine:
+# Iterate over the contents of a file, a line at a time.
+# The body script is run for each, with variable varName set to the line
+# contents.
+#
+# Copyright © 2023 Donal K Fellows.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+
+proc foreachLine {varName filename body} {
+ upvar 1 $varName line
+ set f [open $filename "r"]
+ try {
+ while {[gets $f line] >= 0} {
+ uplevel 1 $body
+ }
+ } on return {msg opt} {
+ dict incr opt -level
+ return -options $opt $msg
+ } finally {
+ close $f
+ }
+}
diff --git a/library/history.tcl b/library/history.tcl
index 888d144..4c36bf0 100644
--- a/library/history.tcl
+++ b/library/history.tcl
@@ -2,20 +2,20 @@
#
# Implementation of the history command.
#
-# Copyright (c) 1997 Sun Microsystems, Inc.
+# Copyright © 1997 Sun Microsystems, Inc.
#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+# See the file "license.terms" for information on usage and redistribution of
+# this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-
-# The tcl::history array holds the history list and
-# some additional bookkeeping variables.
+
+# The tcl::history array holds the history list and some additional
+# bookkeeping variables.
#
# nextid the index used for the next history list item.
# keep the max size of the history list
# oldest the index of the oldest item in the history.
-namespace eval tcl {
+namespace eval ::tcl {
variable history
if {![info exists history]} {
array set history {
@@ -24,163 +24,102 @@ namespace eval tcl {
oldest -20
}
}
-}
+ namespace ensemble create -command ::tcl::history -map {
+ add ::tcl::HistAdd
+ change ::tcl::HistChange
+ clear ::tcl::HistClear
+ event ::tcl::HistEvent
+ info ::tcl::HistInfo
+ keep ::tcl::HistKeep
+ nextid ::tcl::HistNextID
+ redo ::tcl::HistRedo
+ }
+}
+
# history --
#
# This is the main history command. See the man page for its interface.
-# This does argument checking and calls helper procedures in the
-# history namespace.
+# This does some argument checking and calls the helper ensemble in the
+# tcl namespace.
-proc history {args} {
- set len [llength $args]
- if {$len == 0} {
- return [tcl::HistInfo]
- }
- set key [lindex $args 0]
- set options "add, change, clear, event, info, keep, nextid, or redo"
- switch -glob -- $key {
- a* { # history add
+proc ::history {args} {
+ # If no command given, we're doing 'history info'. Can't be done with an
+ # ensemble unknown handler, as those don't fire when no subcommand is
+ # given at all.
- if {$len > 3} {
- return -code error "wrong # args: should be \"history add event ?exec?\""
- }
- if {![string match $key* add]} {
- return -code error "bad option \"$key\": must be $options"
- }
- if {$len == 3} {
- set arg [lindex $args 2]
- if {! ([string match e* $arg] && [string match $arg* exec])} {
- return -code error "bad argument \"$arg\": should be \"exec\""
- }
- }
- return [tcl::HistAdd [lindex $args 1] [lindex $args 2]]
- }
- ch* { # history change
-
- if {($len > 3) || ($len < 2)} {
- return -code error "wrong # args: should be \"history change newValue ?event?\""
- }
- if {![string match $key* change]} {
- return -code error "bad option \"$key\": must be $options"
- }
- if {$len == 2} {
- set event 0
- } else {
- set event [lindex $args 2]
- }
-
- return [tcl::HistChange [lindex $args 1] $event]
- }
- cl* { # history clear
-
- if {($len > 1)} {
- return -code error "wrong # args: should be \"history clear\""
- }
- if {![string match $key* clear]} {
- return -code error "bad option \"$key\": must be $options"
- }
- return [tcl::HistClear]
- }
- e* { # history event
-
- if {$len > 2} {
- return -code error "wrong # args: should be \"history event ?event?\""
- }
- if {![string match $key* event]} {
- return -code error "bad option \"$key\": must be $options"
- }
- if {$len == 1} {
- set event -1
- } else {
- set event [lindex $args 1]
- }
- return [tcl::HistEvent $event]
- }
- i* { # history info
-
- if {$len > 2} {
- return -code error "wrong # args: should be \"history info ?count?\""
- }
- if {![string match $key* info]} {
- return -code error "bad option \"$key\": must be $options"
- }
- return [tcl::HistInfo [lindex $args 1]]
- }
- k* { # history keep
-
- if {$len > 2} {
- return -code error "wrong # args: should be \"history keep ?count?\""
- }
- if {$len == 1} {
- return [tcl::HistKeep]
- } else {
- set limit [lindex $args 1]
- if {[catch {expr {~$limit}}] || ($limit < 0)} {
- return -code error "illegal keep count \"$limit\""
- }
- return [tcl::HistKeep $limit]
- }
- }
- n* { # history nextid
-
- if {$len > 1} {
- return -code error "wrong # args: should be \"history nextid\""
- }
- if {![string match $key* nextid]} {
- return -code error "bad option \"$key\": must be $options"
- }
- return [expr {$tcl::history(nextid) + 1}]
- }
- r* { # history redo
-
- if {$len > 2} {
- return -code error "wrong # args: should be \"history redo ?event?\""
- }
- if {![string match $key* redo]} {
- return -code error "bad option \"$key\": must be $options"
- }
- return [tcl::HistRedo [lindex $args 1]]
- }
- default {
- return -code error "bad option \"$key\": must be $options"
- }
+ if {![llength $args]} {
+ set args info
}
+
+ # Tricky stuff needed to make stack and errors come out right!
+ tailcall apply {arglist {tailcall ::tcl::history {*}$arglist} ::tcl} $args
}
+
+# (unnamed) --
+#
+# Callback when [::history] is destroyed. Destroys the implementation.
+#
+# Parameters:
+# oldName what the command was called.
+# newName what the command is now called (an empty string).
+# op the operation (= delete).
+#
+# Results:
+# none
+#
+# Side Effects:
+# The implementation of the [::history] command ceases to exist.
+trace add command ::history delete [list apply {{oldName newName op} {
+ variable history
+ unset -nocomplain history
+ foreach c [info procs ::tcl::Hist*] {
+ rename $c {}
+ }
+ rename ::tcl::history {}
+} ::tcl}]
+
# tcl::HistAdd --
#
# Add an item to the history, and optionally eval it at the global scope
#
# Parameters:
-# command the command to add
-# exec (optional) a substring of "exec" causes the
-# command to be evaled.
+# event the command to add
+# exec (optional) a substring of "exec" causes the command to
+# be evaled.
# Results:
-# If executing, then the results of the command are returned
+# If executing, then the results of the command are returned
#
# Side Effects:
# Adds to the history list
- proc tcl::HistAdd {command {exec {}}} {
+proc ::tcl::HistAdd {event {exec {}}} {
variable history
+ if {
+ [prefix longest {exec {}} $exec] eq ""
+ && [llength [info level 0]] == 3
+ } then {
+ return -code error "bad argument \"$exec\": should be \"exec\""
+ }
+
# Do not add empty commands to the history
- if {[string trim $command] eq ""} {
+ if {[string trim $event] eq ""} {
return ""
}
- set i [incr history(nextid)]
- set history($i) $command
- set j [incr history(oldest)]
- unset -nocomplain history($j)
- if {[string match e* $exec]} {
- return [uplevel #0 $command]
- } else {
- return {}
+ # Maintain the history
+ set history([incr history(nextid)]) $event
+ unset -nocomplain history([incr history(oldest)])
+
+ # Only execute if 'exec' (or non-empty prefix of it) given
+ if {$exec eq ""} {
+ return ""
}
+ tailcall eval $event
}
-
+
# tcl::HistKeep --
#
# Set or query the limit on the length of the history list
@@ -194,20 +133,22 @@ proc history {args} {
# Side Effects:
# Updates history(keep) if a limit is specified
- proc tcl::HistKeep {{limit {}}} {
+proc ::tcl::HistKeep {{count {}}} {
variable history
- if {$limit eq ""} {
+ if {[llength [info level 0]] == 1} {
return $history(keep)
- } else {
- set oldold $history(oldest)
- set history(oldest) [expr {$history(nextid) - $limit}]
- for {} {$oldold <= $history(oldest)} {incr oldold} {
- unset -nocomplain history($oldold)
- }
- set history(keep) $limit
}
+ if {![string is integer -strict $count] || ($count < 0)} {
+ return -code error "illegal keep count \"$count\""
+ }
+ set oldold $history(oldest)
+ set history(oldest) [expr {$history(nextid) - $count}]
+ for {} {$oldold <= $history(oldest)} {incr oldold} {
+ unset -nocomplain history($oldold)
+ }
+ set history(keep) $count
}
-
+
# tcl::HistClear --
#
# Erase the history list
@@ -221,7 +162,7 @@ proc history {args} {
# Side Effects:
# Resets the history array, except for the keep limit
- proc tcl::HistClear {} {
+proc ::tcl::HistClear {} {
variable history
set keep $history(keep)
unset history
@@ -231,7 +172,7 @@ proc history {args} {
oldest -$keep \
]
}
-
+
# tcl::HistInfo --
#
# Return a pretty-printed version of the history list
@@ -242,29 +183,31 @@ proc history {args} {
# Results:
# A formatted history list
- proc tcl::HistInfo {{num {}}} {
+proc ::tcl::HistInfo {{count {}}} {
variable history
- if {$num eq ""} {
- set num [expr {$history(keep) + 1}]
+ if {[llength [info level 0]] == 1} {
+ set count [expr {$history(keep) + 1}]
+ } elseif {![string is integer -strict $count]} {
+ return -code error "bad integer \"$count\""
}
set result {}
set newline ""
- for {set i [expr {$history(nextid) - $num + 1}]} \
+ for {set i [expr {$history(nextid) - $count + 1}]} \
{$i <= $history(nextid)} {incr i} {
if {![info exists history($i)]} {
continue
}
- set cmd [string map [list \n \n\t] [string trimright $history($i) \ \n]]
+ set cmd [string map [list \n \n\t] [string trimright $history($i) \ \n]]
append result $newline[format "%6d %s" $i $cmd]
set newline \n
}
return $result
}
-
+
# tcl::HistRedo --
#
-# Fetch the previous or specified event, execute it, and then
-# replace the current history item with that event.
+# Fetch the previous or specified event, execute it, and then replace
+# the current history item with that event.
#
# Parameters:
# event (optional) index of history item to redo. Defaults to -1,
@@ -276,20 +219,18 @@ proc history {args} {
# Side Effects:
# Replaces the current history list item with the one being redone.
- proc tcl::HistRedo {{event -1}} {
+proc ::tcl::HistRedo {{event -1}} {
variable history
- if {$event eq ""} {
- set event -1
- }
+
set i [HistIndex $event]
if {$i == $history(nextid)} {
return -code error "cannot redo the current event"
}
set cmd $history($i)
HistChange $cmd 0
- uplevel #0 $cmd
+ tailcall eval $cmd
}
-
+
# tcl::HistIndex --
#
# Map from an event specifier to an index in the history list.
@@ -299,22 +240,22 @@ proc history {args} {
# If this is a positive number, it is used directly.
# If it is a negative number, then it counts back to a previous
# event, where -1 is the most recent event.
-# A string can be matched, either by being the prefix of
-# a command or by matching a command with string match.
+# A string can be matched, either by being the prefix of a
+# command or by matching a command with string match.
#
# Results:
# The index into history, or an error if the index didn't match.
- proc tcl::HistIndex {event} {
+proc ::tcl::HistIndex {event} {
variable history
- if {[catch {expr {~$event}}]} {
+ if {![string is integer -strict $event]} {
for {set i [expr {$history(nextid)-1}]} {[info exists history($i)]} \
{incr i -1} {
if {[string match $event* $history($i)]} {
- return $i;
+ return $i
}
if {[string match $event $history($i)]} {
- return $i;
+ return $i
}
}
return -code error "no event matches \"$event\""
@@ -327,47 +268,68 @@ proc history {args} {
return -code error "event \"$event\" is too far in the past"
}
if {$i > $history(nextid)} {
- return -code error "event \"$event\" hasn't occured yet"
+ return -code error "event \"$event\" hasn't occurred yet"
}
return $i
}
-
+
# tcl::HistEvent --
#
# Map from an event specifier to the value in the history list.
#
# Parameters:
-# event index of history item to redo. See index for a
-# description of possible event patterns.
+# event index of history item to redo. See index for a description of
+# possible event patterns.
#
# Results:
# The value from the history list.
- proc tcl::HistEvent {event} {
+proc ::tcl::HistEvent {{event -1}} {
variable history
set i [HistIndex $event]
- if {[info exists history($i)]} {
- return [string trimright $history($i) \ \n]
- } else {
- return "";
+ if {![info exists history($i)]} {
+ return ""
}
+ return [string trimright $history($i) \ \n]
}
-
+
# tcl::HistChange --
#
# Replace a value in the history list.
#
# Parameters:
-# cmd The new value to put into the history list.
-# event (optional) index of history item to redo. See index for a
-# description of possible event patterns. This defaults
-# to 0, which specifies the current event.
+# newValue The new value to put into the history list.
+# event (optional) index of history item to redo. See index for a
+# description of possible event patterns. This defaults to 0,
+# which specifies the current event.
#
# Side Effects:
# Changes the history list.
- proc tcl::HistChange {cmd {event 0}} {
+proc ::tcl::HistChange {newValue {event 0}} {
variable history
set i [HistIndex $event]
- set history($i) $cmd
+ set history($i) $newValue
+}
+
+# tcl::HistNextID --
+#
+# Returns the number of the next history event.
+#
+# Parameters:
+# None.
+#
+# Side Effects:
+# None.
+
+proc ::tcl::HistNextID {} {
+ variable history
+ return [expr {$history(nextid) + 1}]
}
+
+return
+
+# Local Variables:
+# mode: tcl
+# fill-column: 78
+# End:
diff --git a/library/http/http.tcl b/library/http/http.tcl
index 0852a26..6050ed9 100644
--- a/library/http/http.tcl
+++ b/library/http/http.tcl
@@ -8,10 +8,10 @@
# 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.4
+package require Tcl 8.6-
# Keep this in sync with pkgIndex.tcl and with the install directories in
# Makefiles
-package provide http 2.7.15
+package provide http 2.10.0
namespace eval http {
# Allow resourcing to not clobber existing data
@@ -20,12 +20,35 @@ namespace eval http {
if {![info exists http]} {
array set http {
-accept */*
+ -cookiejar {}
+ -pipeline 1
+ -postfresh 0
-proxyhost {}
-proxyport {}
-proxyfilter http::ProxyRequired
+ -proxynot {}
+ -proxyauth {}
+ -repost 0
+ -threadlevel 0
-urlencoding utf-8
+ -zip 1
+ }
+ # We need a useragent string of this style or various servers will
+ # refuse to send us compressed content even when we ask for it. This
+ # follows the de-facto layout of user-agent strings in current browsers.
+ # Safe interpreters do not have ::tcl_platform(os) or
+ # ::tcl_platform(osVersion).
+ if {[interp issafe]} {
+ set http(-useragent) "Mozilla/5.0\
+ (Windows; U;\
+ Windows NT 10.0)\
+ http/[package provide http] Tcl/[package provide Tcl]"
+ } else {
+ set http(-useragent) "Mozilla/5.0\
+ ([string totitle $::tcl_platform(platform)]; U;\
+ $::tcl_platform(os) $::tcl_platform(osVersion))\
+ http/[package provide http] Tcl/[package provide Tcl]"
}
- set http(-useragent) "Tcl http client package [package provide http]"
}
proc init {} {
@@ -45,20 +68,58 @@ namespace eval http {
variable formMap [array get map]
# Create a map for HTTP/1.1 open sockets
- variable socketmap
- if {[info exists socketmap]} {
- # Close but don't remove open sockets on re-init
- foreach {url sock} [array get socketmap] {
- catch {close $sock}
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+ if {[info exists socketMapping]} {
+ # Close open sockets on re-init. Do not permit retries.
+ foreach {url sock} [array get socketMapping] {
+ unset -nocomplain socketClosing($url)
+ unset -nocomplain socketPlayCmd($url)
+ CloseSocket $sock
}
}
- array set socketmap {}
+
+ # CloseSocket should have unset the socket* arrays, one element at
+ # a time. Now unset anything that was overlooked.
+ # Traces on "unset socketRdState(*)" will call CancelReadPipeline and
+ # cancel any queued responses.
+ # Traces on "unset socketWrState(*)" will call CancelWritePipeline and
+ # cancel any queued requests.
+ array unset socketMapping
+ array unset socketRdState
+ array unset socketWrState
+ array unset socketRdQueue
+ array unset socketWrQueue
+ array unset socketPhQueue
+ array unset socketClosing
+ array unset socketPlayCmd
+ array unset socketCoEvent
+ array unset socketProxyId
+ array set socketMapping {}
+ array set socketRdState {}
+ array set socketWrState {}
+ array set socketRdQueue {}
+ array set socketWrQueue {}
+ array set socketPhQueue {}
+ array set socketClosing {}
+ array set socketPlayCmd {}
+ array set socketCoEvent {}
+ array set socketProxyId {}
+ return
}
init
variable urlTypes
if {![info exists urlTypes]} {
- set urlTypes(http) [list 80 ::socket]
+ set urlTypes(http) [list 80 ::http::AltSocket {} 1 0]
}
variable encodings [string tolower [encoding names]]
@@ -80,8 +141,130 @@ namespace eval http {
set defaultKeepalive 0
}
- namespace export geturl config reset wait formatQuery register unregister
- # Useful, but not exported: data size status code
+ # Regular expression used to parse cookies
+ variable CookieRE {(?x) # EXPANDED SYNTAX
+ \s* # Ignore leading spaces
+ ([^][\u0000- ()<>@,;:\\""/?={}\u007f-\uffff]+) # Match the name
+ = # LITERAL: Equal sign
+ ([!\u0023-+\u002D-:<-\u005B\u005D-~]*) # Match the value
+ (?:
+ \s* ; \s* # LITERAL: semicolon
+ ([^\u0000]+) # Match the options
+ )?
+ }
+
+ variable TmpSockCounter 0
+ variable ThreadCounter 0
+
+ variable reasonDict [dict create {*}{
+ 100 Continue
+ 101 {Switching Protocols}
+ 102 Processing
+ 103 {Early Hints}
+ 200 OK
+ 201 Created
+ 202 Accepted
+ 203 {Non-Authoritative Information}
+ 204 {No Content}
+ 205 {Reset Content}
+ 206 {Partial Content}
+ 207 Multi-Status
+ 208 {Already Reported}
+ 226 {IM Used}
+ 300 {Multiple Choices}
+ 301 {Moved Permanently}
+ 302 Found
+ 303 {See Other}
+ 304 {Not Modified}
+ 305 {Use Proxy}
+ 306 (Unused)
+ 307 {Temporary Redirect}
+ 308 {Permanent Redirect}
+ 400 {Bad Request}
+ 401 Unauthorized
+ 402 {Payment Required}
+ 403 Forbidden
+ 404 {Not Found}
+ 405 {Method Not Allowed}
+ 406 {Not Acceptable}
+ 407 {Proxy Authentication Required}
+ 408 {Request Timeout}
+ 409 Conflict
+ 410 Gone
+ 411 {Length Required}
+ 412 {Precondition Failed}
+ 413 {Content Too Large}
+ 414 {URI Too Long}
+ 415 {Unsupported Media Type}
+ 416 {Range Not Satisfiable}
+ 417 {Expectation Failed}
+ 418 (Unused)
+ 421 {Misdirected Request}
+ 422 {Unprocessable Content}
+ 423 Locked
+ 424 {Failed Dependency}
+ 425 {Too Early}
+ 426 {Upgrade Required}
+ 428 {Precondition Required}
+ 429 {Too Many Requests}
+ 431 {Request Header Fields Too Large}
+ 451 {Unavailable For Legal Reasons}
+ 500 {Internal Server Error}
+ 501 {Not Implemented}
+ 502 {Bad Gateway}
+ 503 {Service Unavailable}
+ 504 {Gateway Timeout}
+ 505 {HTTP Version Not Supported}
+ 506 {Variant Also Negotiates}
+ 507 {Insufficient Storage}
+ 508 {Loop Detected}
+ 510 {Not Extended (OBSOLETED)}
+ 511 {Network Authentication Required}
+ }]
+
+ variable failedProxyValues {
+ binary
+ body
+ charset
+ coding
+ connection
+ connectionRespFlag
+ currentsize
+ host
+ http
+ httpResponse
+ meta
+ method
+ querylength
+ queryoffset
+ reasonPhrase
+ requestHeaders
+ requestLine
+ responseCode
+ state
+ status
+ tid
+ totalsize
+ transfer
+ type
+ }
+
+ namespace export geturl config reset wait formatQuery postError quoteString
+ namespace export register unregister registerError
+ namespace export requestLine requestHeaders requestHeaderValue
+ namespace export responseLine responseHeaders responseHeaderValue
+ namespace export responseCode responseBody responseInfo reasonPhrase
+ # - Legacy aliases, were never exported:
+ # data, code, mapReply, meta, ncode
+ # - Callable from outside (e.g. from TLS) by fully-qualified name, but
+ # not exported:
+ # socket
+ # - Useful, but never exported (and likely to have naming collisions):
+ # size, status, cleanup, error, init
+ # Comments suggest that "init" can be used for re-initialisation,
+ # although the command is undocumented.
+ # - Never exported, renamed from lower-case names:
+ # GetTextLine, MakeTransformationChunked.
}
# http::Log --
@@ -92,22 +275,41 @@ namespace eval http {
# Arguments:
# msg Message to output
#
-proc http::Log {args} {}
+if {[info command http::Log] eq {}} {proc http::Log {args} {}}
# http::register --
#
# See documentation for details.
#
# Arguments:
-# proto URL protocol prefix, e.g. https
-# port Default port for protocol
-# command Command to use to create socket
+# proto URL protocol prefix, e.g. https
+# port Default port for protocol
+# command Command to use to create socket
+# socketCmdVarName (optional) name of variable provided by the protocol
+# handler whose value is the callback used by argument
+# "command" to open a socket. The default value "::socket"
+# will be overwritten by http.
+# useSockThread (optional, boolean)
+# endToEndProxy (optional, boolean)
# Results:
-# list of port and command that was registered.
+# list of port, command, variable name, (boolean) threadability,
+# and (boolean) endToEndProxy that was registered.
-proc http::register {proto port command} {
+proc http::register {proto port command {socketCmdVarName {}} {useSockThread 0} {endToEndProxy 0}} {
variable urlTypes
- set urlTypes([string tolower $proto]) [list $port $command]
+ set lower [string tolower $proto]
+ if {[info exists urlTypes($lower)]} {
+ unregister $lower
+ }
+ set urlTypes($lower) [list $port $command $socketCmdVarName $useSockThread $endToEndProxy]
+
+ # If the external handler for protocol $proto has given $socketCmdVarName the expected
+ # value "::socket", overwrite it with the new value.
+ if {($socketCmdVarName ne {}) && ([set $socketCmdVarName] eq {::socket})} {
+ set $socketCmdVarName ::http::socketAsCallback
+ }
+
+ return $urlTypes($lower)
}
# http::unregister --
@@ -117,7 +319,8 @@ proc http::register {proto port command} {
# Arguments:
# proto URL protocol prefix, e.g. https
# Results:
-# list of port and command that was unregistered.
+# list of port, command, variable name, (boolean) useSockThread,
+# and (boolean) endToEndProxy that was unregistered.
proc http::unregister {proto} {
variable urlTypes
@@ -126,6 +329,13 @@ proc http::unregister {proto} {
return -code error "unsupported url type \"$proto\""
}
set old $urlTypes($lower)
+
+ # Restore the external handler's original value for $socketCmdVarName.
+ lassign $old defport defcmd socketCmdVarName useSockThread endToEndProxy
+ if {($socketCmdVarName ne {}) && ([set $socketCmdVarName] eq {::http::socketAsCallback})} {
+ set $socketCmdVarName ::socket
+ }
+
unset urlTypes($lower)
return $old
}
@@ -137,7 +347,7 @@ proc http::unregister {proto} {
# Arguments:
# args Options parsed by the procedure.
# Results:
-# TODO
+# TODO
proc http::config {args} {
variable http
@@ -158,16 +368,50 @@ proc http::config {args} {
return -code error "Unknown option $flag, must be: $usage"
}
return $http($flag)
+ } elseif {[llength $args] % 2} {
+ return -code error "If more than one argument is supplied, the\
+ number of arguments must be even"
} else {
foreach {flag value} $args {
if {![regexp -- $pat $flag]} {
return -code error "Unknown option $flag, must be: $usage"
}
+ if {($flag eq {-threadlevel}) && ($value ni {0 1 2})} {
+ return -code error {Option -threadlevel must be 0, 1 or 2}
+ }
set http($flag) $value
}
+ return
}
}
+# ------------------------------------------------------------------------------
+# Proc http::reasonPhrase
+# ------------------------------------------------------------------------------
+# Command to return the IANA-recommended "reason phrase" for a HTTP Status Code.
+# Information obtained from:
+# https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
+#
+# Arguments:
+# code - A valid HTTP Status Code (integer from 100 to 599)
+#
+# Return Value: the reason phrase
+# ------------------------------------------------------------------------------
+
+proc http::reasonPhrase {code} {
+ variable reasonDict
+ if {![regexp -- {^[1-5][0-9][0-9]$} $code]} {
+ set msg {argument must be a three-digit integer from 100 to 599}
+ return -code error $msg
+ }
+ if {[dict exists $reasonDict $code]} {
+ set reason [dict get $reasonDict $code]
+ } else {
+ set reason Unassigned
+ }
+ return $reason
+}
+
# http::Finish --
#
# Clean up the socket and eval close time callbacks
@@ -175,39 +419,341 @@ proc http::config {args} {
# Arguments:
# token Connection token.
# errormsg (optional) If set, forces status to error.
-# skipCB (optional) If set, don't call the -command callback. This
+# skipCB (optional) If set, don't call the -command callback. This
# is useful when geturl wants to throw an exception instead
# of calling the callback. That way, the same error isn't
# reported to two places.
#
# Side Effects:
-# Closes the socket
+# May close the socket.
proc http::Finish {token {errormsg ""} {skipCB 0}} {
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
variable $token
upvar 0 $token state
global errorInfo errorCode
+ set closeQueue 0
if {$errormsg ne ""} {
set state(error) [list $errormsg $errorInfo $errorCode]
set state(status) "error"
}
- if {
- ($state(status) eq "timeout") || ($state(status) eq "error") ||
- ([info exists state(connection)] && ($state(connection) eq "close"))
- } then {
- CloseSocket $state(sock) $token
+ if {[info commands ${token}--EventCoroutine] ne {}} {
+ rename ${token}--EventCoroutine {}
+ }
+ if {[info commands ${token}--SocketCoroutine] ne {}} {
+ rename ${token}--SocketCoroutine {}
+ }
+ if {[info exists state(socketcoro)]} {
+ Log $token Cancel socket after-idle event (Finish)
+ after cancel $state(socketcoro)
+ unset state(socketcoro)
+ }
+
+ # Is this an upgrade request/response?
+ set upgradeResponse \
+ [expr { [info exists state(upgradeRequest)]
+ && $state(upgradeRequest)
+ && [info exists state(http)]
+ && ([ncode $token] eq {101})
+ && [info exists state(connection)]
+ && ("upgrade" in $state(connection))
+ && [info exists state(upgrade)]
+ && ("" ne $state(upgrade))
+ }]
+
+ if { ($state(status) eq "timeout")
+ || ($state(status) eq "error")
+ || ($state(status) eq "eof")
+ } {
+ set closeQueue 1
+ set connId $state(socketinfo)
+ if {[info exists state(sock)]} {
+ set sock $state(sock)
+ CloseSocket $state(sock) $token
+ } else {
+ # When opening the socket and calling http::reset
+ # immediately, the socket may not yet exist.
+ # Test http-4.11 may come here.
+ }
+ if {$state(tid) ne {}} {
+ # When opening the socket in a thread, and calling http::reset
+ # immediately, the thread may still exist.
+ # Test http-4.11 may come here.
+ thread::release $state(tid)
+ set state(tid) {}
+ } else {
+ }
+ } elseif {$upgradeResponse} {
+ # Special handling for an upgrade request/response.
+ # - geturl ensures that this is not a "persistent" socket used for
+ # multiple HTTP requests, so a call to KeepSocket is not needed.
+ # - Leave socket open, so a call to CloseSocket is not needed either.
+ # - Remove fileevent bindings. The caller will set its own bindings.
+ # - THE CALLER MUST PROCESS THE UPGRADED SOCKET IN THE CALLBACK COMMAND
+ # PASSED TO http::geturl AS -command callback.
+ catch {fileevent $state(sock) readable {}}
+ catch {fileevent $state(sock) writable {}}
+ } elseif {([info exists state(-keepalive)] && !$state(-keepalive))
+ || ([info exists state(connection)] && ("close" in $state(connection)))
+ } {
+ set closeQueue 1
+ set connId $state(socketinfo)
+ if {[info exists state(sock)]} {
+ set sock $state(sock)
+ CloseSocket $state(sock) $token
+ } else {
+ # When opening the socket and calling http::reset
+ # immediately, the socket may not yet exist.
+ # Test http-4.11 may come here.
+ }
+ } elseif {
+ ([info exists state(-keepalive)] && $state(-keepalive))
+ && ([info exists state(connection)] && ("close" ni $state(connection)))
+ } {
+ KeepSocket $token
}
if {[info exists state(after)]} {
after cancel $state(after)
+ unset state(after)
}
- if {[info exists state(-command)] && !$skipCB
- && ![info exists state(done-command-cb)]} {
+ if {[info exists state(-command)] && (!$skipCB)
+ && (![info exists state(done-command-cb)])} {
set state(done-command-cb) yes
- if {[catch {eval $state(-command) {$token}} err] && $errormsg eq ""} {
+ if { [catch {namespace eval :: $state(-command) $token} err]
+ && ($errormsg eq "")
+ } {
set state(error) [list $err $errorInfo $errorCode]
set state(status) error
}
}
+
+ if { $closeQueue
+ && [info exists socketMapping($connId)]
+ && ($socketMapping($connId) eq $sock)
+ } {
+ http::CloseQueuedQueries $connId $token
+ # This calls Unset. Other cases do not need the call.
+ }
+ return
+}
+
+# http::KeepSocket -
+#
+# Keep a socket in the persistent sockets table and connect it to its next
+# queued task if possible. Otherwise leave it idle and ready for its next
+# use.
+#
+# If $socketClosing(*), then ("close" in $state(connection)) and therefore
+# this command will not be called by Finish.
+#
+# Arguments:
+# token Connection token.
+
+proc http::KeepSocket {token} {
+ variable http
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+
+ # Keep this socket open for another request ("Keep-Alive").
+ # React if the server half-closes the socket.
+ # Discussion is in http::geturl.
+ catch {fileevent $state(sock) readable [list http::CheckEof $state(sock)]}
+
+ # The line below should not be changed in production code.
+ # It is edited by the test suite.
+ set TEST_EOF 0
+ if {$TEST_EOF} {
+ # ONLY for testing reaction to server eof.
+ # No server timeouts will be caught.
+ catch {fileevent $state(sock) readable {}}
+ }
+
+ if { [info exists state(socketinfo)]
+ && [info exists socketMapping($state(socketinfo))]
+ } {
+ set connId $state(socketinfo)
+ # The value "Rready" is set only here.
+ set socketRdState($connId) Rready
+
+ if { $state(-pipeline)
+ && [info exists socketRdQueue($connId)]
+ && [llength $socketRdQueue($connId)]
+ } {
+ # The usual case for pipelined responses - if another response is
+ # queued, arrange to read it.
+ set token3 [lindex $socketRdQueue($connId) 0]
+ set socketRdQueue($connId) [lrange $socketRdQueue($connId) 1 end]
+
+ #Log pipelined, GRANT read access to $token3 in KeepSocket
+ set socketRdState($connId) $token3
+ ReceiveResponse $token3
+
+ # Other pipelined cases.
+ # - The test above ensures that, for the pipelined cases in the two
+ # tests below, the read queue is empty.
+ # - In those two tests, check whether the next write will be
+ # nonpipeline.
+ } elseif {
+ $state(-pipeline)
+ && [info exists socketWrState($connId)]
+ && ($socketWrState($connId) eq "peNding")
+
+ && [info exists socketWrQueue($connId)]
+ && [llength $socketWrQueue($connId)]
+ && (![set token3 [lindex $socketWrQueue($connId) 0]
+ set ${token3}(-pipeline)
+ ]
+ )
+ } {
+ # This case:
+ # - Now it the time to run the "pending" request.
+ # - The next token in the write queue is nonpipeline, and
+ # socketWrState has been marked "pending" (in
+ # http::NextPipelinedWrite or http::geturl) so a new pipelined
+ # request cannot jump the queue.
+ #
+ # Tests:
+ # - In this case the read queue (tested above) is empty and this
+ # "pending" write token is in front of the rest of the write
+ # queue.
+ # - The write state is not Wready and therefore appears to be busy,
+ # but because it is "pending" we know that it is reserved for the
+ # first item in the write queue, a non-pipelined request that is
+ # waiting for the read queue to empty. That has now happened: so
+ # give that request read and write access.
+ set conn [set ${token3}(connArgs)]
+ #Log nonpipeline, GRANT r/w access to $token3 in KeepSocket
+ set socketRdState($connId) $token3
+ set socketWrState($connId) $token3
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
+ # Connect does its own fconfigure.
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (c)
+
+ } elseif {
+ $state(-pipeline)
+ && [info exists socketWrState($connId)]
+ && ($socketWrState($connId) eq "peNding")
+
+ } {
+ # Should not come here. The second block in the previous "elseif"
+ # test should be tautologous (but was needed in an earlier
+ # implementation) and will be removed after testing.
+ # If we get here, the value "pending" was assigned in error.
+ # This error would block the queue for ever.
+ Log ^X$tk <<<<< Error in queueing of requests >>>>> - token $token
+
+ } elseif {
+ $state(-pipeline)
+ && [info exists socketWrState($connId)]
+ && ($socketWrState($connId) eq "Wready")
+
+ && [info exists socketWrQueue($connId)]
+ && [llength $socketWrQueue($connId)]
+ && (![set token3 [lindex $socketWrQueue($connId) 0]
+ set ${token3}(-pipeline)
+ ]
+ )
+ } {
+ # This case:
+ # - The next token in the write queue is nonpipeline, and
+ # socketWrState is Wready. Get the next event from socketWrQueue.
+ # Tests:
+ # - In this case the read state (tested above) is Rready and the
+ # write state (tested here) is Wready - there is no "pending"
+ # request.
+ # Code:
+ # - The code is the same as the code below for the nonpipelined
+ # case with a queued request.
+ set conn [set ${token3}(connArgs)]
+ #Log nonpipeline, GRANT r/w access to $token3 in KeepSocket
+ set socketRdState($connId) $token3
+ set socketWrState($connId) $token3
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
+ # Connect does its own fconfigure.
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (c)
+
+ } elseif {
+ (!$state(-pipeline))
+ && [info exists socketWrQueue($connId)]
+ && [llength $socketWrQueue($connId)]
+ && ("close" ni $state(connection))
+ } {
+ # If not pipelined, (socketRdState eq Rready) tells us that we are
+ # ready for the next write - there is no need to check
+ # socketWrState. Write the next request, if one is waiting.
+ # If the next request is pipelined, it receives premature read
+ # access to the socket. This is not a problem.
+ set token3 [lindex $socketWrQueue($connId) 0]
+ set conn [set ${token3}(connArgs)]
+ #Log nonpipeline, GRANT r/w access to $token3 in KeepSocket
+ set socketRdState($connId) $token3
+ set socketWrState($connId) $token3
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
+ # Connect does its own fconfigure.
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (d)
+
+ } elseif {(!$state(-pipeline))} {
+ set socketWrState($connId) Wready
+ # Rready and Wready and idle: nothing to do.
+ }
+
+ } else {
+ CloseSocket $state(sock) $token
+ # There is no socketMapping($state(socketinfo)), so it does not matter
+ # that CloseQueuedQueries is not called.
+ }
+ return
+}
+
+# http::CheckEof -
+#
+# Read from a socket and close it if eof.
+# The command is bound to "fileevent readable" on an idle socket, and
+# "eof" is the only event that should trigger the binding, occurring when
+# the server times out and half-closes the socket.
+#
+# A read is necessary so that [eof] gives a meaningful result.
+# Any bytes sent are junk (or a bug).
+
+proc http::CheckEof {sock} {
+ set junk [read $sock]
+ set n [string length $junk]
+ if {$n} {
+ Log "WARNING: $n bytes received but no HTTP request sent"
+ }
+
+ if {[catch {eof $sock} res] || $res} {
+ # The server has half-closed the socket.
+ # If a new write has started, its transaction will fail and
+ # will then be error-handled.
+ CloseSocket $sock
+ }
+ return
}
# http::CloseSocket -
@@ -215,42 +761,154 @@ proc http::Finish {token {errormsg ""} {skipCB 0}} {
# Close a socket and remove it from the persistent sockets table. If
# possible an http token is included here but when we are called from a
# fileevent on remote closure we need to find the correct entry - hence
-# the second section.
+# the "else" block of the first "if" command.
+
+proc http::CloseSocket {s {token {}}} {
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ set tk [namespace tail $token]
-proc ::http::CloseSocket {s {token {}}} {
- variable socketmap
catch {fileevent $s readable {}}
- set conn_id {}
+ set connId {}
if {$token ne ""} {
- variable $token
- upvar 0 $token state
- if {[info exists state(socketinfo)]} {
- set conn_id $state(socketinfo)
- }
+ variable $token
+ upvar 0 $token state
+ if {[info exists state(socketinfo)]} {
+ set connId $state(socketinfo)
+ }
} else {
- set map [array get socketmap]
- set ndx [lsearch -exact $map $s]
- if {$ndx != -1} {
+ set map [array get socketMapping]
+ set ndx [lsearch -exact $map $s]
+ if {$ndx >= 0} {
incr ndx -1
- set conn_id [lindex $map $ndx]
- }
+ set connId [lindex $map $ndx]
+ }
}
- if {$conn_id eq {} || ![info exists socketmap($conn_id)]} {
- Log "Closing socket $s (no connection info)"
- if {[catch {close $s} err]} {
- Log "Error: $err"
+ if { ($connId ne {})
+ && [info exists socketMapping($connId)]
+ && ($socketMapping($connId) eq $s)
+ } {
+ Log "Closing connection $connId (sock $socketMapping($connId))"
+ if {[catch {close $socketMapping($connId)} err]} {
+ Log "Error closing connection: $err"
+ } else {
+ }
+ if {$token eq {}} {
+ # Cases with a non-empty token are handled by Finish, so the tokens
+ # are finished in connection order.
+ http::CloseQueuedQueries $connId
+ } else {
}
} else {
- if {[info exists socketmap($conn_id)]} {
- Log "Closing connection $conn_id (sock $socketmap($conn_id))"
- if {[catch {close $socketmap($conn_id)} err]} {
- Log "Error: $err"
- }
- unset socketmap($conn_id)
+ Log "Closing socket $s (no connection info)"
+ if {[catch {close $s} err]} {
+ Log "Error closing socket: $err"
} else {
- Log "Cannot close connection $conn_id - no socket in socket map"
}
}
+ return
+}
+
+# http::CloseQueuedQueries
+#
+# connId - identifier "domain:port" for the connection
+# token - (optional) used only for logging
+#
+# Called from http::CloseSocket and http::Finish, after a connection is closed,
+# to clear the read and write queues if this has not already been done.
+
+proc http::CloseQueuedQueries {connId {token {}}} {
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ ##Log CloseQueuedQueries $connId $token
+ if {![info exists socketMapping($connId)]} {
+ # Command has already been called.
+ # Don't come here again - especially recursively.
+ return
+ }
+
+ # Used only for logging.
+ if {$token eq {}} {
+ set tk {}
+ } else {
+ set tk [namespace tail $token]
+ }
+
+ if { [info exists socketPlayCmd($connId)]
+ && ($socketPlayCmd($connId) ne {ReplayIfClose Wready {} {}})
+ } {
+ # Before unsetting, there is some unfinished business.
+ # - If the server sent "Connection: close", we have stored the command
+ # for retrying any queued requests in socketPlayCmd, so copy that
+ # value for execution below. socketClosing(*) was also set.
+ # - Also clear the queues to prevent calls to Finish that would set the
+ # state for the requests that will be retried to "finished with error
+ # status".
+ # - At this stage socketPhQueue is empty.
+ set unfinished $socketPlayCmd($connId)
+ set socketRdQueue($connId) {}
+ set socketWrQueue($connId) {}
+ } else {
+ set unfinished {}
+ }
+
+ Unset $connId
+
+ if {$unfinished ne {}} {
+ Log ^R$tk Any unfinished transactions (excluding $token) failed \
+ - token $token - unfinished $unfinished
+ {*}$unfinished
+ # Calls ReplayIfClose.
+ }
+ return
+}
+
+# http::Unset
+#
+# The trace on "unset socketRdState(*)" will call CancelReadPipeline
+# and cancel any queued responses.
+# The trace on "unset socketWrState(*)" will call CancelWritePipeline
+# and cancel any queued requests.
+
+proc http::Unset {connId} {
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ unset socketMapping($connId)
+ unset socketRdState($connId)
+ unset socketWrState($connId)
+ unset -nocomplain socketRdQueue($connId)
+ unset -nocomplain socketWrQueue($connId)
+ unset -nocomplain socketClosing($connId)
+ unset -nocomplain socketPlayCmd($connId)
+ unset -nocomplain socketProxyId($connId)
+ return
}
# http::reset --
@@ -262,7 +920,7 @@ proc ::http::CloseSocket {s {token {}}} {
# why Status info.
#
# Side Effects:
-# See Finish
+# See Finish
proc http::reset {token {why reset}} {
variable $token
@@ -275,7 +933,9 @@ proc http::reset {token {why reset}} {
set errorlist $state(error)
unset state
eval ::error $errorlist
+ # i.e. error msg errorInfo errorCode
}
+ return
}
# http::geturl --
@@ -283,30 +943,117 @@ proc http::reset {token {why reset}} {
# Establishes a connection to a remote url via http.
#
# Arguments:
-# url The http URL to goget.
-# args Option value pairs. Valid options include:
+# url The http URL to goget.
+# args Option value pairs. Valid options include:
# -blocksize, -validate, -headers, -timeout
# Results:
# Returns a token for this connection. This token is the name of an
# array that the caller should unset to garbage collect the state.
proc http::geturl {url args} {
+ variable urlTypes
+
+ # - If ::tls::socketCmd has its default value "::socket", change it to the
+ # new value ::http::socketAsCallback.
+ # - If the old value is different, then it has been modified either by the
+ # script or by the Tcl installation, and replaced by a new command. The
+ # script or installation that modified ::tls::socketCmd is also
+ # responsible for integrating ::http::socketAsCallback into its own "new"
+ # command, if it wishes to do so.
+ # - Commands that open a socket:
+ # - ::socket - basic
+ # - ::http::AltSocket - can use a thread to avoid blockage by slow
+ # DNS lookup. See http::config option
+ # -threadlevel.
+ # - ::http::socketAsCallback - as ::http::AltSocket, but can also open a
+ # socket for HTTPS/TLS through a proxy.
+
+ set token [CreateToken $url {*}$args]
+ variable $token
+ upvar 0 $token state
+
+ AsyncTransaction $token
+
+ # --------------------------------------------------------------------------
+ # Synchronous Call to http::geturl
+ # --------------------------------------------------------------------------
+ # - If the call to http::geturl is asynchronous, it is now complete (apart
+ # from delivering the return value).
+ # - If the call to http::geturl is synchronous, the command must now wait
+ # for the HTTP transaction to be completed. The call to http::wait uses
+ # vwait, which may be inappropriate if the caller makes other HTTP
+ # requests in the background.
+ # --------------------------------------------------------------------------
+
+ if {![info exists state(-command)]} {
+ # geturl does EVERYTHING asynchronously, so if the user
+ # calls it synchronously, we just do a wait here.
+ http::wait $token
+
+ if {![info exists state]} {
+ # If we timed out then Finish has been called and the users
+ # command callback may have cleaned up the token. If so we end up
+ # here with nothing left to do.
+ return $token
+ } elseif {$state(status) eq "error"} {
+ # Something went wrong while trying to establish the connection.
+ # Clean up after events and such, but DON'T call the command
+ # callback (if available) because we're going to throw an
+ # exception from here instead.
+ set err [lindex $state(error) 0]
+ cleanup $token
+ return -code error $err
+ }
+ }
+
+ return $token
+}
+
+# ------------------------------------------------------------------------------
+# Proc http::CreateToken
+# ------------------------------------------------------------------------------
+# Command to convert arguments into an initialised request token.
+# The return value is the variable name of the token.
+#
+# Other effects:
+# - Sets ::http::http(usingThread) if not already done
+# - Sets ::http::http(uid) if not already done
+# - Increments ::http::http(uid)
+# - May increment ::http::TmpSockCounter
+# - Alters ::http::socketPlayCmd, ::http::socketWrQueue if a -keepalive 1
+# request is appended to the queue of a persistent socket that is already
+# scheduled to close.
+# This also sets state(alreadyQueued) to 1.
+# - Alters ::http::socketPhQueue if a -keepalive 1 request is appended to the
+# queue of a persistent socket that has not yet been created (and is therefore
+# represented by a placeholder).
+# This also sets state(ReusingPlaceholder) to 1.
+# ------------------------------------------------------------------------------
+
+proc http::CreateToken {url args} {
variable http
variable urlTypes
variable defaultCharset
variable defaultKeepalive
variable strict
+ variable TmpSockCounter
# Initialize the state variable, an array. We'll return the name of this
# array as the token for the transaction.
+ if {![info exists http(usingThread)]} {
+ set http(usingThread) 0
+ }
if {![info exists http(uid)]} {
set http(uid) 0
}
set token [namespace current]::[incr http(uid)]
+ ##Log Starting http::geturl - token $token
variable $token
upvar 0 $token state
+ set tk [namespace tail $token]
reset $token
+ Log ^A$tk URL $url - token $token
# Process command options.
@@ -320,19 +1067,31 @@ proc http::geturl {url args} {
-type application/x-www-form-urlencoded
-queryprogress {}
-protocol 1.1
+ -guesstype 0
binary 0
- state connecting
+ state created
meta {}
+ method {}
coding {}
currentsize 0
totalsize 0
querylength 0
queryoffset 0
- type text/html
+ type application/octet-stream
body {}
status ""
http ""
- connection close
+ httpResponse {}
+ responseCode {}
+ reasonPhrase {}
+ connection keep-alive
+ tid {}
+ requestHeaders {}
+ requestLine {}
+ transfer {}
+ proxyUsed none
+ protoSockThread 0
+ protoProxyConn 0
}
set state(-keepalive) $defaultKeepalive
set state(-strict) $strict
@@ -340,14 +1099,16 @@ proc http::geturl {url args} {
array set type {
-binary boolean
-blocksize integer
+ -guesstype boolean
-queryblocksize integer
-strict boolean
-timeout integer
-validate boolean
+ -headers list
}
set state(charset) $defaultCharset
set options {
- -binary -blocksize -channel -command -handler -headers -keepalive
+ -binary -blocksize -channel -command -guesstype -handler -headers -keepalive
-method -myaddr -progress -protocol -query -queryblocksize
-querychannel -queryprogress -strict -timeout -type -validate
}
@@ -357,14 +1118,18 @@ proc http::geturl {url args} {
foreach {flag value} $args {
if {[regexp -- $pat $flag]} {
# Validate numbers
- if {
- [info exists type($flag)] &&
- ![string is $type($flag) -strict $value]
- } then {
+ if { [info exists type($flag)]
+ && (![string is $type($flag) -strict $value])
+ } {
unset $token
return -code error \
"Bad value for $flag ($value), must be $type($flag)"
}
+ if {($flag eq "-headers") && ([llength $value] % 2 != 0)} {
+ unset $token
+ return -code error "Bad value for $flag ($value), number\
+ of list elements must be even"
+ }
set state($flag) $value
} else {
unset $token
@@ -415,7 +1180,9 @@ proc http::geturl {url args} {
# Note that the RE actually combines the user and password parts, as
# recommended in RFC 3986. Indeed, that RFC states that putting passwords
# in URLs is a Really Bad Idea, something with which I would agree utterly.
- # Also note that we do not currently support IPv6 addresses.
+ # RFC 9110 Sec 4.2.4 goes further than this, and deprecates the format
+ # "user:password@". It is retained here for backward compatibility,
+ # but its use is not recommended.
#
# From a validation perspective, we need to ensure that the parts of the
# URL that are going to the server are correctly encoded. This is only
@@ -430,7 +1197,10 @@ proc http::geturl {url args} {
[^@/\#?]+ # <userinfo part of authority>
) @
)?
- ( [^/:\#?]+ ) # <host part of authority>
+ ( # <host part of authority>
+ [^/:\#?]+ | # host name or IPv4 address
+ \[ [^/\#?]+ \] # IPv6 address in square brackets
+ )
(?: : (\d+) )? # <port part of authority>
)?
( [/\?] [^\#]*)? # <path> (including query)
@@ -444,6 +1214,7 @@ proc http::geturl {url args} {
return -code error "Unsupported URL: $url"
}
# Phase two: validate
+ set host [string trim $host {[]}]; # strip square brackets from IPv6 address
if {$host eq ""} {
# Caller has to provide a host name; we do not have a "default host"
# that would enable us to handle relative URLs.
@@ -500,8 +1271,12 @@ proc http::geturl {url args} {
}
return -code error "Illegal characters in URL path"
}
+ if {![regexp {^[^?#]+} $srvurl state(path)]} {
+ set state(path) /
+ }
} else {
set srvurl /
+ set state(path) /
}
if {$proto eq ""} {
set proto http
@@ -511,8 +1286,16 @@ proc http::geturl {url args} {
unset $token
return -code error "Unsupported URL type \"$proto\""
}
- set defport [lindex $urlTypes($lower) 0]
- set defcmd [lindex $urlTypes($lower) 1]
+ lassign $urlTypes($lower) defport defcmd socketCmdVarName useSockThread end2EndProxy
+
+ # If the external handler for protocol $proto has given $socketCmdVarName the expected
+ # value "::socket", overwrite it with the new value.
+ if {($socketCmdVarName ne {}) && ([set $socketCmdVarName] eq {::socket})} {
+ set $socketCmdVarName ::http::socketAsCallback
+ }
+
+ set state(protoSockThread) $useSockThread
+ set state(protoProxyConn) $end2EndProxy
if {$port eq ""} {
set port $defport
@@ -520,6 +1303,9 @@ proc http::geturl {url args} {
if {![catch {$http(-proxyfilter) $host} proxy]} {
set phost [lindex $proxy 0]
set pport [lindex $proxy 1]
+ } else {
+ set phost {}
+ set pport {}
}
# OK, now reassemble into a full URL
@@ -533,122 +1319,895 @@ proc http::geturl {url args} {
append url : $port
}
append url $srvurl
- # Don't append the fragment!
+ # Don't append the fragment! RFC 7230 Sec 5.1
set state(url) $url
- # If a timeout is specified we set up the after event and arrange for an
- # asynchronous socket connection.
+ # Proxy connections aren't shared among different hosts.
+ set state(socketinfo) $host:$port
- set sockopts [list -async]
- if {$state(-timeout) > 0} {
- set state(after) [after $state(-timeout) \
- [list http::reset $token timeout]]
+ # Save the accept types at this point to prevent a race condition. [Bug
+ # c11a51c482]
+ set state(accept-types) $http(-accept)
+
+ # Check whether this is an Upgrade request.
+ set connectionValues [SplitCommaSeparatedFieldValue \
+ [GetFieldValue $state(-headers) Connection]]
+ set connectionValues [string tolower $connectionValues]
+ set upgradeValues [SplitCommaSeparatedFieldValue \
+ [GetFieldValue $state(-headers) Upgrade]]
+ set state(upgradeRequest) [expr { "upgrade" in $connectionValues
+ && [llength $upgradeValues] >= 1}]
+ set state(connectionValues) $connectionValues
+
+ if {$isQuery || $isQueryChannel} {
+ # It's a POST.
+ # A client wishing to send a non-idempotent request SHOULD wait to send
+ # that request until it has received the response status for the
+ # previous request.
+ if {$http(-postfresh)} {
+ # Override -keepalive for a POST. Use a new connection, and thus
+ # avoid the small risk of a race against server timeout.
+ set state(-keepalive) 0
+ } else {
+ # Allow -keepalive but do not -pipeline - wait for the previous
+ # transaction to finish.
+ # There is a small risk of a race against server timeout.
+ set state(-pipeline) 0
+ }
+ } elseif {$state(upgradeRequest)} {
+ # It's an upgrade request. Method must be GET (untested).
+ # Force -keepalive to 0 so the connection is not made over a persistent
+ # socket, i.e. one used for multiple HTTP requests.
+ set state(-keepalive) 0
+ } else {
+ # It's a non-upgrade GET or HEAD.
+ set state(-pipeline) $http(-pipeline)
}
- # If we are using the proxy, we must pass in the full URL that includes
- # the server name.
+ # We cannot handle chunked encodings with -handler, so force HTTP/1.0
+ # until we can manage this.
+ if {[info exists state(-handler)]} {
+ set state(-protocol) 1.0
+ }
+
+ # RFC 7320 A.1 - HTTP/1.0 Keep-Alive is problematic. We do not support it.
+ if {$state(-protocol) eq "1.0"} {
+ set state(connection) close
+ set state(-keepalive) 0
+ }
- if {[info exists phost] && ($phost ne "")} {
+ # Handle proxy requests here for http:// but not for https://
+ # The proxying for https is done in the ::http::socketAsCallback command.
+ # A proxy request for http:// needs the full URL in the HTTP request line,
+ # including the server name.
+ # The *tls* test below attempts to describe protocols in addition to
+ # "https on port 443" that use HTTP over TLS.
+ if {($phost ne "") && (!$end2EndProxy)} {
set srvurl $url
set targetAddr [list $phost $pport]
+ set state(proxyUsed) HttpProxy
+ # The value of state(proxyUsed) none|HttpProxy depends only on the
+ # all-transactions http::config settings and on the target URL.
+ # Even if this is a persistent socket there is no need to change the
+ # value of state(proxyUsed) for other transactions that use the socket:
+ # they have the same value already.
} else {
set targetAddr [list $host $port]
}
- # Proxy connections aren't shared among different hosts.
- set state(socketinfo) $host:$port
+
+ set sockopts [list -async]
+
+ # Pass -myaddr directly to the socket command
+ if {[info exists state(-myaddr)]} {
+ lappend sockopts -myaddr $state(-myaddr)
+ }
+
+ if {$useSockThread} {
+ set targs [list -type $token]
+ } else {
+ set targs {}
+ }
+ set state(connArgs) [list $proto $phost $srvurl]
+ set state(openCmd) [list {*}$defcmd {*}$sockopts {*}$targs {*}$targetAddr]
# See if we are supposed to use a previously opened channel.
+ # - In principle, ANY call to http::geturl could use a previously opened
+ # channel if it is available - the "Connection: keep-alive" header is a
+ # request to leave the channel open AFTER completion of this call.
+ # - In fact, we try to use an existing channel only if -keepalive 1 -- this
+ # means that at most one channel is left open for each value of
+ # $state(socketinfo). This property simplifies the mapping of open
+ # channels.
+ set reusing 0
+ set state(alreadyQueued) 0
+ set state(ReusingPlaceholder) 0
if {$state(-keepalive)} {
- variable socketmap
- if {[info exists socketmap($state(socketinfo))]} {
- if {[catch {fconfigure $socketmap($state(socketinfo))}]} {
- Log "WARNING: socket for $state(socketinfo) was closed"
- unset socketmap($state(socketinfo))
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ if {[info exists socketMapping($state(socketinfo))]} {
+ # - If the connection is idle, it has a "fileevent readable" binding
+ # to http::CheckEof, in case the server times out and half-closes
+ # the socket (http::CheckEof closes the other half).
+ # - We leave this binding in place until just before the last
+ # puts+flush in http::Connected (GET/HEAD) or http::Write (POST),
+ # after which the HTTP response might be generated.
+
+ if { [info exists socketClosing($state(socketinfo))]
+ && $socketClosing($state(socketinfo))
+ } {
+ # socketClosing(*) is set because the server has sent a
+ # "Connection: close" header.
+ # Do not use the persistent socket again.
+ # Since we have only one persistent socket per server, and the
+ # old socket is not yet dead, add the request to the write queue
+ # of the dying socket, which will be replayed by ReplayIfClose.
+ # Also add it to socketWrQueue(*) which is used only if an error
+ # causes a call to Finish.
+ set reusing 1
+ set sock $socketMapping($state(socketinfo))
+ set state(proxyUsed) $socketProxyId($state(socketinfo))
+ Log "reusing closing socket $sock for $state(socketinfo) - token $token"
+
+ set state(alreadyQueued) 1
+ lassign $socketPlayCmd($state(socketinfo)) com0 com1 com2 com3
+ lappend com3 $token
+ set socketPlayCmd($state(socketinfo)) [list $com0 $com1 $com2 $com3]
+ lappend socketWrQueue($state(socketinfo)) $token
+ ##Log socketPlayCmd($state(socketinfo)) is $socketPlayCmd($state(socketinfo))
+ ##Log socketWrQueue($state(socketinfo)) is $socketWrQueue($state(socketinfo))
+ } elseif {
+ [catch {fconfigure $socketMapping($state(socketinfo))}]
+ && (![SockIsPlaceHolder $socketMapping($state(socketinfo))])
+ } {
+ ###Log "Socket $socketMapping($state(socketinfo)) for $state(socketinfo)"
+ # FIXME Is it still possible for this code to be executed? If
+ # so, this could be another place to call TestForReplay,
+ # rather than discarding the queued transactions.
+ Log "WARNING: socket for $state(socketinfo) was closed\
+ - token $token"
+ Log "WARNING - if testing, pay special attention to this\
+ case (GH) which is seldom executed - token $token"
+
+ # This will call CancelReadPipeline, CancelWritePipeline, and
+ # cancel any queued requests, responses.
+ Unset $state(socketinfo)
} else {
- set sock $socketmap($state(socketinfo))
- Log "reusing socket $sock for $state(socketinfo)"
- catch {fileevent $sock writable {}}
- catch {fileevent $sock readable {}}
+ # Use the persistent socket.
+ # - The socket may not be ready to write: an earlier request might
+ # still be still writing (in the pipelined case) or
+ # writing/reading (in the nonpipeline case). This possibility
+ # is handled by socketWrQueue later in this command.
+ # - The socket may not yet exist, and be defined with a placeholder.
+ set reusing 1
+ set sock $socketMapping($state(socketinfo))
+ set state(proxyUsed) $socketProxyId($state(socketinfo))
+ if {[SockIsPlaceHolder $sock]} {
+ set state(ReusingPlaceholder) 1
+ lappend socketPhQueue($sock) $token
+ } else {
+ }
+ Log "reusing open socket $sock for $state(socketinfo) - token $token"
}
+ # Do not automatically close the connection socket.
+ set state(connection) keep-alive
}
- # don't automatically close this connection socket
- set state(connection) {}
}
+
+ set state(reusing) $reusing
+ unset reusing
+
if {![info exists sock]} {
- # Pass -myaddr directly to the socket command
- if {[info exists state(-myaddr)]} {
- lappend sockopts -myaddr $state(-myaddr)
- }
- if {[catch {eval $defcmd $sockopts $targetAddr} sock]} {
- # something went wrong while trying to establish the connection.
- # Clean up after events and such, but DON'T call the command
- # callback (if available) because we're going to throw an
- # exception from here instead.
+ # N.B. At this point ([info exists sock] == $state(reusing)).
+ # This will no longer be true after we set a value of sock here.
+ # Give the socket a placeholder name.
+ set sock HTTP_PLACEHOLDER_[incr TmpSockCounter]
+ }
+ set state(sock) $sock
+ if {$state(reusing)} {
+ # Define these for use (only) by http::ReplayIfDead if the persistent
+ # connection has died.
+ set state(tmpConnArgs) $state(connArgs)
+ set state(tmpState) [array get state]
+ set state(tmpOpenCmd) $state(openCmd)
+ }
+ return $token
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc ::http::SockIsPlaceHolder
+# ------------------------------------------------------------------------------
+# Command to return 0 if the argument is a genuine socket handle, or 1 if is a
+# placeholder value generated by geturl or ReplayCore before the real socket is
+# created.
+#
+# Arguments:
+# sock - either a valid socket handle or a placeholder value
+#
+# Return Value: 0 or 1
+# ------------------------------------------------------------------------------
+
+proc http::SockIsPlaceHolder {sock} {
+ expr {[string range $sock 0 16] eq {HTTP_PLACEHOLDER_}}
+}
+
+
+# ------------------------------------------------------------------------------
+# state(reusing)
+# ------------------------------------------------------------------------------
+# - state(reusing) is set by geturl, ReplayCore
+# - state(reusing) is used by geturl, AsyncTransaction, OpenSocket,
+# ConfigureNewSocket, and ScheduleRequest when creating and configuring the
+# connection.
+# - state(reusing) is used by Connect, Connected, Event x 2 when deciding
+# whether to call TestForReplay.
+# - Other places where state(reusing) is used:
+# - Connected - if reusing and not pipelined, start the state(-timeout)
+# timeout (when writing).
+# - DoneRequest - if reusing and pipelined, send the next pipelined write
+# - Event - if reusing and pipelined, start the state(-timeout)
+# timeout (when reading).
+# - Event - if (not reusing) and pipelined, send the next pipelined
+# write.
+# ------------------------------------------------------------------------------
+
+
+# ------------------------------------------------------------------------------
+# Proc http::AsyncTransaction
+# ------------------------------------------------------------------------------
+# This command is called by geturl and ReplayCore to prepare the HTTP
+# transaction prescribed by a suitably prepared token.
+#
+# Arguments:
+# token - connection token (name of an array)
+#
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+proc http::AsyncTransaction {token} {
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ set sock $state(sock)
+
+ # See comments above re the start of this timeout in other cases.
+ if {(!$state(reusing)) && ($state(-timeout) > 0)} {
+ set state(after) [after $state(-timeout) \
+ [list http::reset $token timeout]]
+ }
+
+ if { $state(-keepalive)
+ && (![info exists socketMapping($state(socketinfo))])
+ } {
+ # This code is executed only for the first -keepalive request on a
+ # socket. It makes the socket persistent.
+ ##Log " PreparePersistentConnection" $token -- $sock -- DO
+ set DoLater [PreparePersistentConnection $token]
+ } else {
+ ##Log " PreparePersistentConnection" $token -- $sock -- SKIP
+ set DoLater {-traceread 0 -tracewrite 0}
+ }
+
+ if {$state(ReusingPlaceholder)} {
+ # - This request was added to the socketPhQueue of a persistent
+ # connection.
+ # - But the connection has not yet been created and is a placeholder;
+ # - And the placeholder was created by an earlier request.
+ # - When that earlier request calls OpenSocket, its placeholder is
+ # replaced with a true socket, and it then executes the equivalent of
+ # OpenSocket for any subsequent requests that have
+ # $state(ReusingPlaceholder).
+ Log >J$tk after idle coro NO - ReusingPlaceholder
+ } elseif {$state(alreadyQueued)} {
+ # - This request was added to the socketWrQueue and socketPlayCmd
+ # of a persistent connection that will close at the end of its current
+ # read operation.
+ Log >J$tk after idle coro NO - alreadyQueued
+ } else {
+ Log >J$tk after idle coro YES
+ set CoroName ${token}--SocketCoroutine
+ set cancel [after idle [list coroutine $CoroName ::http::OpenSocket \
+ $token $DoLater]]
+ dict set socketCoEvent($state(socketinfo)) $token $cancel
+ set state(socketcoro) $cancel
+ }
+
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::PreparePersistentConnection
+# ------------------------------------------------------------------------------
+# This command is called by AsyncTransaction to initialise a "persistent
+# connection" based upon a socket placeholder. It is called the first time the
+# socket is associated with a "-keepalive" request.
+#
+# Arguments:
+# token - connection token (name of an array)
+#
+# Return Value: - DoLater, a dictionary of boolean values listing unfinished
+# tasks; to be passed to ConfigureNewSocket via OpenSocket.
+# ------------------------------------------------------------------------------
+
+proc http::PreparePersistentConnection {token} {
+ variable $token
+ upvar 0 $token state
+
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ set DoLater {-traceread 0 -tracewrite 0}
+ set socketMapping($state(socketinfo)) $state(sock)
+ set socketProxyId($state(socketinfo)) $state(proxyUsed)
+ # - The value of state(proxyUsed) was set in http::CreateToken to either
+ # "none" or "HttpProxy".
+ # - $token is the first transaction to use this placeholder, so there are
+ # no other tokens whose (proxyUsed) must be modified.
+
+ if {![info exists socketRdState($state(socketinfo))]} {
+ set socketRdState($state(socketinfo)) {}
+ # set varName ::http::socketRdState($state(socketinfo))
+ # trace add variable $varName unset ::http::CancelReadPipeline
+ dict set DoLater -traceread 1
+ }
+ if {![info exists socketWrState($state(socketinfo))]} {
+ set socketWrState($state(socketinfo)) {}
+ # set varName ::http::socketWrState($state(socketinfo))
+ # trace add variable $varName unset ::http::CancelWritePipeline
+ dict set DoLater -tracewrite 1
+ }
+
+ if {$state(-pipeline)} {
+ #Log new, init for pipelined, GRANT write access to $token in geturl
+ # Also grant premature read access to the socket. This is OK.
+ set socketRdState($state(socketinfo)) $token
+ set socketWrState($state(socketinfo)) $token
+ } else {
+ # socketWrState is not used by this non-pipelined transaction.
+ # We cannot leave it as "Wready" because the next call to
+ # http::geturl with a pipelined transaction would conclude that the
+ # socket is available for writing.
+ #Log new, init for nonpipeline, GRANT r/w access to $token in geturl
+ set socketRdState($state(socketinfo)) $token
+ set socketWrState($state(socketinfo)) $token
+ }
+
+ # Value of socketPhQueue() may have already been set by ReplayCore.
+ if {![info exists socketPhQueue($state(sock))]} {
+ set socketPhQueue($state(sock)) {}
+ }
+ set socketRdQueue($state(socketinfo)) {}
+ set socketWrQueue($state(socketinfo)) {}
+ set socketClosing($state(socketinfo)) 0
+ set socketPlayCmd($state(socketinfo)) {ReplayIfClose Wready {} {}}
+ set socketCoEvent($state(socketinfo)) {}
+ set socketProxyId($state(socketinfo)) {}
+
+ return $DoLater
+}
+
+# ------------------------------------------------------------------------------
+# Proc ::http::OpenSocket
+# ------------------------------------------------------------------------------
+# This command is called as a coroutine idletask to start the asynchronous HTTP
+# transaction in most cases. For the exceptions, see the calling code in
+# command AsyncTransaction.
+#
+# Arguments:
+# token - connection token (name of an array)
+# DoLater - dictionary of boolean values listing unfinished tasks
+#
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+proc http::OpenSocket {token DoLater} {
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ Log >K$tk Start OpenSocket coroutine
+
+ if {![info exists state(-keepalive)]} {
+ # The request has already been cancelled by the calling script.
+ return
+ }
+
+ set sockOld $state(sock)
+
+ dict unset socketCoEvent($state(socketinfo)) $token
+ unset -nocomplain state(socketcoro)
+
+ if {[catch {
+ if {$state(reusing)} {
+ # If ($state(reusing)) is true, then we do not need to create a new
+ # socket, even if $sockOld is only a placeholder for a socket.
+ set sock $sockOld
+ } else {
+ # set sock in the [catch] below.
+ set pre [clock milliseconds]
+ ##Log pre socket opened, - token $token
+ ##Log $state(openCmd) - token $token
+ set sock [namespace eval :: $state(openCmd)]
set state(sock) $sock
- Finish $token "" 1
- cleanup $token
- return -code error $sock
- }
+ # Normal return from $state(openCmd) always returns a valid socket.
+ # A TLS proxy connection with 407 or other failure from the
+ # proxy server raises an error.
+
+ # Initialisation of a new socket.
+ ##Log post socket opened, - token $token
+ ##Log socket opened, now fconfigure - token $token
+ set delay [expr {[clock milliseconds] - $pre}]
+ if {$delay > 3000} {
+ Log socket delay $delay - token $token
+ }
+ fconfigure $sock -translation {auto crlf} \
+ -buffersize $state(-blocksize)
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ fconfigure $sock -profile replace
+ }
+ ##Log socket opened, DONE fconfigure - token $token
+ }
+
+ Log "Using $sock for $state(socketinfo) - token $token" \
+ [expr {$state(-keepalive)?"keepalive":""}]
+
+ # Code above has set state(sock) $sock
+ ConfigureNewSocket $token $sockOld $DoLater
+ ##Log OpenSocket success $sock - token $token
+ } result errdict]} {
+ ##Log OpenSocket failed $result - token $token
+ # There may be other requests in the socketPhQueue.
+ # Prepare socketPlayCmd so that Finish will replay them.
+ if { ($state(-keepalive)) && (!$state(reusing))
+ && [info exists socketPhQueue($sockOld)]
+ && ($socketPhQueue($sockOld) ne {})
+ } {
+ if {$socketMapping($state(socketinfo)) ne $sockOld} {
+ Log "WARNING: this code should not be reached.\
+ {$socketMapping($state(socketinfo)) ne $sockOld}"
+ }
+ set socketPlayCmd($state(socketinfo)) [list ReplayIfClose Wready {} $socketPhQueue($sockOld)]
+ set socketPhQueue($sockOld) {}
+ }
+ if {[string range $result 0 20] eq {proxy connect failed:}} {
+ # - The HTTPS proxy did not create a socket. The pre-existing value
+ # (a "placeholder socket") is unchanged.
+ # - The proxy returned a valid HTTP response to the failed CONNECT
+ # request, and http::SecureProxyConnect copied this to $token,
+ # and also set ${token}(connection) set to "close".
+ # - Remove the error message $result so that Finish delivers this
+ # HTTP response to the caller.
+ set result {}
+ }
+ Finish $token $result
+ # Because socket creation failed, the placeholder "socket" must be
+ # "closed" and (if persistent) removed from the persistent sockets
+ # table. In the {proxy connect failed:} case Finish does this because
+ # the value of ${token}(connection) is "close". In the other cases here,
+ # it does so because $result is non-empty.
}
- set state(sock) $sock
- Log "Using $sock for $state(socketinfo)" \
- [expr {$state(-keepalive)?"keepalive":""}]
- if {$state(-keepalive)} {
- set socketmap($state(socketinfo)) $sock
+ ##Log Leaving http::OpenSocket coroutine [info coroutine] - token $token
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc ::http::ConfigureNewSocket
+# ------------------------------------------------------------------------------
+# Command to initialise a newly-created socket. Called only from OpenSocket.
+#
+# This command is called by OpenSocket whenever a genuine socket (sockNew) has
+# been opened for for use by HTTP. It does two things:
+# (1) If $token uses a placeholder socket, this command replaces the placeholder
+# socket with the real socket, not only in $token but in all other requests
+# that use the same placeholder.
+# (2) It calls ScheduleRequest to schedule each request that uses the socket.
+#
+#
+# Value of sockOld/sockNew can be "sock" (genuine socket) or "ph" (placeholder).
+# sockNew is ${token}(sock)
+# sockOld sockNew CASES
+# sock sock (if $reusing, and sockOld is sock)
+# ph sock (if (not $reusing), and sockOld is ph)
+# ph ph (if $reusing, and sockOld is ph) - not called in this case
+# sock ph (cannot occur unless a bug) - not called in this case
+# (if (not $reusing), and sockOld is sock) - illogical
+#
+# Arguments:
+# token - connection token (name of an array)
+# sockOld - handle or placeholder used for a socket before the call to
+# OpenSocket
+# DoLater - dictionary of boolean values listing unfinished tasks
+#
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+proc http::ConfigureNewSocket {token sockOld DoLater} {
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ set reusing $state(reusing)
+ set sock $state(sock)
+ set proxyUsed $state(proxyUsed)
+ ##Log " ConfigureNewSocket" $token $sockOld ... -- $reusing $sock $proxyUsed
+
+ if {(!$reusing) && ($sock ne $sockOld)} {
+ # Replace the placeholder value sockOld with sock.
+
+ if { [info exists socketMapping($state(socketinfo))]
+ && ($socketMapping($state(socketinfo)) eq $sockOld)
+ } {
+ set socketMapping($state(socketinfo)) $sock
+ set socketProxyId($state(socketinfo)) $proxyUsed
+ # tokens that use the placeholder $sockOld are updated below.
+ ##Log set socketMapping($state(socketinfo)) $sock
+ }
+
+ # Now finish any tasks left over from PreparePersistentConnection on
+ # the connection.
+ #
+ # The "unset" traces are fired by init (clears entire arrays), and
+ # by http::Unset.
+ # Unset is called by CloseQueuedQueries and (possibly never) by geturl.
+ #
+ # CancelReadPipeline, CancelWritePipeline call http::Finish for each
+ # token.
+ #
+ # FIXME If Finish is placeholder-aware, these traces can be set earlier,
+ # in PreparePersistentConnection.
+
+ if {[dict get $DoLater -traceread]} {
+ set varName ::http::socketRdState($state(socketinfo))
+ trace add variable $varName unset ::http::CancelReadPipeline
+ }
+ if {[dict get $DoLater -tracewrite]} {
+ set varName ::http::socketWrState($state(socketinfo))
+ trace add variable $varName unset ::http::CancelWritePipeline
+ }
}
- if {![info exists phost]} {
- set phost ""
+ # Do this in all cases.
+ ScheduleRequest $token
+
+ # Now look at all other tokens that use the placeholder $sockOld.
+ if { (!$reusing)
+ && ($sock ne $sockOld)
+ && [info exists socketPhQueue($sockOld)]
+ } {
+ ##Log " ConfigureNewSocket" $token scheduled, now do $socketPhQueue($sockOld)
+ foreach tok $socketPhQueue($sockOld) {
+ # 1. Amend the token's (sock).
+ ##Log set ${tok}(sock) $sock
+ set ${tok}(sock) $sock
+ set ${tok}(proxyUsed) $proxyUsed
+
+ # 2. Schedule the token's HTTP request.
+ # Every token in socketPhQueue(*) has reusing 1 alreadyQueued 0.
+ set ${tok}(reusing) 1
+ set ${tok}(alreadyQueued) 0
+ ScheduleRequest $tok
+ }
+ set socketPhQueue($sockOld) {}
}
- fileevent $sock writable [list http::Connect $token $proto $phost $srvurl]
+ ##Log " ConfigureNewSocket" $token DONE
- # Wait for the connection to complete.
- if {![info exists state(-command)]} {
- # geturl does EVERYTHING asynchronously, so if the user
- # calls it synchronously, we just do a wait here.
- http::wait $token
+ return
+}
- if {![info exists state]} {
- # If we timed out then Finish has been called and the users
- # command callback may have cleaned up the token. If so we end up
- # here with nothing left to do.
- return $token
- } elseif {$state(status) eq "error"} {
- # Something went wrong while trying to establish the connection.
- # Clean up after events and such, but DON'T call the command
- # callback (if available) because we're going to throw an
- # exception from here instead.
- set err [lindex $state(error) 0]
- cleanup $token
- return -code error $err
+
+# ------------------------------------------------------------------------------
+# The values of array variables socketMapping etc.
+# ------------------------------------------------------------------------------
+# connId "$host:$port"
+# socketMapping($connId) the handle or placeholder for the socket that is used
+# for "-keepalive 1" requests to $connId.
+# socketRdState($connId) the token that is currently reading from the socket.
+# Other values: Rready (ready for next token to read).
+# socketWrState($connId) the token that is currently writing to the socket.
+# Other values: Wready (ready for next token to write),
+# peNding (would be ready for next write, except that
+# the integrity of a non-pipelined transaction requires
+# waiting until the read(s) in progress are finished).
+# socketRdQueue($connId) List of tokens that are queued for reading later.
+# socketWrQueue($connId) List of tokens that are queued for writing later.
+# socketPhQueue($sock) List of tokens that are queued to use a placeholder
+# socket, when the real socket has not yet been created.
+# socketClosing($connId) (boolean) true iff a server response header indicates
+# that the server will close the connection at the end of
+# the current response.
+# socketPlayCmd($connId) The command to execute to replay pending and
+# part-completed transactions if the socket closes early.
+# socketCoEvent($connId) Identifier for the "after idle" event that will launch
+# an OpenSocket coroutine to open or re-use a socket.
+# socketProxyId($connId) The type of proxy that this socket uses: values are
+# those of state(proxyUsed) i.e. none, HttpProxy,
+# SecureProxy, and SecureProxyFailed.
+# The value is not used for anything by http, its purpose
+# is to set the value of state() for caller information.
+# ------------------------------------------------------------------------------
+
+
+# ------------------------------------------------------------------------------
+# Using socketWrState(*), socketWrQueue(*), socketRdState(*), socketRdQueue(*)
+# ------------------------------------------------------------------------------
+# The element socketWrState($connId) has a value which is either the name of
+# the token that is permitted to write to the socket, or "Wready" if no
+# token is permitted to write.
+#
+# The code that sets the value to Wready immediately calls
+# http::NextPipelinedWrite, which examines socketWrQueue($connId) and
+# processes the next request in the queue, if there is one. The value
+# Wready is not found when the interpreter is in the event loop unless the
+# socket is idle.
+#
+# The element socketRdState($connId) has a value which is either the name of
+# the token that is permitted to read from the socket, or "Rready" if no
+# token is permitted to read.
+#
+# The code that sets the value to Rready then examines
+# socketRdQueue($connId) and processes the next request in the queue, if
+# there is one. The value Rready is not found when the interpreter is in
+# the event loop unless the socket is idle.
+# ------------------------------------------------------------------------------
+
+
+# ------------------------------------------------------------------------------
+# Proc http::ScheduleRequest
+# ------------------------------------------------------------------------------
+# Command to either begin the HTTP request, or add it to the appropriate queue.
+# Called from two places in ConfigureNewSocket.
+#
+# Arguments:
+# token - connection token (name of an array)
+#
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+proc http::ScheduleRequest {token} {
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+
+ Log >L$tk ScheduleRequest
+
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ set Unfinished 0
+
+ set reusing $state(reusing)
+ set sockNew $state(sock)
+
+ # The "if" tests below: must test against the current values of
+ # socketWrState, socketRdState, and so the tests must be done here,
+ # not earlier in PreparePersistentConnection.
+
+ if {$state(alreadyQueued)} {
+ # The request has been appended to the queue of a persistent socket
+ # (that is scheduled to close and have its queue replayed).
+ #
+ # A write may or may not be in progress. There is no need to set
+ # socketWrState to prevent another call stealing write access - all
+ # subsequent calls on this socket will come here because the socket
+ # will close after the current read, and its
+ # socketClosing($connId) is 1.
+ ##Log "HTTP request for token $token is queued"
+
+ } elseif { $reusing
+ && $state(-pipeline)
+ && ($socketWrState($state(socketinfo)) ne "Wready")
+ } {
+ ##Log "HTTP request for token $token is queued for pipelined use"
+ lappend socketWrQueue($state(socketinfo)) $token
+
+ } elseif { $reusing
+ && (!$state(-pipeline))
+ && ($socketWrState($state(socketinfo)) ne "Wready")
+ } {
+ # A write is queued or in progress. Lappend to the write queue.
+ ##Log "HTTP request for token $token is queued for nonpipeline use"
+ lappend socketWrQueue($state(socketinfo)) $token
+
+ } elseif { $reusing
+ && (!$state(-pipeline))
+ && ($socketWrState($state(socketinfo)) eq "Wready")
+ && ($socketRdState($state(socketinfo)) ne "Rready")
+ } {
+ # A read is queued or in progress, but not a write. Cannot start the
+ # nonpipeline transaction, but must set socketWrState to prevent a
+ # pipelined request jumping the queue.
+ ##Log "HTTP request for token $token is queued for nonpipeline use"
+ #Log re-use nonpipeline, GRANT delayed write access to $token in geturl
+ set socketWrState($state(socketinfo)) peNding
+ lappend socketWrQueue($state(socketinfo)) $token
+
+ } else {
+ if {$reusing && $state(-pipeline)} {
+ #Log new, init for pipelined, GRANT write access to $token in geturl
+ # DO NOT grant premature read access to the socket.
+ # set socketRdState($state(socketinfo)) $token
+ set socketWrState($state(socketinfo)) $token
+ } elseif {$reusing} {
+ # socketWrState is not used by this non-pipelined transaction.
+ # We cannot leave it as "Wready" because the next call to
+ # http::geturl with a pipelined transaction would conclude that the
+ # socket is available for writing.
+ #Log new, init for nonpipeline, GRANT r/w access to $token in geturl
+ set socketRdState($state(socketinfo)) $token
+ set socketWrState($state(socketinfo)) $token
+ } else {
}
+
+ # Process the request now.
+ # - Command is not called unless $state(sock) is a real socket handle
+ # and not a placeholder.
+ # - All (!$reusing) cases come here.
+ # - Some $reusing cases come here too if the connection is
+ # marked as ready. Those $reusing cases are:
+ # $reusing && ($socketWrState($state(socketinfo)) eq "Wready") &&
+ # EITHER !$pipeline && ($socketRdState($state(socketinfo)) eq "Rready")
+ # OR $pipeline
+ #
+ #Log ---- $state(socketinfo) << conn to $token for HTTP request (a)
+ ##Log " ScheduleRequest" $token -- fileevent $state(sock) writable for $token
+ # Connect does its own fconfigure.
+
+ lassign $state(connArgs) proto phost srvurl
+
+ if {[catch {
+ fileevent $state(sock) writable \
+ [list http::Connect $token $proto $phost $srvurl]
+ } res opts]} {
+ # The socket no longer exists.
+ ##Log bug -- socket gone -- $res -- $opts
+ }
+
}
- return $token
+ return
}
-proc http::Connected { token proto phost srvurl} {
+# ------------------------------------------------------------------------------
+# Proc http::SendHeader
+# ------------------------------------------------------------------------------
+# Command to send a request header, and keep a copy in state(requestHeaders)
+# for debugging purposes.
+#
+# Arguments:
+# token - connection token (name of an array)
+# key - header name
+# value - header value
+#
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+proc http::SendHeader {token key value} {
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+ set sock $state(sock)
+ lappend state(requestHeaders) [string tolower $key] $value
+ puts $sock "$key: $value"
+ return
+}
+
+# http::Connected --
+#
+# Callback used when the connection to the HTTP server is actually
+# established.
+#
+# Arguments:
+# token State token.
+# proto What protocol (http, https, etc.) was used to connect.
+# phost Are we using keep-alive? Non-empty if yes.
+# srvurl Service-local URL that we're requesting
+# Results:
+# None.
+
+proc http::Connected {token proto phost srvurl} {
variable http
variable urlTypes
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
variable $token
upvar 0 $token state
+ set tk [namespace tail $token]
- # Set back the variables needed here
+ if {$state(reusing) && (!$state(-pipeline)) && ($state(-timeout) > 0)} {
+ set state(after) [after $state(-timeout) \
+ [list http::reset $token timeout]]
+ }
+
+ # Set back the variables needed here.
set sock $state(sock)
set isQueryChannel [info exists state(-querychannel)]
set isQuery [info exists state(-query)]
- set host [lindex [split $state(socketinfo) :] 0]
- set port [lindex [split $state(socketinfo) :] 1]
+ regexp {^(.+):([^:]+)$} $state(socketinfo) {} host port
set lower [string tolower $proto]
set defport [lindex $urlTypes($lower) 0]
- # Send data in cr-lf format, but accept any line terminators
-
- fconfigure $sock -translation {auto crlf} -buffersize $state(-blocksize)
+ # Send data in cr-lf format, but accept any line terminators.
+ # Initialisation to {auto *} now done in geturl, KeepSocket and DoneRequest.
+ # We are concerned here with the request (write) not the response (read).
+ lassign [fconfigure $sock -translation] trRead trWrite
+ fconfigure $sock -translation [list $trRead crlf] \
+ -buffersize $state(-blocksize)
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ fconfigure $sock -profile replace
+ }
# The following is disallowed in safe interpreters, but the socket is
# already in non-blocking mode in that case.
@@ -674,67 +2233,130 @@ proc http::Connected { token proto phost srvurl} {
fconfigure $state(-querychannel) -blocking 1 -translation binary
set contDone 0
}
- if {[info exists state(-method)] && $state(-method) ne ""} {
+ if {[info exists state(-method)] && ($state(-method) ne "")} {
set how $state(-method)
}
+ set accept_types_seen 0
+
+ Log ^B$tk begin sending request - token $token
if {[catch {
- puts $sock "$how $srvurl HTTP/$state(-protocol)"
- puts $sock "Accept: $http(-accept)"
- array set hdrs $state(-headers)
- if {[info exists hdrs(Host)]} {
+ if {[info exists state(bypass)]} {
+ set state(method) [lindex [split $state(bypass) { }] 0]
+ set state(requestHeaders) {}
+ set state(requestLine) $state(bypass)
+ } else {
+ set state(method) $how
+ set state(requestHeaders) {}
+ set state(requestLine) "$how $srvurl HTTP/$state(-protocol)"
+ }
+ puts $sock $state(requestLine)
+ set hostValue [GetFieldValue $state(-headers) Host]
+ if {$hostValue ne {}} {
# Allow Host spoofing. [Bug 928154]
- puts $sock "Host: $hdrs(Host)"
+ regexp {^[^:]+} $hostValue state(host)
+ SendHeader $token Host $hostValue
} elseif {$port == $defport} {
# Don't add port in this case, to handle broken servers. [Bug
# #504508]
- puts $sock "Host: $host"
+ set state(host) $host
+ SendHeader $token Host $host
} else {
- puts $sock "Host: $host:$port"
- }
- unset hdrs
- puts $sock "User-Agent: $http(-useragent)"
- if {$state(-protocol) == 1.0 && $state(-keepalive)} {
- puts $sock "Connection: keep-alive"
- }
- if {$state(-protocol) > 1.0 && !$state(-keepalive)} {
- puts $sock "Connection: close" ;# RFC2616 sec 8.1.2.1
- }
- if {[info exists phost] && ($phost ne "") && $state(-keepalive)} {
- puts $sock "Proxy-Connection: Keep-Alive"
- }
- set accept_encoding_seen 0
+ set state(host) $host
+ SendHeader $token Host "$host:$port"
+ }
+ SendHeader $token User-Agent $http(-useragent)
+ if {($state(-protocol) > 1.0) && $state(-keepalive)} {
+ # Send this header, because a 1.1 server is not compelled to treat
+ # this as the default.
+ set ConnVal keep-alive
+ } elseif {($state(-protocol) > 1.0)} {
+ # RFC2616 sec 8.1.2.1
+ set ConnVal close
+ } else {
+ # ($state(-protocol) <= 1.0)
+ # RFC7230 A.1
+ # Some server implementations of HTTP/1.0 have a faulty
+ # implementation of RFC 2068 Keep-Alive.
+ # Don't leave this to chance.
+ # For HTTP/1.0 we have already "set state(connection) close"
+ # and "state(-keepalive) 0".
+ set ConnVal close
+ }
+ # Proxy authorisation (cf. mod by Anders Ramdahl to autoproxy by
+ # Pat Thoyts).
+ if {($http(-proxyauth) ne {}) && ($state(proxyUsed) eq {HttpProxy})} {
+ SendHeader $token Proxy-Authorization $http(-proxyauth)
+ }
+ # RFC7230 A.1 - "clients are encouraged not to send the
+ # Proxy-Connection header field in any requests"
+ set accept_encoding_seen 0
set content_type_seen 0
+ set connection_seen 0
foreach {key value} $state(-headers) {
+ set value [string map [list \n "" \r ""] $value]
+ set key [string map {" " -} [string trim $key]]
if {[string equal -nocase $key "host"]} {
continue
}
if {[string equal -nocase $key "accept-encoding"]} {
set accept_encoding_seen 1
}
+ if {[string equal -nocase $key "accept"]} {
+ set accept_types_seen 1
+ }
if {[string equal -nocase $key "content-type"]} {
set content_type_seen 1
}
- set value [string map [list \n "" \r ""] $value]
- set key [string trim $key]
if {[string equal -nocase $key "content-length"]} {
set contDone 1
set state(querylength) $value
}
+ if { [string equal -nocase $key "connection"]
+ && [info exists state(bypass)]
+ } {
+ # Value supplied in -headers overrides $ConnVal.
+ set connection_seen 1
+ } elseif {[string equal -nocase $key "connection"]} {
+ # Remove "close" or "keep-alive" and use our own value.
+ # In an upgrade request, the upgrade is not guaranteed.
+ # Value "close" or "keep-alive" tells the server what to do
+ # if it refuses the upgrade. We send a single "Connection"
+ # header because some websocket servers, e.g. civetweb, reject
+ # multiple headers. Bug [d01de3281f] of tcllib/websocket.
+ set connection_seen 1
+ set listVal $state(connectionValues)
+ if {[set pos [lsearch $listVal close]] != -1} {
+ set listVal [lreplace $listVal $pos $pos]
+ }
+ if {[set pos [lsearch $listVal keep-alive]] != -1} {
+ set listVal [lreplace $listVal $pos $pos]
+ }
+ lappend listVal $ConnVal
+ set value [join $listVal {, }]
+ }
if {[string length $key]} {
- puts $sock "$key: $value"
+ SendHeader $token $key $value
}
}
- # Soft zlib dependency check - no package require
- if {
- !$accept_encoding_seen &&
- ([package vsatisfies [package provide Tcl] 8.6]
- || [llength [package provide zlib]]) &&
- !([info exists state(-channel)] || [info exists state(-handler)])
- } then {
- puts $sock "Accept-Encoding: gzip, identity, *;q=0.1"
- }
- if {$isQueryChannel && $state(querylength) == 0} {
+ # Allow overriding the Accept header on a per-connection basis. Useful
+ # for working with REST services. [Bug c11a51c482]
+ if {!$accept_types_seen} {
+ SendHeader $token Accept $state(accept-types)
+ }
+ if { (!$accept_encoding_seen)
+ && (![info exists state(-handler)])
+ && $http(-zip)
+ } {
+ SendHeader $token Accept-Encoding gzip,deflate
+ } elseif {!$accept_encoding_seen} {
+ SendHeader $token Accept-Encoding identity
+ } else {
+ }
+ if {!$connection_seen} {
+ SendHeader $token Connection $ConnVal
+ }
+ if {$isQueryChannel && ($state(querylength) == 0)} {
# Try to determine size of data in channel. If we cannot seek, the
# surrounding catch will trap us
@@ -745,6 +2367,22 @@ proc http::Connected { token proto phost srvurl} {
seek $state(-querychannel) $start
}
+ # Note that we don't do Cookie2; that's much nastier and not normally
+ # observed in practice either. It also doesn't fix the multitude of
+ # bugs in the basic cookie spec.
+ if {$http(-cookiejar) ne ""} {
+ set cookies ""
+ set separator ""
+ foreach {key value} [{*}$http(-cookiejar) \
+ getCookies $proto $host $state(path)] {
+ append cookies $separator $key = $value
+ set separator "; "
+ }
+ if {$cookies ne ""} {
+ SendHeader $token Cookie $cookies
+ }
+ }
+
# Flush the request header and set up the fileevent that will either
# push the POST data or read the response.
#
@@ -756,48 +2394,782 @@ proc http::Connected { token proto phost srvurl} {
# versions TclHttpd in various error cases). Depending on the
# platform, the client may or may not be able to get the response from
# the server because of the error it will get trying to write the post
- # data. Having both fileevents active changes the timing and the
+ # data. Having both fileevents active changes the timing and the
# behavior, but no two platforms (among Solaris, Linux, and NT) behave
# the same, and none behave all that well in any case. Servers should
# always read their POST data if they expect the client to read their
# response.
if {$isQuery || $isQueryChannel} {
+ # POST method.
if {!$content_type_seen} {
- puts $sock "Content-Type: $state(-type)"
+ SendHeader $token Content-Type $state(-type)
}
if {!$contDone} {
- puts $sock "Content-Length: $state(querylength)"
+ SendHeader $token Content-Length $state(querylength)
}
puts $sock ""
- fconfigure $sock -translation {auto binary}
+ flush $sock
+ # Flush flushes the error in the https case with a bad handshake:
+ # else the socket never becomes writable again, and hangs until
+ # timeout (if any).
+
+ lassign [fconfigure $sock -translation] trRead trWrite
+ fconfigure $sock -translation [list $trRead binary]
fileevent $sock writable [list http::Write $token]
+ # The http::Write command decides when to make the socket readable,
+ # using the same test as the GET/HEAD case below.
} else {
+ # GET or HEAD method.
+ if { (![catch {fileevent $sock readable} binding])
+ && ($binding eq [list http::CheckEof $sock])
+ } {
+ # Remove the "fileevent readable" binding of an idle persistent
+ # socket to http::CheckEof. We can no longer treat bytes
+ # received as junk. The server might still time out and
+ # half-close the socket if it has not yet received the first
+ # "puts".
+ fileevent $sock readable {}
+ }
puts $sock ""
flush $sock
- fileevent $sock readable [list http::Event $sock $token]
+ Log ^C$tk end sending request - token $token
+ # End of writing (GET/HEAD methods). The request has been sent.
+
+ DoneRequest $token
}
- } err]} then {
- # The socket probably was never connected, or the connection dropped
- # later.
+ } err]} {
+ # The socket probably was never connected, OR the connection dropped
+ # later, OR https handshake error, which may be discovered as late as
+ # the "flush" command above...
+ Log "WARNING - if testing, pay special attention to this\
+ case (GI) which is seldom executed - token $token"
+ if {[info exists state(reusing)] && $state(reusing)} {
+ # The socket was closed at the server end, and closed at
+ # this end by http::CheckEof.
+ if {[TestForReplay $token write $err a]} {
+ return
+ } else {
+ Finish $token {failed to re-use socket}
+ }
- # if state(status) is error, it means someone's already called Finish
- # to do the above-described clean up.
- if {$state(status) ne "error"} {
+ # else:
+ # This is NOT a persistent socket that has been closed since its
+ # last use.
+ # If any other requests are in flight or pipelined/queued, they will
+ # be discarded.
+ } elseif {$state(status) eq ""} {
+ # https handshake errors come here, for
+ # Tcl 8.7 without http::SecureProxyConnect, and for Tcl 8.6.
+ set msg [registerError $sock]
+ registerError $sock {}
+ if {$msg eq {}} {
+ set msg {failed to use socket}
+ }
+ Finish $token $msg
+ } elseif {$state(status) ne "error"} {
Finish $token $err
}
}
+ return
+}
+
+# http::registerError
+#
+# Called (for example when processing TclTLS activity) to register
+# an error for a connection on a specific socket. This helps
+# http::Connected to deliver meaningful error messages, e.g. when a TLS
+# certificate fails verification.
+#
+# Usage: http::registerError socket ?newValue?
+#
+# "set" semantics, except that a "get" (a call without a new value) for a
+# non-existent socket returns {}, not an error.
+
+proc http::registerError {sock args} {
+ variable registeredErrors
+
+ if { ([llength $args] == 0)
+ && (![info exists registeredErrors($sock)])
+ } {
+ return
+ } elseif { ([llength $args] == 1)
+ && ([lindex $args 0] eq {})
+ } {
+ unset -nocomplain registeredErrors($sock)
+ return
+ }
+ set registeredErrors($sock) {*}$args
+}
+
+# http::DoneRequest --
+#
+# Command called when a request has been sent. It will arrange the
+# next request and/or response as appropriate.
+#
+# If this command is called when $socketClosing(*), the request $token
+# that calls it must be pipelined and destined to fail.
+
+proc http::DoneRequest {token} {
+ variable http
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+ set sock $state(sock)
+
+ # If pipelined, connect the next HTTP request to the socket.
+ if {$state(reusing) && $state(-pipeline)} {
+ # Enable next token (if any) to write.
+ # The value "Wready" is set only here, and
+ # in http::Event after reading the response-headers of a
+ # non-reusing transaction.
+ # Previous value is $token. It cannot be pending.
+ set socketWrState($state(socketinfo)) Wready
+
+ # Now ready to write the next pipelined request (if any).
+ http::NextPipelinedWrite $token
+ } else {
+ # If pipelined, this is the first transaction on this socket. We wait
+ # for the response headers to discover whether the connection is
+ # persistent. (If this is not done and the connection is not
+ # persistent, we SHOULD retry and then MUST NOT pipeline before knowing
+ # that we have a persistent connection
+ # (rfc2616 8.1.2.2)).
+ }
+
+ # Connect to receive the response, unless the socket is pipelined
+ # and another response is being sent.
+ # This code block is separate from the code below because there are
+ # cases where socketRdState already has the value $token.
+ if { $state(-keepalive)
+ && $state(-pipeline)
+ && [info exists socketRdState($state(socketinfo))]
+ && ($socketRdState($state(socketinfo)) eq "Rready")
+ } {
+ #Log pipelined, GRANT read access to $token in Connected
+ set socketRdState($state(socketinfo)) $token
+ }
+
+ if { $state(-keepalive)
+ && $state(-pipeline)
+ && [info exists socketRdState($state(socketinfo))]
+ && ($socketRdState($state(socketinfo)) ne $token)
+ } {
+ # Do not read from the socket until it is ready.
+ ##Log "HTTP response for token $token is queued for pipelined use"
+ # If $socketClosing(*), then the caller will be a pipelined write and
+ # execution will come here.
+ # This token has already been recorded as "in flight" for writing.
+ # When the socket is closed, the read queue will be cleared in
+ # CloseQueuedQueries and so the "lappend" here has no effect.
+ lappend socketRdQueue($state(socketinfo)) $token
+ } else {
+ # In the pipelined case, connection for reading depends on the
+ # value of socketRdState.
+ # In the nonpipeline case, connection for reading always occurs.
+ ReceiveResponse $token
+ }
+ return
+}
+
+# http::ReceiveResponse
+#
+# Connects token to its socket for reading.
+
+proc http::ReceiveResponse {token} {
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+ set sock $state(sock)
+
+ #Log ---- $state(socketinfo) >> conn to $token for HTTP response
+ lassign [fconfigure $sock -translation] trRead trWrite
+ fconfigure $sock -translation [list auto $trWrite] \
+ -buffersize $state(-blocksize)
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ fconfigure $sock -profile replace
+ }
+ Log ^D$tk begin receiving response - token $token
+ coroutine ${token}--EventCoroutine http::Event $sock $token
+ if {[info exists state(-handler)] || [info exists state(-progress)]} {
+ fileevent $sock readable [list http::EventGateway $sock $token]
+ } else {
+ fileevent $sock readable ${token}--EventCoroutine
+ }
+ return
+}
+
+
+# http::EventGateway
+#
+# Bug [c2dc1da315].
+# - Recursive launch of the coroutine can occur if a -handler or -progress
+# callback is used, and the callback command enters the event loop.
+# - To prevent this, the fileevent "binding" is disabled while the
+# coroutine is in flight.
+# - If a recursive call occurs despite these precautions, it is not
+# trapped and discarded here, because it is better to report it as a
+# bug.
+# - Although this solution is believed to be sufficiently general, it is
+# used only if -handler or -progress is specified. In other cases,
+# the coroutine is called directly.
+
+proc http::EventGateway {sock token} {
+ variable $token
+ upvar 0 $token state
+ fileevent $sock readable {}
+ catch {${token}--EventCoroutine} res opts
+ if {[info commands ${token}--EventCoroutine] ne {}} {
+ # The coroutine can be deleted by completion (a non-yield return), by
+ # http::Finish (when there is a premature end to the transaction), by
+ # http::reset or http::cleanup, or if the caller set option -channel
+ # but not option -handler: in the last case reading from the socket is
+ # now managed by commands ::http::Copy*, http::ReceiveChunked, and
+ # http::MakeTransformationChunked.
+ #
+ # Catch in case the coroutine has closed the socket.
+ catch {fileevent $sock readable [list http::EventGateway $sock $token]}
+ }
+
+ # If there was an error, re-throw it.
+ return -options $opts $res
+}
+
+
+# http::NextPipelinedWrite
+#
+# - Connecting a socket to a token for writing is done by this command and by
+# command KeepSocket.
+# - If another request has a pipelined write scheduled for $token's socket,
+# and if the socket is ready to accept it, connect the write and update
+# the queue accordingly.
+# - This command is called from http::DoneRequest and http::Event,
+# IF $state(-pipeline) AND (the current transfer has reached the point at
+# which the socket is ready for the next request to be written).
+# - This command is called when a token has write access and is pipelined and
+# keep-alive, and sets socketWrState to Wready.
+# - The command need not consider the case where socketWrState is set to a token
+# that does not yet have write access. Such a token is waiting for Rready,
+# and the assignment of the connection to the token will be done elsewhere (in
+# http::KeepSocket).
+# - This command cannot be called after socketWrState has been set to a
+# "pending" token value (that is then overwritten by the caller), because that
+# value is set by this command when it is called by an earlier token when it
+# relinquishes its write access, and the pending token is always the next in
+# line to write.
+
+proc http::NextPipelinedWrite {token} {
+ variable http
+ variable socketRdState
+ variable socketWrState
+ variable socketWrQueue
+ variable socketClosing
+ variable $token
+ upvar 0 $token state
+ set connId $state(socketinfo)
+
+ if { [info exists socketClosing($connId)]
+ && $socketClosing($connId)
+ } {
+ # socketClosing(*) is set because the server has sent a
+ # "Connection: close" header.
+ # Behave as if the queues are empty - so do nothing.
+ } elseif { $state(-pipeline)
+ && [info exists socketWrState($connId)]
+ && ($socketWrState($connId) eq "Wready")
+
+ && [info exists socketWrQueue($connId)]
+ && [llength $socketWrQueue($connId)]
+ && ([set token2 [lindex $socketWrQueue($connId) 0]
+ set ${token2}(-pipeline)
+ ]
+ )
+ } {
+ # - The usual case for a pipelined connection, ready for a new request.
+ #Log pipelined, GRANT write access to $token2 in NextPipelinedWrite
+ set conn [set ${token2}(connArgs)]
+ set socketWrState($connId) $token2
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
+ # Connect does its own fconfigure.
+ fileevent $state(sock) writable [list http::Connect $token2 {*}$conn]
+ #Log ---- $connId << conn to $token2 for HTTP request (b)
+
+ # In the tests below, the next request will be nonpipeline.
+ } elseif { $state(-pipeline)
+ && [info exists socketWrState($connId)]
+ && ($socketWrState($connId) eq "Wready")
+
+ && [info exists socketWrQueue($connId)]
+ && [llength $socketWrQueue($connId)]
+ && (![ set token3 [lindex $socketWrQueue($connId) 0]
+ set ${token3}(-pipeline)
+ ]
+ )
+
+ && [info exists socketRdState($connId)]
+ && ($socketRdState($connId) eq "Rready")
+ } {
+ # The case in which the next request will be non-pipelined, and the read
+ # and write queues is ready: which is the condition for a non-pipelined
+ # write.
+ set conn [set ${token3}(connArgs)]
+ #Log nonpipeline, GRANT r/w access to $token3 in NextPipelinedWrite
+ set socketRdState($connId) $token3
+ set socketWrState($connId) $token3
+ set socketWrQueue($connId) [lrange $socketWrQueue($connId) 1 end]
+ # Connect does its own fconfigure.
+ fileevent $state(sock) writable [list http::Connect $token3 {*}$conn]
+ #Log ---- $state(sock) << conn to $token3 for HTTP request (c)
+
+ } elseif { $state(-pipeline)
+ && [info exists socketWrState($connId)]
+ && ($socketWrState($connId) eq "Wready")
+
+ && [info exists socketWrQueue($connId)]
+ && [llength $socketWrQueue($connId)]
+ && (![set token2 [lindex $socketWrQueue($connId) 0]
+ set ${token2}(-pipeline)
+ ]
+ )
+ } {
+ # - The case in which the next request will be non-pipelined, but the
+ # read queue is NOT ready.
+ # - A read is queued or in progress, but not a write. Cannot start the
+ # nonpipeline transaction, but must set socketWrState to prevent a new
+ # pipelined request (in http::geturl) jumping the queue.
+ # - Because socketWrState($connId) is not set to Wready, the assignment
+ # of the connection to $token2 will be done elsewhere - by command
+ # http::KeepSocket when $socketRdState($connId) is set to "Rready".
+
+ #Log re-use nonpipeline, GRANT delayed write access to $token in NextP..
+ set socketWrState($connId) peNding
+ }
+ return
+}
+
+# http::CancelReadPipeline
+#
+# Cancel pipelined responses on a closing "Keep-Alive" socket.
+#
+# - Called by a variable trace on "unset socketRdState($connId)".
+# - The variable relates to a Keep-Alive socket, which has been closed.
+# - Cancels all pipelined responses. The requests have been sent,
+# the responses have not yet been received.
+# - This is a hard cancel that ends each transaction with error status,
+# and closes the connection. Do not use it if you want to replay failed
+# transactions.
+# - N.B. Always delete ::http::socketRdState($connId) before deleting
+# ::http::socketRdQueue($connId), or this command will do nothing.
+#
+# Arguments
+# As for a trace command on a variable.
+
+proc http::CancelReadPipeline {name1 connId op} {
+ variable socketRdQueue
+ ##Log CancelReadPipeline $name1 $connId $op
+ if {[info exists socketRdQueue($connId)]} {
+ set msg {the connection was closed by CancelReadPipeline}
+ foreach token $socketRdQueue($connId) {
+ set tk [namespace tail $token]
+ Log ^X$tk end of response "($msg)" - token $token
+ set ${token}(status) eof
+ Finish $token ;#$msg
+ }
+ set socketRdQueue($connId) {}
+ }
+ return
+}
+
+# http::CancelWritePipeline
+#
+# Cancel queued events on a closing "Keep-Alive" socket.
+#
+# - Called by a variable trace on "unset socketWrState($connId)".
+# - The variable relates to a Keep-Alive socket, which has been closed.
+# - In pipelined or nonpipeline case: cancels all queued requests. The
+# requests have not yet been sent, the responses are not due.
+# - This is a hard cancel that ends each transaction with error status,
+# and closes the connection. Do not use it if you want to replay failed
+# transactions.
+# - N.B. Always delete ::http::socketWrState($connId) before deleting
+# ::http::socketWrQueue($connId), or this command will do nothing.
+#
+# Arguments
+# As for a trace command on a variable.
+
+proc http::CancelWritePipeline {name1 connId op} {
+ variable socketWrQueue
+
+ ##Log CancelWritePipeline $name1 $connId $op
+ if {[info exists socketWrQueue($connId)]} {
+ set msg {the connection was closed by CancelWritePipeline}
+ foreach token $socketWrQueue($connId) {
+ set tk [namespace tail $token]
+ Log ^X$tk end of response "($msg)" - token $token
+ set ${token}(status) eof
+ Finish $token ;#$msg
+ }
+ set socketWrQueue($connId) {}
+ }
+ return
+}
+
+# http::ReplayIfDead --
+#
+# - A query on a re-used persistent socket failed at the earliest opportunity,
+# because the socket had been closed by the server. Keep the token, tidy up,
+# and try to connect on a fresh socket.
+# - The connection is monitored for eof by the command http::CheckEof. Thus
+# http::ReplayIfDead is needed only when a server event (half-closing an
+# apparently idle connection), and a client event (sending a request) occur at
+# almost the same time, and neither client nor server detects the other's
+# action before performing its own (an "asynchronous close event").
+# - To simplify testing of http::ReplayIfDead, set TEST_EOF 1 in
+# http::KeepSocket, and then http::ReplayIfDead will be called if http::geturl
+# is called at any time after the server timeout.
+#
+# Arguments:
+# token Connection token.
+#
+# Side Effects:
+# Use the same token, but try to open a new socket.
+
+proc http::ReplayIfDead {token doing} {
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ variable $token
+ upvar 0 $token state
+
+ Log running http::ReplayIfDead for $token $doing
+
+ # 1. Merge the tokens for transactions in flight, the read (response) queue,
+ # and the write (request) queue.
+
+ set InFlightR {}
+ set InFlightW {}
+
+ # Obtain the tokens for transactions in flight.
+ if {$state(-pipeline)} {
+ # Two transactions may be in flight. The "read" transaction was first.
+ # It is unlikely that the server would close the socket if a response
+ # was pending; however, an earlier request (as well as the present
+ # request) may have been sent and ignored if the socket was half-closed
+ # by the server.
+
+ if { [info exists socketRdState($state(socketinfo))]
+ && ($socketRdState($state(socketinfo)) ne "Rready")
+ } {
+ lappend InFlightR $socketRdState($state(socketinfo))
+ } elseif {($doing eq "read")} {
+ lappend InFlightR $token
+ }
+
+ if { [info exists socketWrState($state(socketinfo))]
+ && $socketWrState($state(socketinfo)) ni {Wready peNding}
+ } {
+ lappend InFlightW $socketWrState($state(socketinfo))
+ } elseif {($doing eq "write")} {
+ lappend InFlightW $token
+ }
+
+ # Report any inconsistency of $token with socket*state.
+ if { ($doing eq "read")
+ && [info exists socketRdState($state(socketinfo))]
+ && ($token ne $socketRdState($state(socketinfo)))
+ } {
+ Log WARNING - ReplayIfDead pipelined token $token $doing \
+ ne socketRdState($state(socketinfo)) \
+ $socketRdState($state(socketinfo))
+
+ } elseif {
+ ($doing eq "write")
+ && [info exists socketWrState($state(socketinfo))]
+ && ($token ne $socketWrState($state(socketinfo)))
+ } {
+ Log WARNING - ReplayIfDead pipelined token $token $doing \
+ ne socketWrState($state(socketinfo)) \
+ $socketWrState($state(socketinfo))
+ }
+ } else {
+ # One transaction should be in flight.
+ # socketRdState, socketWrQueue are used.
+ # socketRdQueue should be empty.
+
+ # Report any inconsistency of $token with socket*state.
+ if {$token ne $socketRdState($state(socketinfo))} {
+ Log WARNING - ReplayIfDead nonpipeline token $token $doing \
+ ne socketRdState($state(socketinfo)) \
+ $socketRdState($state(socketinfo))
+ }
+
+ # Report the inconsistency that socketRdQueue is non-empty.
+ if { [info exists socketRdQueue($state(socketinfo))]
+ && ($socketRdQueue($state(socketinfo)) ne {})
+ } {
+ Log WARNING - ReplayIfDead nonpipeline token $token $doing \
+ has read queue socketRdQueue($state(socketinfo)) \
+ $socketRdQueue($state(socketinfo)) ne {}
+ }
+
+ lappend InFlightW $socketRdState($state(socketinfo))
+ set socketRdQueue($state(socketinfo)) {}
+ }
+
+ set newQueue {}
+ lappend newQueue {*}$InFlightR
+ lappend newQueue {*}$socketRdQueue($state(socketinfo))
+ lappend newQueue {*}$InFlightW
+ lappend newQueue {*}$socketWrQueue($state(socketinfo))
+
+
+ # 2. Tidy up token. This is a cut-down form of Finish/CloseSocket.
+ # Do not change state(status).
+ # No need to after cancel state(after) - either this is done in
+ # ReplayCore/ReInit, or Finish is called.
+
+ catch {close $state(sock)}
+ Unset $state(socketinfo)
+
+ # 2a. Tidy the tokens in the queues - this is done in ReplayCore/ReInit.
+ # - Transactions, if any, that are awaiting responses cannot be completed.
+ # They are listed for re-sending in newQueue.
+ # - All tokens are preserved for re-use by ReplayCore, and their variables
+ # will be re-initialised by calls to ReInit.
+ # - The relevant element of socketMapping, socketRdState, socketWrState,
+ # socketRdQueue, socketWrQueue, socketClosing, socketPlayCmd will be set
+ # to new values in ReplayCore.
+
+ ReplayCore $newQueue
+ return
+}
+
+# http::ReplayIfClose --
+#
+# A request on a socket that was previously "Connection: keep-alive" has
+# received a "Connection: close" response header. The server supplies
+# that response correctly, but any later requests already queued on this
+# connection will be lost when the socket closes.
+#
+# This command takes arguments that represent the socketWrState,
+# socketRdQueue and socketWrQueue for this connection. The socketRdState
+# is not needed because the server responds in full to the request that
+# received the "Connection: close" response header.
+#
+# Existing request tokens $token (::http::$n) are preserved. The caller
+# will be unaware that the request was processed this way.
+
+proc http::ReplayIfClose {Wstate Rqueue Wqueue} {
+ Log running http::ReplayIfClose for $Wstate $Rqueue $Wqueue
+
+ if {$Wstate in $Rqueue || $Wstate in $Wqueue} {
+ Log WARNING duplicate token in http::ReplayIfClose - token $Wstate
+ set Wstate Wready
+ }
+
+ # 1. Create newQueue
+ set InFlightW {}
+ if {$Wstate ni {Wready peNding}} {
+ lappend InFlightW $Wstate
+ }
+ ##Log $Rqueue -- $InFlightW -- $Wqueue
+ set newQueue {}
+ lappend newQueue {*}$Rqueue
+ lappend newQueue {*}$InFlightW
+ lappend newQueue {*}$Wqueue
+
+ # 2. Cleanup - none needed, done by the caller.
+
+ ReplayCore $newQueue
+ return
+}
+
+# http::ReInit --
+#
+# Command to restore a token's state to a condition that
+# makes it ready to replay a request.
+#
+# Command http::geturl stores extra state in state(tmp*) so
+# we don't need to do the argument processing again.
+#
+# The caller must:
+# - Set state(reusing) and state(sock) to their new values after calling
+# this command.
+# - Unset state(tmpState), state(tmpOpenCmd) if future calls to ReplayCore
+# or ReInit are inappropriate for this token. Typically only one retry
+# is allowed.
+# The caller may also unset state(tmpConnArgs) if this value (and the
+# token) will be used immediately. The value is needed by tokens that
+# will be stored in a queue.
+#
+# Arguments:
+# token Connection token.
+#
+# Return Value: (boolean) true iff the re-initialisation was successful.
+
+proc http::ReInit {token} {
+ variable $token
+ upvar 0 $token state
+
+ if {!(
+ [info exists state(tmpState)]
+ && [info exists state(tmpOpenCmd)]
+ && [info exists state(tmpConnArgs)]
+ )
+ } {
+ Log FAILED in http::ReInit via ReplayCore - NO tmp vars for $token
+ return 0
+ }
+
+ if {[info exists state(after)]} {
+ after cancel $state(after)
+ unset state(after)
+ }
+ if {[info exists state(socketcoro)]} {
+ Log $token Cancel socket after-idle event (ReInit)
+ after cancel $state(socketcoro)
+ unset state(socketcoro)
+ }
+
+ # Don't alter state(status) - this would trigger http::wait if it is in use.
+ set tmpState $state(tmpState)
+ set tmpOpenCmd $state(tmpOpenCmd)
+ set tmpConnArgs $state(tmpConnArgs)
+ foreach name [array names state] {
+ if {$name ne "status"} {
+ unset state($name)
+ }
+ }
+
+ # Don't alter state(status).
+ # Restore state(tmp*) - the caller may decide to unset them.
+ # Restore state(tmpConnArgs) which is needed for connection.
+ # state(tmpState), state(tmpOpenCmd) are needed only for retries.
+
+ dict unset tmpState status
+ array set state $tmpState
+ set state(tmpState) $tmpState
+ set state(tmpOpenCmd) $tmpOpenCmd
+ set state(tmpConnArgs) $tmpConnArgs
+
+ return 1
+}
+
+# http::ReplayCore --
+#
+# Command to replay a list of requests, using existing connection tokens.
+#
+# Abstracted from http::geturl which stores extra state in state(tmp*) so
+# we don't need to do the argument processing again.
+#
+# Arguments:
+# newQueue List of connection tokens.
+#
+# Side Effects:
+# Use existing tokens, but try to open a new socket.
+
+proc http::ReplayCore {newQueue} {
+ variable TmpSockCounter
+
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
+ if {[llength $newQueue] == 0} {
+ # Nothing to do.
+ return
+ }
+
+ ##Log running ReplayCore for {*}$newQueue
+ set newToken [lindex $newQueue 0]
+ set newQueue [lrange $newQueue 1 end]
+
+ # 3. Use newToken, and restore its values of state(*). Do not restore
+ # elements tmp* - we try again only once.
+
+ set token $newToken
+ variable $token
+ upvar 0 $token state
+
+ if {![ReInit $token]} {
+ Log FAILED in http::ReplayCore - NO tmp vars
+ Log ReplayCore reject $token
+ Finish $token {cannot send this request again}
+ return
+ }
+
+ set tmpState $state(tmpState)
+ set tmpOpenCmd $state(tmpOpenCmd)
+ set tmpConnArgs $state(tmpConnArgs)
+ unset state(tmpState)
+ unset state(tmpOpenCmd)
+ unset state(tmpConnArgs)
+
+ set state(reusing) 0
+ set state(ReusingPlaceholder) 0
+ set state(alreadyQueued) 0
+ Log ReplayCore replay $token
+
+ # Give the socket a placeholder name before it is created.
+ set sock HTTP_PLACEHOLDER_[incr TmpSockCounter]
+ set state(sock) $sock
+
+ # Move the $newQueue into the placeholder socket's socketPhQueue.
+ set socketPhQueue($sock) {}
+ foreach tok $newQueue {
+ if {[ReInit $tok]} {
+ set ${tok}(reusing) 1
+ set ${tok}(sock) $sock
+ lappend socketPhQueue($sock) $tok
+ Log ReplayCore replay $tok
+ } else {
+ Log ReplayCore reject $tok
+ set ${tok}(reusing) 1
+ set ${tok}(sock) NONE
+ Finish $tok {cannot send this request again}
+ }
+ }
+
+ AsyncTransaction $token
+
+ return
}
# Data access functions:
# Data - the URL data
-# Status - the transaction status: ok, reset, eof, timeout
+# Status - the transaction status: ok, reset, eof, timeout, error
# Code - the HTTP transaction code, e.g., 200
# Size - the size of the URL data
-proc http::data {token} {
+proc http::responseBody {token} {
variable $token
upvar 0 $token state
return $state(body)
@@ -810,12 +3182,17 @@ proc http::status {token} {
upvar 0 $token state
return $state(status)
}
-proc http::code {token} {
+proc http::responseLine {token} {
variable $token
upvar 0 $token state
return $state(http)
}
-proc http::ncode {token} {
+proc http::requestLine {token} {
+ variable $token
+ upvar 0 $token state
+ return $state(requestLine)
+}
+proc http::responseCode {token} {
variable $token
upvar 0 $token state
if {[regexp {[0-9]{3}} $state(http) numeric_code]} {
@@ -829,10 +3206,134 @@ proc http::size {token} {
upvar 0 $token state
return $state(currentsize)
}
-proc http::meta {token} {
+proc http::requestHeaders {token args} {
+ set lenny [llength $args]
+ if {$lenny > 1} {
+ return -code error {usage: ::http::requestHeaders token ?headerName?}
+ } else {
+ return [Meta $token request {*}$args]
+ }
+}
+proc http::responseHeaders {token args} {
+ set lenny [llength $args]
+ if {$lenny > 1} {
+ return -code error {usage: ::http::responseHeaders token ?headerName?}
+ } else {
+ return [Meta $token response {*}$args]
+ }
+}
+proc http::requestHeaderValue {token header} {
+ Meta $token request $header VALUE
+}
+proc http::responseHeaderValue {token header} {
+ Meta $token response $header VALUE
+}
+proc http::Meta {token who args} {
variable $token
upvar 0 $token state
- return $state(meta)
+
+ if {$who eq {request}} {
+ set whom requestHeaders
+ } elseif {$who eq {response}} {
+ set whom meta
+ } else {
+ return -code error {usage: ::http::Meta token request|response ?headerName ?VALUE??}
+ }
+
+ set header [string tolower [lindex $args 0]]
+ set how [string tolower [lindex $args 1]]
+ set lenny [llength $args]
+ if {$lenny == 0} {
+ return $state($whom)
+ } elseif {($lenny > 2) || (($lenny == 2) && ($how ne {value}))} {
+ return -code error {usage: ::http::Meta token request|response ?headerName ?VALUE??}
+ } else {
+ set result {}
+ set combined {}
+ foreach {key value} $state($whom) {
+ if {$key eq $header} {
+ lappend result $key $value
+ append combined $value {, }
+ }
+ }
+ if {$lenny == 1} {
+ return $result
+ } else {
+ return [string range $combined 0 end-2]
+ }
+ }
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::responseInfo
+# ------------------------------------------------------------------------------
+# Command to return a dictionary of the most useful metadata of a HTTP
+# response.
+#
+# Arguments:
+# token - connection token (name of an array)
+#
+# Return Value: a dict. See man page http(n) for a description of each item.
+# ------------------------------------------------------------------------------
+
+proc http::responseInfo {token} {
+ variable $token
+ upvar 0 $token state
+ set result {}
+ foreach {key origin name} {
+ stage STATE state
+ status STATE status
+ responseCode STATE responseCode
+ reasonPhrase STATE reasonPhrase
+ contentType STATE type
+ binary STATE binary
+ redirection RESP location
+ upgrade STATE upgrade
+ error ERROR -
+ postError STATE posterror
+ method STATE method
+ charset STATE charset
+ compression STATE coding
+ httpRequest STATE -protocol
+ httpResponse STATE httpResponse
+ url STATE url
+ connectionRequest REQ connection
+ connectionResponse RESP connection
+ connectionActual STATE connection
+ transferEncoding STATE transfer
+ totalPost STATE querylength
+ currentPost STATE queryoffset
+ totalSize STATE totalsize
+ currentSize STATE currentsize
+ proxyUsed STATE proxyUsed
+ } {
+ if {$origin eq {STATE}} {
+ if {[info exists state($name)]} {
+ dict set result $key $state($name)
+ } else {
+ # Should never come here
+ dict set result $key {}
+ }
+ } elseif {$origin eq {REQ}} {
+ dict set result $key [requestHeaderValue $token $name]
+ } elseif {$origin eq {RESP}} {
+ dict set result $key [responseHeaderValue $token $name]
+ } elseif {$origin eq {ERROR}} {
+ # Don't flood the dict with data. The command ::http::error is
+ # available.
+ if {[info exists state(error)]} {
+ set msg [lindex $state(error) 0]
+ } else {
+ set msg {}
+ }
+ dict set result $key $msg
+ } else {
+ # Should never come here
+ dict set result $key {}
+ }
+ }
+ return $result
}
proc http::error {token} {
variable $token
@@ -840,7 +3341,15 @@ proc http::error {token} {
if {[info exists state(error)]} {
return $state(error)
}
- return ""
+ return
+}
+proc http::postError {token} {
+ variable $token
+ upvar 0 $token state
+ if {[info exists state(postErrorFull)]} {
+ return $state(postErrorFull)
+ }
+ return
}
# http::cleanup
@@ -851,40 +3360,77 @@ proc http::error {token} {
# token The token returned from http::geturl
#
# Side Effects
-# unsets the state array
+# Unsets the state array.
proc http::cleanup {token} {
variable $token
upvar 0 $token state
+ if {[info commands ${token}--EventCoroutine] ne {}} {
+ rename ${token}--EventCoroutine {}
+ }
+ if {[info commands ${token}--SocketCoroutine] ne {}} {
+ rename ${token}--SocketCoroutine {}
+ }
+ if {[info exists state(after)]} {
+ after cancel $state(after)
+ unset state(after)
+ }
+ if {[info exists state(socketcoro)]} {
+ Log $token Cancel socket after-idle event (cleanup)
+ after cancel $state(socketcoro)
+ unset state(socketcoro)
+ }
if {[info exists state]} {
unset state
}
+ return
}
# http::Connect
#
-# This callback is made when an asyncronous connection completes.
+# This callback is made when an asynchronous connection completes.
#
# Arguments
# token The token returned from http::geturl
#
# Side Effects
# Sets the status of the connection, which unblocks
-# the waiting geturl call
+# the waiting geturl call
proc http::Connect {token proto phost srvurl} {
variable $token
upvar 0 $token state
- set err "due to unexpected EOF"
- if {
- [eof $state(sock)] ||
- [set err [fconfigure $state(sock) -error]] ne ""
- } then {
- Finish $token "connect failed $err"
+ set tk [namespace tail $token]
+
+ if {[catch {eof $state(sock)} tmp] || $tmp} {
+ set err "due to unexpected EOF"
+ } elseif {[set err [fconfigure $state(sock) -error]] ne ""} {
+ # set err is done in test
} else {
+ # All OK
+ set state(state) connecting
fileevent $state(sock) writable {}
::http::Connected $token $proto $phost $srvurl
+ return
}
+
+ # Error cases.
+ Log "WARNING - if testing, pay special attention to this\
+ case (GJ) which is seldom executed - token $token"
+ if {[info exists state(reusing)] && $state(reusing)} {
+ # The socket was closed at the server end, and closed at
+ # this end by http::CheckEof.
+ if {[TestForReplay $token write $err b]} {
+ return
+ }
+
+ # else:
+ # This is NOT a persistent socket that has been closed since its
+ # last use.
+ # If any other requests are in flight or pipelined/queued, they will
+ # be discarded.
+ }
+ Finish $token "connect failed: $err"
return
}
@@ -899,8 +3445,21 @@ proc http::Connect {token proto phost srvurl} {
# Write the socket and handle callbacks.
proc http::Write {token} {
+ variable http
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
variable $token
upvar 0 $token state
+ set tk [namespace tail $token]
set sock $state(sock)
# Output a block. Tcl will buffer this if the socket blocks
@@ -911,7 +3470,21 @@ proc http::Write {token} {
if {[info exists state(-query)]} {
# Chop up large query strings so queryprogress callback can give
# smooth feedback.
-
+ if { $state(queryoffset) + $state(-queryblocksize)
+ >= $state(querylength)
+ } {
+ # This will be the last puts for the request-body.
+ if { (![catch {fileevent $sock readable} binding])
+ && ($binding eq [list http::CheckEof $sock])
+ } {
+ # Remove the "fileevent readable" binding of an idle
+ # persistent socket to http::CheckEof. We can no longer
+ # treat bytes received as junk. The server might still time
+ # out and half-close the socket if it has not yet received
+ # the first "puts".
+ fileevent $sock readable {}
+ }
+ }
puts -nonewline $sock \
[string range $state(-query) $state(queryoffset) \
[expr {$state(queryoffset) + $state(-queryblocksize) - 1}]]
@@ -924,36 +3497,58 @@ proc http::Write {token} {
# Copy blocks from the query channel
set outStr [read $state(-querychannel) $state(-queryblocksize)]
+ if {[eof $state(-querychannel)]} {
+ # This will be the last puts for the request-body.
+ if { (![catch {fileevent $sock readable} binding])
+ && ($binding eq [list http::CheckEof $sock])
+ } {
+ # Remove the "fileevent readable" binding of an idle
+ # persistent socket to http::CheckEof. We can no longer
+ # treat bytes received as junk. The server might still time
+ # out and half-close the socket if it has not yet received
+ # the first "puts".
+ fileevent $sock readable {}
+ }
+ }
puts -nonewline $sock $outStr
incr state(queryoffset) [string length $outStr]
if {[eof $state(-querychannel)]} {
set done 1
}
}
- } err]} then {
+ } err opts]} {
# Do not call Finish here, but instead let the read half of the socket
# process whatever server reply there is to get.
-
set state(posterror) $err
+ set info [dict get $opts -errorinfo]
+ set code [dict get $opts -code]
+ set state(postErrorFull) [list $err $info $code]
set done 1
}
+
if {$done} {
catch {flush $sock}
fileevent $sock writable {}
- fileevent $sock readable [list http::Event $sock $token]
+ Log ^C$tk end sending request - token $token
+ # End of writing (POST method). The request has been sent.
+
+ DoneRequest $token
}
# Callback to the client after we've completely handled everything.
if {[string length $state(-queryprogress)]} {
- eval $state(-queryprogress) \
+ namespace eval :: $state(-queryprogress) \
[list $token $state(querylength) $state(queryoffset)]
}
+ return
}
# http::Event
#
-# Handle input on the socket
+# Handle input on the socket. This command is the core of
+# the coroutine commands ${token}--EventCoroutine that are
+# bound to "fileevent $sock readable" and process input.
#
# Arguments
# sock The socket receiving input.
@@ -963,201 +3558,673 @@ proc http::Write {token} {
# Read the socket and handle callbacks.
proc http::Event {sock token} {
+ variable http
+ variable socketMapping
+ variable socketRdState
+ variable socketWrState
+ variable socketRdQueue
+ variable socketWrQueue
+ variable socketPhQueue
+ variable socketClosing
+ variable socketPlayCmd
+ variable socketCoEvent
+ variable socketProxyId
+
variable $token
upvar 0 $token state
+ set tk [namespace tail $token]
+ while 1 {
+ yield
+ ##Log Event call - token $token
- if {![info exists state]} {
- Log "Event $sock with invalid token '$token' - remote close?"
- if {![eof $sock]} {
- if {[set d [read $sock]] ne ""} {
- Log "WARNING: additional data left on closed socket"
+ if {![info exists state]} {
+ Log "Event $sock with invalid token '$token' - remote close?"
+ if {!([catch {eof $sock} tmp] || $tmp)} {
+ if {[set d [read $sock]] ne ""} {
+ Log "WARNING: additional data left on closed socket\
+ - token $token"
+ } else {
+ }
+ } else {
}
+ Log ^X$tk end of response (token error) - token $token
+ CloseSocket $sock
+ return
+ } else {
}
- CloseSocket $sock
- return
- }
- if {$state(state) eq "connecting"} {
- if {[catch {gets $sock state(http)} n]} {
- return [Finish $token $n]
- } elseif {$n >= 0} {
- set state(state) "header"
- }
- } elseif {$state(state) eq "header"} {
- if {[catch {gets $sock line} n]} {
- return [Finish $token $n]
- } elseif {$n == 0} {
- # We have now read all headers
- # We ignore HTTP/1.1 100 Continue returns. RFC2616 sec 8.2.3
- if {$state(http) == "" || ([regexp {^\S+\s(\d+)} $state(http) {} x] && $x == 100)} {
- return
+ if {$state(state) eq "connecting"} {
+ ##Log - connecting - token $token
+ if { $state(reusing)
+ && $state(-pipeline)
+ && ($state(-timeout) > 0)
+ && (![info exists state(after)])
+ } {
+ set state(after) [after $state(-timeout) \
+ [list http::reset $token timeout]]
+ } else {
}
- set state(state) body
+ if {[catch {gets $sock state(http)} nsl]} {
+ Log "WARNING - if testing, pay special attention to this\
+ case (GK) which is seldom executed - token $token"
+ if {[info exists state(reusing)] && $state(reusing)} {
+ # The socket was closed at the server end, and closed at
+ # this end by http::CheckEof.
- # If doing a HEAD, then we won't get any body
- if {$state(-validate)} {
- Eof $token
- return
- }
+ if {[TestForReplay $token read $nsl c]} {
+ return
+ } else {
+ }
+ # else:
+ # This is NOT a persistent socket that has been closed since
+ # its last use.
+ # If any other requests are in flight or pipelined/queued,
+ # they will be discarded.
+ } else {
+ # https handshake errors come here, for
+ # Tcl 8.7 with http::SecureProxyConnect.
+ set msg [registerError $sock]
+ registerError $sock {}
+ if {$msg eq {}} {
+ set msg $nsl
+ }
+ Log ^X$tk end of response (error) - token $token
+ Finish $token $msg
+ return
+ }
+ } elseif {$nsl >= 0} {
+ ##Log - connecting 1 - token $token
+ set state(state) "header"
+ } elseif { ([catch {eof $sock} tmp] || $tmp)
+ && [info exists state(reusing)]
+ && $state(reusing)
+ } {
+ # The socket was closed at the server end, and we didn't notice.
+ # This is the first read - where the closure is usually first
+ # detected.
- # For non-chunked transfer we may have no body - in this case we
- # may get no further file event if the connection doesn't close
- # and no more data is sent. We can tell and must finish up now -
- # not later.
- if {
- !(([info exists state(connection)]
- && ($state(connection) eq "close"))
- || [info exists state(transfer)])
- && ($state(totalsize) == 0)
- } then {
- Log "body size is 0 and no events likely - complete."
- Eof $token
- return
+ if {[TestForReplay $token read {} d]} {
+ return
+ } else {
+ }
+
+ # else:
+ # This is NOT a persistent socket that has been closed since its
+ # last use.
+ # If any other requests are in flight or pipelined/queued, they
+ # will be discarded.
+ } else {
}
+ } elseif {$state(state) eq "header"} {
+ if {[catch {gets $sock line} nhl]} {
+ ##Log header failed - token $token
+ Log ^X$tk end of response (error) - token $token
+ Finish $token $nhl
+ return
+ } elseif {$nhl == 0} {
+ ##Log header done - token $token
+ Log ^E$tk end of response headers - token $token
+ # We have now read all headers
+ # We ignore HTTP/1.1 100 Continue returns. RFC2616 sec 8.2.3
+ if { ($state(http) == "")
+ || ([regexp {^\S+\s(\d+)} $state(http) {} x] && $x == 100)
+ } {
+ set state(state) "connecting"
+ continue
+ # This was a "return" in the pre-coroutine code.
+ } else {
+ }
- # We have to use binary translation to count bytes properly.
- fconfigure $sock -translation binary
+ # We have $state(http) so let's split it into its components.
+ if {[regexp {^HTTP/(\S+) ([0-9]{3}) (.*)$} $state(http) \
+ -> httpResponse responseCode reasonPhrase]
+ } {
+ set state(httpResponse) $httpResponse
+ set state(responseCode) $responseCode
+ set state(reasonPhrase) $reasonPhrase
+ } else {
+ set state(httpResponse) $state(http)
+ set state(responseCode) $state(http)
+ set state(reasonPhrase) $state(http)
+ }
- if {
- $state(-binary) || [IsBinaryContentType $state(type)]
- } then {
- # Turn off conversions for non-text data
- set state(binary) 1
- }
- if {
- $state(binary) || [string match *gzip* $state(coding)] ||
- [string match *compress* $state(coding)]
- } then {
- if {[info exists state(-channel)]} {
- fconfigure $state(-channel) -translation binary
+ if { ([info exists state(connection)])
+ && ([info exists socketMapping($state(socketinfo))])
+ && ("keep-alive" in $state(connection))
+ && ($state(-keepalive))
+ && (!$state(reusing))
+ && ($state(-pipeline))
+ } {
+ # Response headers received for first request on a
+ # persistent socket. Now ready for pipelined writes (if
+ # any).
+ # Previous value is $token. It cannot be "pending".
+ set socketWrState($state(socketinfo)) Wready
+ http::NextPipelinedWrite $token
+ } else {
}
- }
- if {
- [info exists state(-channel)] &&
- ![info exists state(-handler)]
- } then {
- # Initiate a sequence of background fcopies
- fileevent $sock readable {}
- CopyStart $sock $token
- return
- }
- } elseif {$n > 0} {
- # Process header lines
- if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} {
- switch -- [string tolower $key] {
- content-type {
- set state(type) [string trim [string tolower $value]]
- # grab the optional charset information
- if {[regexp -nocase \
- {charset\s*=\s*\"((?:[^""]|\\\")*)\"} \
- $state(type) -> cs]} {
- set state(charset) [string map {{\"} \"} $cs]
+
+ # Once a "close" has been signaled, the client MUST NOT send any
+ # more requests on that connection.
+ #
+ # If either the client or the server sends the "close" token in
+ # the Connection header, that request becomes the last one for
+ # the connection.
+
+ if { ([info exists state(connection)])
+ && ([info exists socketMapping($state(socketinfo))])
+ && ("close" in $state(connection))
+ && ($state(-keepalive))
+ } {
+ # The server warns that it will close the socket after this
+ # response.
+ ##Log WARNING - socket will close after response for $token
+ # Prepare data for a call to ReplayIfClose.
+ Log $token socket will close after this transaction
+ # 1. Cancel socket-assignment coro events that have not yet
+ # launched, and add the tokens to the write queue.
+ if {[info exists socketCoEvent($state(socketinfo))]} {
+ foreach {tok can} $socketCoEvent($state(socketinfo)) {
+ lappend socketWrQueue($state(socketinfo)) $tok
+ unset -nocomplain ${tok}(socketcoro)
+ after cancel $can
+ Log $tok Cancel socket after-idle event (Event)
+ Log Move $tok from socketCoEvent to socketWrQueue and cancel its after idle coro
+ }
+ set socketCoEvent($state(socketinfo)) {}
+ } else {
+ }
+
+ if { ($socketRdQueue($state(socketinfo)) ne {})
+ || ($socketWrQueue($state(socketinfo)) ne {})
+ || ($socketWrState($state(socketinfo)) ni
+ [list Wready peNding $token])
+ } {
+ set InFlightW $socketWrState($state(socketinfo))
+ if {$InFlightW in [list Wready peNding $token]} {
+ set InFlightW Wready
} else {
- regexp -nocase {charset\s*=\s*(\S+?);?} \
- $state(type) -> state(charset)
+ set msg "token ${InFlightW} is InFlightW"
+ ##Log $msg - token $token
}
+ set socketPlayCmd($state(socketinfo)) \
+ [list ReplayIfClose $InFlightW \
+ $socketRdQueue($state(socketinfo)) \
+ $socketWrQueue($state(socketinfo))]
+
+ # - All tokens are preserved for re-use by ReplayCore.
+ # - Queues are preserved in case of Finish with error,
+ # but are not used for anything else because
+ # socketClosing(*) is set below.
+ # - Cancel the state(after) timeout events.
+ foreach tokenVal $socketRdQueue($state(socketinfo)) {
+ if {[info exists ${tokenVal}(after)]} {
+ after cancel [set ${tokenVal}(after)]
+ unset ${tokenVal}(after)
+ } else {
+ }
+ # Tokens in the read queue have no (socketcoro) to
+ # cancel.
+ }
+ } else {
+ set socketPlayCmd($state(socketinfo)) \
+ {ReplayIfClose Wready {} {}}
+ }
+
+ # Do not allow further connections on this socket (but
+ # geturl can add new requests to the replay).
+ set socketClosing($state(socketinfo)) 1
+ } else {
+ }
+
+ set state(state) body
+
+ # According to
+ # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection
+ # any comma-separated "Connection:" list implies keep-alive, but I
+ # don't see this in the RFC so we'll play safe and
+ # scan any list for "close".
+ # Done here to support combining duplicate header field's values.
+ if { [info exists state(connection)]
+ && ("close" ni $state(connection))
+ && ("keep-alive" ni $state(connection))
+ } {
+ lappend state(connection) "keep-alive"
+ } else {
+ }
+
+ # If doing a HEAD, then we won't get any body
+ if {$state(-validate)} {
+ Log ^F$tk end of response for HEAD request - token $token
+ set state(state) complete
+ Eot $token
+ return
+ } elseif {
+ ($state(method) eq {CONNECT})
+ && [string is integer -strict $state(responseCode)]
+ && ($state(responseCode) >= 200)
+ && ($state(responseCode) < 300)
+ } {
+ # A successful CONNECT response has no body.
+ # (An unsuccessful CONNECT has headers and body.)
+ # The code below is abstracted from Eot/Finish, but
+ # keeps the socket open.
+ catch {fileevent $state(sock) readable {}}
+ catch {fileevent $state(sock) writable {}}
+ set state(state) complete
+ set state(status) ok
+ if {[info commands ${token}--EventCoroutine] ne {}} {
+ rename ${token}--EventCoroutine {}
}
- content-length {
- set state(totalsize) [string trim $value]
+ if {[info commands ${token}--SocketCoroutine] ne {}} {
+ rename ${token}--SocketCoroutine {}
}
- content-encoding {
- set state(coding) [string trim $value]
+ if {[info exists state(socketcoro)]} {
+ Log $token Cancel socket after-idle event (Finish)
+ after cancel $state(socketcoro)
+ unset state(socketcoro)
}
- transfer-encoding {
- set state(transfer) \
- [string trim [string tolower $value]]
+ if {[info exists state(after)]} {
+ after cancel $state(after)
+ unset state(after)
}
- proxy-connection -
- connection {
- set state(connection) \
- [string trim [string tolower $value]]
+ if { [info exists state(-command)]
+ && (![info exists state(done-command-cb)])
+ } {
+ set state(done-command-cb) yes
+ if {[catch {namespace eval :: $state(-command) $token} err]} {
+ set state(error) [list $err $errorInfo $errorCode]
+ set state(status) error
+ }
}
+ return
+ } else {
}
- lappend state(meta) $key [string trim $value]
- }
- }
- } else {
- # Now reading body
- if {[catch {
- if {[info exists state(-handler)]} {
- set n [eval $state(-handler) [list $sock $token]]
- } elseif {[info exists state(transfer_final)]} {
- set line [getTextLine $sock]
- set n [string length $line]
- if {$n > 0} {
- Log "found $n bytes following final chunk"
- append state(transfer_final) $line
+
+ # - For non-chunked transfer we may have no body - in this case
+ # we may get no further file event if the connection doesn't
+ # close and no more data is sent. We can tell and must finish
+ # up now - not later - the alternative would be to wait until
+ # the server times out.
+ # - In this case, the server has NOT told the client it will
+ # close the connection, AND it has NOT indicated the resource
+ # length EITHER by setting the Content-Length (totalsize) OR
+ # by using chunked Transfer-Encoding.
+ # - Do not worry here about the case (Connection: close) because
+ # the server should close the connection.
+ # - IF (NOT Connection: close) AND (NOT chunked encoding) AND
+ # (totalsize == 0).
+
+ if { (!( [info exists state(connection)]
+ && ("close" in $state(connection))
+ )
+ )
+ && ($state(transfer) eq {})
+ && ($state(totalsize) == 0)
+ } {
+ set msg {body size is 0 and no events likely - complete}
+ Log "$msg - token $token"
+ set msg {(length unknown, set to 0)}
+ Log ^F$tk end of response body {*}$msg - token $token
+ set state(state) complete
+ Eot $token
+ return
} else {
- Log "final chunk part"
- Eof $token
}
- } elseif {
- [info exists state(transfer)]
- && $state(transfer) eq "chunked"
- } then {
- set size 0
- set chunk [getTextLine $sock]
- set n [string length $chunk]
- if {[string trim $chunk] ne ""} {
- scan $chunk %x size
- if {$size != 0} {
- set bl [fconfigure $sock -blocking]
- fconfigure $sock -blocking 1
- set chunk [read $sock $size]
- fconfigure $sock -blocking $bl
- set n [string length $chunk]
- if {$n >= 0} {
- append state(body) $chunk
+
+ # We have to use binary translation to count bytes properly.
+ lassign [fconfigure $sock -translation] trRead trWrite
+ fconfigure $sock -translation [list binary $trWrite]
+
+ if {
+ $state(-binary) || [IsBinaryContentType $state(type)]
+ } {
+ # Turn off conversions for non-text data.
+ set state(binary) 1
+ } else {
+ }
+ if {[info exists state(-channel)]} {
+ if {$state(binary) || [llength [ContentEncoding $token]]} {
+ fconfigure $state(-channel) -translation binary
+ } else {
+ }
+ if {![info exists state(-handler)]} {
+ # Initiate a sequence of background fcopies.
+ fileevent $sock readable {}
+ rename ${token}--EventCoroutine {}
+ CopyStart $sock $token
+ return
+ } else {
+ }
+ } else {
+ }
+ } elseif {$nhl > 0} {
+ # Process header lines.
+ ##Log header - token $token - $line
+ if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} {
+ set key [string tolower $key]
+ switch -- $key {
+ content-type {
+ set state(type) [string trim [string tolower $value]]
+ # Grab the optional charset information.
+ if {[regexp -nocase \
+ {charset\s*=\s*\"((?:[^""]|\\\")*)\"} \
+ $state(type) -> cs]} {
+ set state(charset) [string map {{\"} \"} $cs]
+ } else {
+ regexp -nocase {charset\s*=\s*(\S+?);?} \
+ $state(type) -> state(charset)
+ }
}
- if {$size != [string length $chunk]} {
- Log "WARNING: mis-sized chunk:\
- was [string length $chunk], should be $size"
+ content-length {
+ set state(totalsize) [string trim $value]
}
- getTextLine $sock
+ content-encoding {
+ set state(coding) [string trim $value]
+ }
+ transfer-encoding {
+ set state(transfer) \
+ [string trim [string tolower $value]]
+ }
+ proxy-connection -
+ connection {
+ # RFC 7230 Section 6.1 states that a comma-separated
+ # list is an acceptable value.
+ if {![info exists state(connectionRespFlag)]} {
+ # This is the first "Connection" response header.
+ # Scrub the earlier value set by iniitialisation.
+ set state(connectionRespFlag) {}
+ set state(connection) {}
+ }
+ foreach el [SplitCommaSeparatedFieldValue $value] {
+ lappend state(connection) [string tolower $el]
+ }
+ }
+ upgrade {
+ set state(upgrade) [string trim $value]
+ }
+ set-cookie {
+ if {$http(-cookiejar) ne ""} {
+ ParseCookie $token [string trim $value]
+ } else {
+ }
+ }
+ }
+ lappend state(meta) $key [string trim $value]
+ } else {
+ }
+ } else {
+ }
+ } else {
+ # Now reading body
+ ##Log body - token $token
+ if {[catch {
+ if {[info exists state(-handler)]} {
+ set n [namespace eval :: $state(-handler) [list $sock $token]]
+ ##Log handler $n - token $token
+ # N.B. the protocol has been set to 1.0 because the -handler
+ # logic is not expected to handle chunked encoding.
+ # FIXME Allow -handler with 1.1 on dechunked stacked chan.
+ if {$state(totalsize) == 0} {
+ # We know the transfer is complete only when the server
+ # closes the connection - i.e. eof is not an error.
+ set state(state) complete
+ } else {
+ }
+ if {![string is integer -strict $n]} {
+ if 1 {
+ # Do not tolerate bad -handler - fail with error
+ # status.
+ set msg {the -handler command for http::geturl must\
+ return an integer (the number of bytes\
+ read)}
+ Log ^X$tk end of response (handler error) -\
+ token $token
+ Eot $token $msg
+ } else {
+ # Tolerate the bad -handler, and continue. The
+ # penalty:
+ # (a) Because the handler returns nonsense, we know
+ # the transfer is complete only when the server
+ # closes the connection - i.e. eof is not an
+ # error.
+ # (b) http::size will not be accurate.
+ # (c) The transaction is already downgraded to 1.0
+ # to avoid chunked transfer encoding. It MUST
+ # also be forced to "Connection: close" or the
+ # HTTP/1.0 equivalent; or it MUST fail (as
+ # above) if the server sends
+ # "Connection: keep-alive" or the HTTP/1.0
+ # equivalent.
+ set n 0
+ set state(state) complete
+ }
+ } else {
+ }
+ } elseif {[info exists state(transfer_final)]} {
+ # This code forgives EOF in place of the final CRLF.
+ set line [GetTextLine $sock]
+ set n [string length $line]
+ set state(state) complete
+ if {$n > 0} {
+ # - HTTP trailers (late response headers) are permitted
+ # by Chunked Transfer-Encoding, and can be safely
+ # ignored.
+ # - Do not count these bytes in the total received for
+ # the response body.
+ Log "trailer of $n bytes after final chunk -\
+ token $token"
+ append state(transfer_final) $line
+ set n 0
+ } else {
+ Log ^F$tk end of response body (chunked) - token $token
+ Log "final chunk part - token $token"
+ Eot $token
+ }
+ } elseif { [info exists state(transfer)]
+ && ($state(transfer) eq "chunked")
+ } {
+ ##Log chunked - token $token
+ set size 0
+ set hexLenChunk [GetTextLine $sock]
+ #set ntl [string length $hexLenChunk]
+ if {[string trim $hexLenChunk] ne ""} {
+ scan $hexLenChunk %x size
+ if {$size != 0} {
+ ##Log chunk-measure $size - token $token
+ set chunk [BlockingRead $sock $size]
+ set n [string length $chunk]
+ if {$n >= 0} {
+ append state(body) $chunk
+ incr state(log_size) [string length $chunk]
+ ##Log chunk $n cumul $state(log_size) -\
+ token $token
+ } else {
+ }
+ if {$size != [string length $chunk]} {
+ Log "WARNING: mis-sized chunk:\
+ was [string length $chunk], should be\
+ $size - token $token"
+ set n 0
+ set state(connection) close
+ Log ^X$tk end of response (chunk error) \
+ - token $token
+ set msg {error in chunked encoding - fetch\
+ terminated}
+ Eot $token $msg
+ } else {
+ }
+ # CRLF that follows chunk.
+ # If eof, this is handled at the end of this proc.
+ GetTextLine $sock
+ } else {
+ set n 0
+ set state(transfer_final) {}
+ }
+ } else {
+ # Line expected to hold chunk length is empty, or eof.
+ ##Log bad-chunk-measure - token $token
+ set n 0
+ set state(connection) close
+ Log ^X$tk end of response (chunk error) - token $token
+ Eot $token {error in chunked encoding -\
+ fetch terminated}
+ }
+ } else {
+ ##Log unchunked - token $token
+ if {$state(totalsize) == 0} {
+ # We know the transfer is complete only when the server
+ # closes the connection.
+ set state(state) complete
+ set reqSize $state(-blocksize)
+ } else {
+ # Ask for the whole of the unserved response-body.
+ # This works around a problem with a tls::socket - for
+ # https in keep-alive mode, and a request for
+ # $state(-blocksize) bytes, the last part of the
+ # resource does not get read until the server times out.
+ set reqSize [expr { $state(totalsize)
+ - $state(currentsize)}]
+
+ # The workaround fails if reqSize is
+ # capped at $state(-blocksize).
+ # set reqSize [expr {min($reqSize, $state(-blocksize))}]
+ }
+ set c $state(currentsize)
+ set t $state(totalsize)
+ ##Log non-chunk currentsize $c of totalsize $t -\
+ token $token
+ set block [read $sock $reqSize]
+ set n [string length $block]
+ if {$n >= 0} {
+ append state(body) $block
+ ##Log non-chunk [string length $state(body)] -\
+ token $token
} else {
- set state(transfer_final) {}
}
}
+ # This calculation uses n from the -handler, chunked, or
+ # unchunked case as appropriate.
+ if {[info exists state]} {
+ if {$n >= 0} {
+ incr state(currentsize) $n
+ set c $state(currentsize)
+ set t $state(totalsize)
+ ##Log another $n currentsize $c totalsize $t -\
+ token $token
+ } else {
+ }
+ # If Content-Length - check for end of data.
+ if {
+ ($state(totalsize) > 0)
+ && ($state(currentsize) >= $state(totalsize))
+ } {
+ Log ^F$tk end of response body (unchunked) -\
+ token $token
+ set state(state) complete
+ Eot $token
+ } else {
+ }
+ } else {
+ }
+ } err]} {
+ Log ^X$tk end of response (error ${err}) - token $token
+ Finish $token $err
+ return
} else {
- #Log "read non-chunk $state(currentsize) of $state(totalsize)"
- set block [read $sock $state(-blocksize)]
- set n [string length $block]
- if {$n >= 0} {
- append state(body) $block
+ if {[info exists state(-progress)]} {
+ namespace eval :: $state(-progress) \
+ [list $token $state(totalsize) $state(currentsize)]
+ } else {
}
}
- if {[info exists state]} {
- if {$n >= 0} {
- incr state(currentsize) $n
- }
- # If Content-Length - check for end of data.
- if {
- ($state(totalsize) > 0)
- && ($state(currentsize) >= $state(totalsize))
- } then {
- Eof $token
+ }
+
+ # catch as an Eot above may have closed the socket already
+ # $state(state) may be connecting, header, body, or complete
+ if {(![catch {eof $sock} eof]) && $eof} {
+ # [eof sock] succeeded and the result was 1
+ ##Log eof - token $token
+ if {[info exists $token]} {
+ set state(connection) close
+ if {$state(state) eq "complete"} {
+ # This includes all cases in which the transaction
+ # can be completed by eof.
+ # The value "complete" is set only in http::Event, and it is
+ # used only in the test above.
+ Log ^F$tk end of response body (unchunked, eof) -\
+ token $token
+ Eot $token
+ } else {
+ # Premature eof.
+ Log ^X$tk end of response (unexpected eof) - token $token
+ Eot $token eof
}
+ } else {
+ # open connection closed on a token that has been cleaned up.
+ Log ^X$tk end of response (token error) - token $token
+ CloseSocket $sock
}
- } err]} then {
- return [Finish $token $err]
} else {
- if {[info exists state(-progress)]} {
- eval $state(-progress) \
- [list $token $state(totalsize) $state(currentsize)]
- }
+ # EITHER [eof sock] failed - presumed done by Eot
+ # OR [eof sock] succeeded and the result was 0
}
}
+ return
+}
- # catch as an Eof above may have closed the socket already
- if {![catch {eof $sock} eof] && $eof} {
- if {[info exists $token]} {
- set state(connection) close
- Eof $token
- } else {
- # open connection closed on a token that has been cleaned up.
- CloseSocket $sock
- }
- return
+# http::TestForReplay
+#
+# Command called if eof is discovered when a socket is first used for a
+# new transaction. Typically this occurs if a persistent socket is used
+# after a period of idleness and the server has half-closed the socket.
+#
+# token - the connection token returned by http::geturl
+# doing - "read" or "write"
+# err - error message, if any
+# caller - code to identify the caller - used only in logging
+#
+# Return Value: boolean, true iff the command calls http::ReplayIfDead.
+
+proc http::TestForReplay {token doing err caller} {
+ variable http
+ variable $token
+ upvar 0 $token state
+ set tk [namespace tail $token]
+ if {$doing eq "read"} {
+ set code Q
+ set action response
+ set ing reading
+ } else {
+ set code P
+ set action request
+ set ing writing
+ }
+
+ if {$err eq {}} {
+ set err "detect eof when $ing (server timed out?)"
+ }
+
+ if {$state(method) eq "POST" && !$http(-repost)} {
+ # No Replay.
+ # The present transaction will end when Finish is called.
+ # That call to Finish will abort any other transactions
+ # currently in the write queue.
+ # For calls from http::Event this occurs when execution
+ # reaches the code block at the end of that proc.
+ set msg {no retry for POST with http::config -repost 0}
+ Log reusing socket failed "($caller)" - $msg - token $token
+ Log error - $err - token $token
+ Log ^X$tk end of $action (error) - token $token
+ return 0
+ } else {
+ # Replay.
+ set msg {try a new socket}
+ Log reusing socket failed "($caller)" - $msg - token $token
+ Log error - $err - token $token
+ Log ^$code$tk Any unfinished (incl this one) failed - token $token
+ ReplayIfDead $token $doing
+ return 1
}
}
@@ -1193,9 +4260,90 @@ proc http::IsBinaryContentType {type} {
return true
}
-# http::getTextLine --
+proc http::ParseCookie {token value} {
+ variable http
+ variable CookieRE
+ variable $token
+ upvar 0 $token state
+
+ if {![regexp $CookieRE $value -> cookiename cookieval opts]} {
+ # Bad cookie! No biscuit!
+ return
+ }
+
+ # Convert the options into a list before feeding into the cookie store;
+ # ugly, but quite easy.
+ set realopts {hostonly 1 path / secure 0 httponly 0}
+ dict set realopts origin $state(host)
+ dict set realopts domain $state(host)
+ foreach option [split [regsub -all {;\s+} $opts \u0000] \u0000] {
+ regexp {^(.*?)(?:=(.*))?$} $option -> optname optval
+ switch -exact -- [string tolower $optname] {
+ expires {
+ if {[catch {
+ #Sun, 06 Nov 1994 08:49:37 GMT
+ dict set realopts expires \
+ [clock scan $optval -format "%a, %d %b %Y %T %Z"]
+ }] && [catch {
+ # Google does this one
+ #Mon, 01-Jan-1990 00:00:00 GMT
+ dict set realopts expires \
+ [clock scan $optval -format "%a, %d-%b-%Y %T %Z"]
+ }] && [catch {
+ # This is in the RFC, but it is also in the original
+ # Netscape cookie spec, now online at:
+ # <URL:http://curl.haxx.se/rfc/cookie_spec.html>
+ #Sunday, 06-Nov-94 08:49:37 GMT
+ dict set realopts expires \
+ [clock scan $optval -format "%A, %d-%b-%y %T %Z"]
+ }]} {catch {
+ #Sun Nov 6 08:49:37 1994
+ dict set realopts expires \
+ [clock scan $optval -gmt 1 -format "%a %b %d %T %Y"]
+ }}
+ }
+ max-age {
+ # Normalize
+ if {[string is integer -strict $optval]} {
+ dict set realopts expires [expr {[clock seconds] + $optval}]
+ }
+ }
+ domain {
+ # From the domain-matches definition [RFC 2109, section 2]:
+ # Host A's name domain-matches host B's if [...]
+ # A is a FQDN string and has the form NB, where N is a
+ # non-empty name string, B has the form .B', and B' is a
+ # FQDN string. (So, x.y.com domain-matches .y.com but
+ # not y.com.)
+ if {$optval ne "" && ![string match *. $optval]} {
+ dict set realopts domain [string trimleft $optval "."]
+ dict set realopts hostonly [expr {
+ ! [string match .* $optval]
+ }]
+ }
+ }
+ path {
+ if {[string match /* $optval]} {
+ dict set realopts path $optval
+ }
+ }
+ secure - httponly {
+ dict set realopts [string tolower $optname] 1
+ }
+ }
+ }
+ dict set realopts key $cookiename
+ dict set realopts value $cookieval
+ {*}$http(-cookiejar) storeCookie $realopts
+}
+
+# http::GetTextLine --
#
-# Get one line with the stream in blocking crlf mode
+# Get one line with the stream in crlf mode.
+# Used if Transfer-Encoding is chunked, to read the line that
+# reports the size of the following chunk.
+# Empty line is not distinguished from eof. The caller must
+# be able to handle this.
#
# Arguments
# sock The socket receiving input.
@@ -1203,15 +4351,59 @@ proc http::IsBinaryContentType {type} {
# Results:
# The line of text, without trailing newline
-proc http::getTextLine {sock} {
+proc http::GetTextLine {sock} {
set tr [fconfigure $sock -translation]
- set bl [fconfigure $sock -blocking]
- fconfigure $sock -translation crlf -blocking 1
- set r [gets $sock]
- fconfigure $sock -translation $tr -blocking $bl
+ lassign $tr trRead trWrite
+ fconfigure $sock -translation [list crlf $trWrite]
+ set r [BlockingGets $sock]
+ fconfigure $sock -translation $tr
return $r
}
+# http::BlockingRead
+#
+# Replacement for a blocking read.
+# The caller must be a coroutine.
+# Used when we expect to read a chunked-encoding
+# chunk of known size.
+
+proc http::BlockingRead {sock size} {
+ if {$size < 1} {
+ return
+ }
+ set result {}
+ while 1 {
+ set need [expr {$size - [string length $result]}]
+ set block [read $sock $need]
+ set eof [expr {[catch {eof $sock} tmp] || $tmp}]
+ append result $block
+ if {[string length $result] >= $size || $eof} {
+ return $result
+ } else {
+ yield
+ }
+ }
+}
+
+# http::BlockingGets
+#
+# Replacement for a blocking gets.
+# The caller must be a coroutine.
+# Empty line is not distinguished from eof. The caller must
+# be able to handle this.
+
+proc http::BlockingGets {sock} {
+ while 1 {
+ set count [gets $sock line]
+ set eof [expr {[catch {eof $sock} tmp] || $tmp}]
+ if {$count >= 0 || $eof} {
+ return $line
+ } else {
+ yield
+ }
+ }
+}
+
# http::CopyStart
#
# Error handling wrapper around fcopy
@@ -1223,15 +4415,78 @@ proc http::getTextLine {sock} {
# Side Effects
# This closes the connection upon error
-proc http::CopyStart {sock token} {
- variable $token
+proc http::CopyStart {sock token {initial 1}} {
upvar 0 $token state
- if {[catch {
- fcopy $sock $state(-channel) -size $state(-blocksize) -command \
- [list http::CopyDone $token]
- } err]} then {
- Finish $token $err
+ if {[info exists state(transfer)] && $state(transfer) eq "chunked"} {
+ foreach coding [ContentEncoding $token] {
+ if {$coding eq {deflateX}} {
+ # Use the standards-compliant choice.
+ set coding2 decompress
+ } else {
+ set coding2 $coding
+ }
+ lappend state(zlib) [zlib stream $coding2]
+ }
+ MakeTransformationChunked $sock [namespace code [list CopyChunk $token]]
+ } else {
+ if {$initial} {
+ foreach coding [ContentEncoding $token] {
+ if {$coding eq {deflateX}} {
+ # Use the standards-compliant choice.
+ set coding2 decompress
+ } else {
+ set coding2 $coding
+ }
+ zlib push $coding2 $sock
+ }
+ }
+ if {[catch {
+ # FIXME Keep-Alive on https tls::socket with unchunked transfer
+ # hangs until the server times out. A workaround is possible, as for
+ # the case without -channel, but it does not use the neat "fcopy"
+ # solution.
+ fcopy $sock $state(-channel) -size $state(-blocksize) -command \
+ [list http::CopyDone $token]
+ } err]} {
+ Finish $token $err
+ }
+ }
+ return
+}
+
+proc http::CopyChunk {token chunk} {
+ upvar 0 $token state
+ if {[set count [string length $chunk]]} {
+ incr state(currentsize) $count
+ if {[info exists state(zlib)]} {
+ foreach stream $state(zlib) {
+ set chunk [$stream add $chunk]
+ }
+ }
+ puts -nonewline $state(-channel) $chunk
+ if {[info exists state(-progress)]} {
+ namespace eval :: [linsert $state(-progress) end \
+ $token $state(totalsize) $state(currentsize)]
+ }
+ } else {
+ Log "CopyChunk Finish - token $token"
+ if {[info exists state(zlib)]} {
+ set excess ""
+ foreach stream $state(zlib) {
+ catch {
+ $stream put -finalize $excess
+ set excess ""
+ set overflood ""
+ while {[set overflood [$stream get]] ne ""} { append excess $overflood }
+ }
+ }
+ puts -nonewline $state(-channel) $excess
+ foreach stream $state(zlib) { $stream close }
+ unset state(zlib)
+ }
+ Eot $token ;# FIX ME: pipelining.
}
+ return
}
# http::CopyDone
@@ -1240,7 +4495,7 @@ proc http::CopyStart {sock token} {
#
# Arguments
# token The token returned from http::geturl
-# count The amount transfered
+# count The amount transferred
#
# Side Effects
# Invokes callbacks
@@ -1251,70 +4506,192 @@ proc http::CopyDone {token count {error {}}} {
set sock $state(sock)
incr state(currentsize) $count
if {[info exists state(-progress)]} {
- eval $state(-progress) \
+ namespace eval :: $state(-progress) \
[list $token $state(totalsize) $state(currentsize)]
}
- # At this point the token may have been reset
+ # At this point the token may have been reset.
if {[string length $error]} {
Finish $token $error
} elseif {[catch {eof $sock} iseof] || $iseof} {
- Eof $token
+ Eot $token
} else {
- CopyStart $sock $token
+ CopyStart $sock $token 0
}
+ return
}
-# http::Eof
+# http::Eot
+#
+# Called when either:
+# a. An eof condition is detected on the socket.
+# b. The client decides that the response is complete.
+# c. The client detects an inconsistency and aborts the transaction.
#
-# Handle eof on the socket
+# Does:
+# 1. Set state(status)
+# 2. Reverse any Content-Encoding
+# 3. Convert charset encoding and line ends if necessary
+# 4. Call http::Finish
#
# Arguments
# token The token returned from http::geturl
+# force (previously) optional, has no effect
+# reason - "eof" means premature EOF (not EOF as the natural end of
+# the response)
+# - "" means completion of response, with or without EOF
+# - anything else describes an error condition other than
+# premature EOF.
#
# Side Effects
# Clean up the socket
-proc http::Eof {token {force 0}} {
+proc http::Eot {token {reason {}}} {
variable $token
upvar 0 $token state
- if {$state(state) eq "header"} {
- # Premature eof
+ if {$reason eq "eof"} {
+ # Premature eof.
set state(status) eof
+ set reason {}
+ } elseif {$reason ne ""} {
+ # Abort the transaction.
+ set state(status) $reason
} else {
+ # The response is complete.
set state(status) ok
}
- if {($state(coding) eq "gzip") && [string length $state(body)] > 0} {
- if {[catch {
- if {[package vsatisfies [package provide Tcl] 8.6]} {
- # The zlib integration into 8.6 includes proper gzip support
- set state(body) [zlib gunzip $state(body)]
- } else {
- set state(body) [Gunzip $state(body)]
+ if {[string length $state(body)] > 0} {
+ if {[catch {
+ foreach coding [ContentEncoding $token] {
+ if {$coding eq {deflateX}} {
+ # First try the standards-compliant choice.
+ set coding2 decompress
+ if {[catch {zlib $coding2 $state(body)} result]} {
+ # If that fails, try the MS non-compliant choice.
+ set coding2 inflate
+ set state(body) [zlib $coding2 $state(body)]
+ } else {
+ # error {failed at standards-compliant deflate}
+ set state(body) $result
+ }
+ } else {
+ set state(body) [zlib $coding $state(body)]
+ }
}
- } err]} then {
- return [Finish $token $err]
- }
+ } err]} {
+ Log "error doing decompression for token $token: $err"
+ Finish $token $err
+ return
+ }
+
+ if {!$state(binary)} {
+ # If we are getting text, set the incoming channel's encoding
+ # correctly. iso8859-1 is the RFC default, but this could be any
+ # IANA charset. However, we only know how to convert what we have
+ # encodings for.
+
+ set enc [CharsetToEncoding $state(charset)]
+ if {$enc ne "binary"} {
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ set state(body) [encoding convertfrom -profile replace $enc $state(body)]
+ } else {
+ set state(body) [encoding convertfrom $enc $state(body)]
+ }
+ }
+
+ # Translate text line endings.
+ set state(body) [string map {\r\n \n \r \n} $state(body)]
+ }
+ if {[info exists state(-guesstype)] && $state(-guesstype)} {
+ GuessType $token
+ }
}
+ Finish $token $reason
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::GuessType
+# ------------------------------------------------------------------------------
+# Command to attempt limited analysis of a resource with undetermined
+# Content-Type, i.e. "application/octet-stream". This value can be set for two
+# reasons:
+# (a) by the server, in a Content-Type header
+# (b) by http::geturl, as the default value if the server does not supply a
+# Content-Type header.
+#
+# This command converts a resource if:
+# (1) it has type application/octet-stream
+# (2) it begins with an XML declaration "<?xml name="value" ... >?"
+# (3) one tag is named "encoding" and has a recognised value; or no "encoding"
+# tag exists (defaulting to utf-8)
+#
+# RFC 9110 Sec. 8.3 states:
+# "If a Content-Type header field is not present, the recipient MAY either
+# assume a media type of "application/octet-stream" ([RFC2046], Section 4.5.1)
+# or examine the data to determine its type."
+#
+# The RFC goes on to describe the pitfalls of "MIME sniffing", including
+# possible security risks.
+#
+# Arguments:
+# token - connection token
+#
+# Return Value: (boolean) true iff a change has been made
+# ------------------------------------------------------------------------------
- if {!$state(binary)} {
- # If we are getting text, set the incoming channel's encoding
- # correctly. iso8859-1 is the RFC default, but this could be any IANA
- # charset. However, we only know how to convert what we have
- # encodings for.
+proc http::GuessType {token} {
+ variable $token
+ upvar 0 $token state
- set enc [CharsetToEncoding $state(charset)]
- if {$enc ne "binary"} {
- set state(body) [encoding convertfrom $enc $state(body)]
- }
+ if {$state(type) ne {application/octet-stream}} {
+ return 0
+ }
- # Translate text line endings.
- set state(body) [string map {\r\n \n \r \n} $state(body)]
+ set body $state(body)
+ # e.g. {<?xml version="1.0" encoding="utf-8"?> ...}
+
+ if {![regexp -nocase -- {^<[?]xml[[:space:]][^>?]*[?]>} $body match]} {
+ return 0
}
+ # e.g. {<?xml version="1.0" encoding="utf-8"?>}
- Finish $token
+ set contents [regsub -- {[[:space:]]+} $match { }]
+ set contents [string range [string tolower $contents] 6 end-2]
+ # e.g. {version="1.0" encoding="utf-8"}
+ # without excess whitespace or upper-case letters
+
+ if {![regexp -- {^([^=" ]+="[^"]+" )+$} "$contents "]} {
+ return 0
+ }
+ # The application/xml default encoding:
+ set res utf-8
+
+ set tagList [regexp -all -inline -- {[^=" ]+="[^"]+"} $contents]
+ foreach tag $tagList {
+ regexp -- {([^=" ]+)="([^"]+)"} $tag -> name value
+ if {$name eq {encoding}} {
+ set res $value
+ }
+ }
+ set enc [CharsetToEncoding $res]
+ if {$enc eq "binary"} {
+ return 0
+ }
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ set state(body) [encoding convertfrom -profile replace $enc $state(body)]
+ } else {
+ set state(body) [encoding convertfrom $enc $state(body)]
+ }
+ set state(body) [string map {\r\n \n \r \n} $state(body)]
+ set state(type) application/xml
+ set state(binary) 0
+ set state(charset) $res
+ return 1
}
+
# http::wait --
#
# See documentation for details.
@@ -1323,7 +4700,7 @@ proc http::Eof {token {force 0}} {
# token Connection token.
#
# Results:
-# The status after the wait.
+# The status after the wait.
proc http::wait {token} {
variable $token
@@ -1350,10 +4727,16 @@ proc http::wait {token} {
# TODO
proc http::formatQuery {args} {
+ if {[llength $args] % 2} {
+ return \
+ -code error \
+ -errorcode [list HTTP BADARGCNT $args] \
+ {Incorrect number of arguments, must be an even number.}
+ }
set result ""
set sep ""
foreach i $args {
- append result $sep [mapReply $i]
+ append result $sep [quoteString $i]
if {$sep eq "="} {
set sep &
} else {
@@ -1363,7 +4746,7 @@ proc http::formatQuery {args} {
return $result
}
-# http::mapReply --
+# http::quoteString --
#
# Do x-www-urlencoded character mapping
#
@@ -1373,7 +4756,7 @@ proc http::formatQuery {args} {
# Results:
# The encoded string
-proc http::mapReply {string} {
+proc http::quoteString {string} {
variable http
variable formMap
@@ -1381,18 +4764,12 @@ proc http::mapReply {string} {
# a pre-computed map and [string map] to do the conversion (much faster
# than [regsub]/[subst]). [Bug 1020491]
- if {$http(-urlencoding) ne ""} {
+ if {[package vsatisfies [package provide Tcl] 9.0-]} {
+ set string [encoding convertto -profile replace $http(-urlencoding) $string]
+ } else {
set string [encoding convertto $http(-urlencoding) $string]
- return [string map $formMap $string]
}
- set converted [string map $formMap $string]
- if {[string match "*\[\u0100-\uffff\]*" $converted]} {
- regexp {[\u0100-\uffff]} $converted badChar
- # Return this error message for maximum compatibility... :^/
- return -code error \
- "can't read \"formMap($badChar)\": no such element in array"
- }
- return $converted
+ return [string map $formMap $string]
}
# http::ProxyRequired --
@@ -1406,15 +4783,23 @@ proc http::mapReply {string} {
proc http::ProxyRequired {host} {
variable http
- if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} {
- if {
- ![info exists http(-proxyport)] ||
- ![string length $http(-proxyport)]
- } then {
- set http(-proxyport) 8080
+ if {(![info exists http(-proxyhost)]) || ($http(-proxyhost) eq {})} {
+ return
+ }
+ if {![info exists http(-proxyport)] || ($http(-proxyport) eq {})} {
+ set port 8080
+ } else {
+ set port $http(-proxyport)
+ }
+
+ # Simple test (cf. autoproxy) for hosts that must be accessed directly,
+ # not through the proxy server.
+ foreach domain $http(-proxynot) {
+ if {[string match -nocase $domain $host]} {
+ return {}
}
- return [list $http(-proxyhost) $http(-proxyport)]
}
+ return [list $http(-proxyhost) $port]
}
# http::CharsetToEncoding --
@@ -1431,7 +4816,7 @@ proc http::CharsetToEncoding {charset} {
set encoding "iso8859-$num"
} elseif {[regexp {iso-?2022-(jp|kr)} $charset -> ext]} {
set encoding "iso2022-$ext"
- } elseif {[regexp {shift[-_]?js} $charset]} {
+ } elseif {[regexp {shift[-_]?jis} $charset]} {
set encoding "shiftjis"
} elseif {[regexp {(?:windows|cp)-?([0-9]+)} $charset -> num]} {
set encoding "cp$num"
@@ -1443,6 +4828,9 @@ proc http::CharsetToEncoding {charset} {
1 - 2 - 3 {
set encoding "iso8859-$num"
}
+ default {
+ set encoding "binary"
+ }
}
} else {
# other charset, like euc-xx, utf-8,... may directly map to encoding
@@ -1456,59 +4844,669 @@ proc http::CharsetToEncoding {charset} {
}
}
-# http::Gunzip --
+
+# ------------------------------------------------------------------------------
+# Proc http::ContentEncoding
+# ------------------------------------------------------------------------------
+# Return the list of content-encoding transformations we need to do in order.
+#
+ # --------------------------------------------------------------------------
+ # Options for Accept-Encoding, Content-Encoding: the switch command
+ # --------------------------------------------------------------------------
+ # The symbol deflateX allows http to attempt both versions of "deflate",
+ # unless there is a -channel - for a -channel, only "decompress" is tried.
+ # Alternative/extra lines for switch:
+ # The standards-compliant version of "deflate" can be chosen with:
+ # deflate { lappend r decompress }
+ # The Microsoft non-compliant version of "deflate" can be chosen with:
+ # deflate { lappend r inflate }
+ # The previously used implementation of "compress", which appears to be
+ # incorrect and is rarely used by web servers, can be chosen with:
+ # compress - x-compress { lappend r decompress }
+ # --------------------------------------------------------------------------
+#
+# Arguments:
+# token - Connection token.
+#
+# Return Value: list
+# ------------------------------------------------------------------------------
+
+proc http::ContentEncoding {token} {
+ upvar 0 $token state
+ set r {}
+ if {[info exists state(coding)]} {
+ foreach coding [split $state(coding) ,] {
+ switch -exact -- $coding {
+ deflate { lappend r deflateX }
+ gzip - x-gzip { lappend r gunzip }
+ identity {}
+ br {
+ return -code error\
+ "content-encoding \"br\" not implemented"
+ }
+ default {
+ Log "unknown content-encoding \"$coding\" ignored"
+ }
+ }
+ }
+ }
+ return $r
+}
+
+proc http::ReceiveChunked {chan command} {
+ set data ""
+ set size -1
+ yield
+ while {1} {
+ chan configure $chan -translation {crlf binary}
+ while {[gets $chan line] < 1} { yield }
+ chan configure $chan -translation {binary binary}
+ if {[scan $line %x size] != 1} {
+ return -code error "invalid size: \"$line\""
+ }
+ set chunk ""
+ while {$size && ![chan eof $chan]} {
+ set part [chan read $chan $size]
+ incr size -[string length $part]
+ append chunk $part
+ }
+ if {[catch {
+ uplevel #0 [linsert $command end $chunk]
+ }]} {
+ http::Log "Error in callback: $::errorInfo"
+ }
+ if {[string length $chunk] == 0} {
+ # channel might have been closed in the callback
+ catch {chan event $chan readable {}}
+ return
+ }
+ }
+}
+
+# http::SplitCommaSeparatedFieldValue --
+# Return the individual values of a comma-separated field value.
+#
+# Arguments:
+# fieldValue Comma-separated header field value.
+#
+# Results:
+# List of values.
+proc http::SplitCommaSeparatedFieldValue {fieldValue} {
+ set r {}
+ foreach el [split $fieldValue ,] {
+ lappend r [string trim $el]
+ }
+ return $r
+}
+
+
+# http::GetFieldValue --
+# Return the value of a header field.
+#
+# Arguments:
+# headers Headers key-value list
+# fieldName Name of header field whose value to return.
+#
+# Results:
+# The value of the fieldName header field
+#
+# Field names are matched case-insensitively (RFC 7230 Section 3.2).
+#
+# If the field is present multiple times, it is assumed that the field is
+# defined as a comma-separated list and the values are combined (by separating
+# them with commas, see RFC 7230 Section 3.2.2) and returned at once.
+proc http::GetFieldValue {headers fieldName} {
+ set r {}
+ foreach {field value} $headers {
+ if {[string equal -nocase $fieldName $field]} {
+ if {$r eq {}} {
+ set r $value
+ } else {
+ append r ", $value"
+ }
+ }
+ }
+ return $r
+}
+
+proc http::MakeTransformationChunked {chan command} {
+ coroutine [namespace current]::dechunk$chan ::http::ReceiveChunked $chan $command
+ chan event $chan readable [namespace current]::dechunk$chan
+ return
+}
+
+interp alias {} http::data {} http::responseBody
+interp alias {} http::code {} http::responseLine
+interp alias {} http::mapReply {} http::quoteString
+interp alias {} http::meta {} http::responseHeaders
+interp alias {} http::metaValue {} http::responseHeaderValue
+interp alias {} http::ncode {} http::responseCode
+
+
+# ------------------------------------------------------------------------------
+# Proc http::socketAsCallback
+# ------------------------------------------------------------------------------
+# Command to use in place of ::socket as the value of ::tls::socketCmd.
+# This command does the same as http::AltSocket, and also handles https
+# connections through a proxy server.
+#
+# Notes.
+# - The proxy server works differently for https and http. This implementation
+# is for https. The proxy for http is implemented in http::CreateToken (in
+# code that was previously part of http::geturl).
+# - This code implicitly uses the tls options set for https in a call to
+# http::register, and does not need to call commands tls::*. This simple
+# implementation is possible because tls uses a callback to ::socket that can
+# be redirected by changing the value of ::tls::socketCmd.
+#
+# Arguments:
+# args - as for ::socket
+#
+# Return Value: a socket identifier
+# ------------------------------------------------------------------------------
+
+proc http::socketAsCallback {args} {
+ variable http
+
+ set targ [lsearch -exact $args -type]
+ if {$targ != -1} {
+ set token [lindex $args $targ+1]
+ upvar 0 ${token} state
+ set protoProxyConn $state(protoProxyConn)
+ } else {
+ set protoProxyConn 0
+ }
+
+ set host [lindex $args end-1]
+ set port [lindex $args end]
+ if { ($http(-proxyfilter) ne {})
+ && (![catch {$http(-proxyfilter) $host} proxy])
+ && $protoProxyConn
+ } {
+ set phost [lindex $proxy 0]
+ set pport [lindex $proxy 1]
+ } else {
+ set phost {}
+ set pport {}
+ }
+ if {$phost eq ""} {
+ set sock [::http::AltSocket {*}$args]
+ } else {
+ set sock [::http::SecureProxyConnect {*}$args $phost $pport]
+ }
+ return $sock
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::SecureProxyConnect
+# ------------------------------------------------------------------------------
+# Command to open a socket through a proxy server to a remote server for use by
+# tls. The caller must perform the tls handshake.
+#
+# Notes
+# - Based on patch supplied by Melissa Chawla in ticket 1173760, and
+# Proxy-Authorization header cf. autoproxy by Pat Thoyts.
+# - Rewritten as a call to http::geturl, because response headers and body are
+# needed if the CONNECT request fails. CONNECT is implemented for this case
+# only, by state(bypass).
+# - FUTURE WORK: give http::geturl a -connect option for a general CONNECT.
+# - The request header Proxy-Connection is discouraged in RFC 7230 (June 2014),
+# RFC 9112 (June 2022).
#
-# Decompress data transmitted using the gzip transfer coding.
+# Arguments:
+# args - as for ::socket, ending in host, port; with proxy host, proxy
+# port appended.
#
+# Return Value: a socket identifier
+# ------------------------------------------------------------------------------
+
+proc http::SecureProxyConnect {args} {
+ variable http
+ variable ConnectVar
+ variable ConnectCounter
+ variable failedProxyValues
+ set varName ::http::ConnectVar([incr ConnectCounter])
-# FIX ME: redo using zlib sinflate
-proc http::Gunzip {data} {
- binary scan $data Scb5icc magic method flags time xfl os
- set pos 10
- if {$magic != 0x1f8b} {
- return -code error "invalid data: supplied data is not in gzip format"
+ # Extract (non-proxy) target from args.
+ set host [lindex $args end-3]
+ set port [lindex $args end-2]
+ set args [lreplace $args end-3 end-2]
+
+ # Proxy server URL for connection.
+ # This determines where the socket is opened.
+ set phost [lindex $args end-1]
+ set pport [lindex $args end]
+ if {[string first : $phost] != -1} {
+ # IPv6 address, wrap it in [] so we can append :pport
+ set phost "\[${phost}\]"
}
- if {$method != 8} {
- return -code error "invalid compression method"
+ set url http://${phost}:${pport}
+ # Elements of args other than host and port are not used when
+ # AsyncTransaction opens a socket. Those elements are -async and the
+ # -type $tokenName for the https transaction. Option -async is used by
+ # AsyncTransaction anyway, and -type $tokenName should not be
+ # propagated: the proxy request adds its own -type value.
+
+ set targ [lsearch -exact $args -type]
+ if {$targ != -1} {
+ # Record in the token that this is a proxy call.
+ set token [lindex $args $targ+1]
+ upvar 0 ${token} state
+ set tim $state(-timeout)
+ set state(proxyUsed) SecureProxyFailed
+ # This value is overwritten with "SecureProxy" below if the CONNECT is
+ # successful. If it is unsuccessful, the socket will be closed
+ # below, and so in this unsuccessful case there are no other transactions
+ # whose (proxyUsed) must be updated.
+ } else {
+ set tim 0
+ }
+ if {$tim == 0} {
+ # Do not use infinite timeout for the proxy.
+ set tim 30000
}
- # lassign [split $flags ""] f_text f_crc f_extra f_name f_comment
- foreach {f_text f_crc f_extra f_name f_comment} [split $flags ""] break
- set extra ""
- if {$f_extra} {
- binary scan $data @${pos}S xlen
- incr pos 2
- set extra [string range $data $pos $xlen]
- set pos [incr xlen]
+ # Prepare and send a CONNECT request to the proxy, using
+ # code similar to http::geturl.
+ set requestHeaders [list Host $host]
+ lappend requestHeaders Connection keep-alive
+ if {$http(-proxyauth) != {}} {
+ lappend requestHeaders Proxy-Authorization $http(-proxyauth)
}
- set name ""
- if {$f_name} {
- set ndx [string first \0 $data $pos]
- set name [string range $data $pos $ndx]
- set pos [incr ndx]
+ set token2 [CreateToken $url -keepalive 0 -timeout $tim \
+ -headers $requestHeaders -command [list http::AllDone $varName]]
+ variable $token2
+ upvar 0 $token2 state2
+
+ # Kludges:
+ # Setting this variable overrides the HTTP request line and also allows
+ # -headers to override the Connection: header set by -keepalive.
+ # The arguments "-keepalive 0" ensure that when Finish is called for an
+ # unsuccessful request, the socket is always closed.
+ set state2(bypass) "CONNECT $host:$port HTTP/1.1"
+
+ AsyncTransaction $token2
+
+ if {[info coroutine] ne {}} {
+ # All callers in the http package are coroutines launched by
+ # the event loop.
+ # The cwait command requires a coroutine because it yields
+ # to the caller; $varName is traced and the coroutine resumes
+ # when the variable is written.
+ cwait $varName
+ } else {
+ return -code error {code must run in a coroutine}
+ # For testing with a non-coroutine caller outside the http package.
+ # vwait $varName
}
+ unset $varName
- set comment ""
- if {$f_comment} {
- set ndx [string first \0 $data $pos]
- set comment [string range $data $pos $ndx]
- set pos [incr ndx]
+ if { ($state2(state) ne "complete")
+ || ($state2(status) ne "ok")
+ || (![string is integer -strict $state2(responseCode)])
+ } {
+ set msg {the HTTP request to the proxy server did not return a valid\
+ and complete response}
+ if {[info exists state2(error)]} {
+ append msg ": " [lindex $state2(error) 0]
+ }
+ cleanup $token2
+ return -code error $msg
}
- set fcrc ""
- if {$f_crc} {
- set fcrc [string range $data $pos [incr pos]]
- incr pos
+ set code $state2(responseCode)
+
+ if {($code >= 200) && ($code < 300)} {
+ # All OK. The caller in package tls will now call "tls::import $sock".
+ # The cleanup command does not close $sock.
+ # Other tidying was done in http::Event.
+
+ # If this is a persistent socket, any other transactions that are
+ # already marked to use the socket will have their (proxyUsed) updated
+ # when http::OpenSocket calls http::ConfigureNewSocket.
+ set state(proxyUsed) SecureProxy
+ set sock $state2(sock)
+ cleanup $token2
+ return $sock
}
- binary scan [string range $data end-7 end] ii crc size
- set inflated [zlib inflate [string range $data $pos end-8]]
- set chk [zlib crc32 $inflated]
- if {($crc & 0xffffffff) != ($chk & 0xffffffff)} {
- return -code error "invalid data: checksum mismatch $crc != $chk"
+ if {$targ != -1} {
+ # Non-OK HTTP status code; token is known because option -type
+ # (cf. targ) was passed through tcltls, and so the useful
+ # parts of the proxy's response can be copied to state(*).
+ # Do not copy state2(sock).
+ # Return the proxy response to the caller of geturl.
+ foreach name $failedProxyValues {
+ if {[info exists state2($name)]} {
+ set state($name) $state2($name)
+ }
+ }
+ set state(connection) close
+ set msg "proxy connect failed: $code"
+ # - This error message will be detected by http::OpenSocket and will
+ # cause it to present the proxy's HTTP response as that of the
+ # original $token transaction, identified only by state(proxyUsed)
+ # as the response of the proxy.
+ # - The cases where this would mislead the caller of http::geturl are
+ # given a different value of msg (below) so that http::OpenSocket will
+ # treat them as errors, but will preserve the $token array for
+ # inspection by the caller.
+ # - Status code 305 (Proxy Required) was deprecated for security reasons
+ # in RFC 2616 (June 1999) and in any case should never be served by a
+ # proxy.
+ # - Other 3xx responses from the proxy are inappropriate, and should not
+ # occur.
+ # - A 401 response from the proxy is inappropriate, and should not
+ # occur. It would be confusing if returned to the caller.
+
+ if {($code >= 300) && ($code < 400)} {
+ set msg "the proxy server responded to the HTTP request with an\
+ inappropriate $code redirect"
+ set loc [responseHeaderValue $token2 location]
+ if {$loc ne {}} {
+ append msg "to " $loc
+ }
+ } elseif {($code == 401)} {
+ set msg "the proxy server responded to the HTTP request with an\
+ inappropriate 401 request for target-host credentials"
+ } else {
+ }
+ } else {
+ set msg "connection to proxy failed with status code $code"
}
- return $inflated
+
+ # - ${token2}(sock) has already been closed because -keepalive 0.
+ # - Error return does not pass the socket ID to the
+ # $token transaction, which retains its socket placeholder.
+ cleanup $token2
+ return -code error $msg
+}
+
+proc http::AllDone {varName args} {
+ set $varName done
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::AltSocket
+# ------------------------------------------------------------------------------
+# This command is a drop-in replacement for ::socket.
+# Arguments and return value as for ::socket.
+#
+# Notes.
+# - http::AltSocket is specified in place of ::socket by the definition of
+# urlTypes in the namespace header of this file (http.tcl).
+# - The command makes a simple call to ::socket unless the user has called
+# http::config to change the value of -threadlevel from the default value 0.
+# - For -threadlevel 1 or 2, if the Thread package is available, the command
+# waits in the event loop while the socket is opened in another thread. This
+# is a workaround for bug [824251] - it prevents http::geturl from blocking
+# the event loop if the DNS lookup or server connection is slow.
+# - FIXME Use a thread pool if connections are very frequent.
+# - FIXME The peer thread can transfer the socket only to the main interpreter
+# in the present thread. Therefore this code works only if this script runs
+# in the main interpreter. In a child interpreter, the parent must alias a
+# command to ::http::AltSocket in the child, run http::AltSocket in the
+# parent, and then transfer the socket to the child.
+# - The http::AltSocket command is simple, and can easily be replaced with an
+# alternative command that uses a different technique to open a socket while
+# entering the event loop.
+# - Unexpected behaviour by thread::send -async (Thread 2.8.6).
+# An error in thread::send -async causes return of just the error message
+# (not the expected 3 elements), and raises a bgerror in the main thread.
+# Hence wrap the command with catch as a precaution.
+# - Bug in Thread 2.8.8 - on Windows, read/write operations fail on a socket
+# moved from another thread by thread::transfer.
+# ------------------------------------------------------------------------------
+
+proc http::AltSocket {args} {
+ variable ThreadVar
+ variable ThreadCounter
+ variable http
+
+ LoadThreadIfNeeded
+
+ set targ [lsearch -exact $args -type]
+ if {$targ != -1} {
+ set token [lindex $args $targ+1]
+ set args [lreplace $args $targ $targ+1]
+ upvar 0 $token state
+ }
+
+ if {$http(usingThread) && [info exists state] && $state(protoSockThread)} {
+ } else {
+ # Use plain "::socket". This is the default.
+ return [eval ::socket $args]
+ }
+
+ set defcmd ::socket
+ set sockargs $args
+ set script "
+ set code \[catch {
+ [list proc ::SockInThread {caller defcmd sockargs} [info body ::http::SockInThread]]
+ [list ::SockInThread [thread::id] $defcmd $sockargs]
+ } result opts\]
+ list \$code \$opts \$result
+ "
+
+ set state(tid) [thread::create]
+ set varName ::http::ThreadVar([incr ThreadCounter])
+ thread::send -async $state(tid) $script $varName
+ Log >T Thread Start Wait $args -- coro [info coroutine] $varName
+ if {[info coroutine] ne {}} {
+ # All callers in the http package are coroutines launched by
+ # the event loop.
+ # The cwait command requires a coroutine because it yields
+ # to the caller; $varName is traced and the coroutine resumes
+ # when the variable is written.
+ cwait $varName
+ } else {
+ return -code error {code must run in a coroutine}
+ # For testing with a non-coroutine caller outside the http package.
+ # vwait $varName
+ }
+ Log >U Thread End Wait $args -- coro [info coroutine] $varName [set $varName]
+ thread::release $state(tid)
+ set state(tid) {}
+ set result [set $varName]
+ unset $varName
+ if {(![string is list $result]) || ([llength $result] != 3)} {
+ return -code error "result from peer thread is not a list of\
+ length 3: it is \n$result"
+ }
+ lassign $result threadCode threadDict threadResult
+ if {($threadCode != 0)} {
+ # This is an error in thread::send. Return the lot.
+ return -options $threadDict -code error $threadResult
+ }
+
+ # Now the results of the catch in the peer thread.
+ lassign $threadResult catchCode errdict sock
+
+ if {($catchCode == 0) && ($sock ni [chan names])} {
+ return -code error {Transfer of socket from peer thread failed.\
+ Check that this script is not running in a child interpreter.}
+ }
+ return -options $errdict -code $catchCode $sock
+}
+
+# The commands below are dependencies of http::AltSocket and
+# http::SecureProxyConnect and are not used elsewhere.
+
+# ------------------------------------------------------------------------------
+# Proc http::LoadThreadIfNeeded
+# ------------------------------------------------------------------------------
+# Command to load the Thread package if it is needed. If it is needed and not
+# loadable, the outcome depends on $http(-threadlevel):
+# value 0 => Thread package not required, no problem
+# value 1 => operate as if -threadlevel 0
+# value 2 => error return
+#
+# The command assigns a value to http(usingThread), which records whether
+# command http::AltSocket can use a separate thread.
+#
+# Arguments: none
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+proc http::LoadThreadIfNeeded {} {
+ variable http
+ if {$http(-threadlevel) == 0} {
+ set http(usingThread) 0
+ return
+ }
+ if {[catch {package require Thread}]} {
+ if {$http(-threadlevel) == 2} {
+ set msg {[http::config -threadlevel] has value 2,\
+ but the Thread package is not available}
+ return -code error $msg
+ }
+ set http(usingThread) 0
+ return
+ }
+ set http(usingThread) 1
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::SockInThread
+# ------------------------------------------------------------------------------
+# Command http::AltSocket is a ::socket replacement. It defines and runs this
+# command, http::SockInThread, in a peer thread.
+#
+# Arguments:
+# caller
+# defcmd
+# sockargs
+#
+# Return value: list of values that describe the outcome. The return is
+# intended to be a normal (non-error) return in all cases.
+# ------------------------------------------------------------------------------
+
+proc http::SockInThread {caller defcmd sockargs} {
+ package require Thread
+
+ set catchCode [catch {eval $defcmd $sockargs} sock errdict]
+ if {$catchCode == 0} {
+ set catchCode [catch {thread::transfer $caller $sock; set sock} sock errdict]
+ }
+ return [list $catchCode $errdict $sock]
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::cwaiter::cwait
+# ------------------------------------------------------------------------------
+# Command to substitute for vwait, without the ordering issues.
+# A command that uses cwait must be a coroutine that is launched by an event,
+# e.g. fileevent or after idle, and has no calling code to be resumed upon
+# "yield". It cannot return a value.
+#
+# Arguments:
+# varName - fully-qualified name of the variable that the calling script
+# will write to resume the coroutine. Any scalar variable or
+# array element is permitted.
+# coroName - (optional) name of the coroutine to be called when varName is
+# written - defaults to this coroutine
+# timeout - (optional) timeout value in ms
+# timeoutValue - (optional) value to assign to varName if there is a timeout
+#
+# Return Value: none
+# ------------------------------------------------------------------------------
+
+namespace eval http::cwaiter {
+ namespace export cwait
+ variable log {}
+ variable logOn 0
+}
+
+proc http::cwaiter::cwait {
+ varName {coroName {}} {timeout {}} {timeoutValue {}}
+} {
+ set thisCoro [info coroutine]
+ if {$thisCoro eq {}} {
+ return -code error {cwait cannot be called outside a coroutine}
+ }
+ if {$coroName eq {}} {
+ set coroName $thisCoro
+ }
+ if {[string range $varName 0 1] ne {::}} {
+ return -code error {argument varName must be fully qualified}
+ }
+ if {$timeout eq {}} {
+ set toe {}
+ } elseif {[string is integer -strict $timeout] && ($timeout > 0)} {
+ set toe [after $timeout [list set $varName $timeoutValue]]
+ } else {
+ return -code error {if timeout is supplied it must be a positive integer}
+ }
+
+ set cmd [list ::http::cwaiter::CwaitHelper $varName $coroName $toe]
+ trace add variable $varName write $cmd
+ CoLog "Yield $varName $coroName"
+ yield
+ CoLog "Resume $varName $coroName"
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::cwaiter::CwaitHelper
+# ------------------------------------------------------------------------------
+# Helper command called by the trace set by cwait.
+# - Ignores the arguments added by trace.
+# - A simple call to $coroName works, and in error cases gives a suitable stack
+# trace, but because it is inside a trace the headline error message is
+# something like {can't set "::Result(6)": error}, not the actual
+# error. So let the trace command return.
+# - Remove the trace immediately. We don't want multiple calls.
+# ------------------------------------------------------------------------------
+
+proc http::cwaiter::CwaitHelper {varName coroName toe args} {
+ CoLog "got $varName for $coroName"
+ set cmd [list ::http::cwaiter::CwaitHelper $varName $coroName $toe]
+ trace remove variable $varName write $cmd
+ after cancel $toe
+
+ after 0 $coroName
+ return
+}
+
+
+# ------------------------------------------------------------------------------
+# Proc http::cwaiter::LogInit
+# ------------------------------------------------------------------------------
+# Call this command to initiate debug logging and clear the log.
+# ------------------------------------------------------------------------------
+
+proc http::cwaiter::LogInit {} {
+ variable log
+ variable logOn
+ set log {}
+ set logOn 1
+ return
+}
+
+proc http::cwaiter::LogRead {} {
+ variable log
+ return $log
+}
+
+proc http::cwaiter::CoLog {msg} {
+ variable log
+ variable logOn
+ if {$logOn} {
+ append log $msg \n
+ }
+ return
+}
+
+namespace eval http {
+ namespace import ::http::cwaiter::*
}
# Local variables:
diff --git a/library/http/pkgIndex.tcl b/library/http/pkgIndex.tcl
index 89da540..209c2c0 100644
--- a/library/http/pkgIndex.tcl
+++ b/library/http/pkgIndex.tcl
@@ -1,4 +1,2 @@
-# Tcl package index file, version 1.1
-
-if {![package vsatisfies [package provide Tcl] 8.4]} {return}
-package ifneeded http 2.7.15 [list tclPkgSetup $dir http 2.7.15 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
+if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
+package ifneeded http 2.10.0 [list tclPkgSetup $dir http 2.10.0 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
diff --git a/library/http1.0/http.tcl b/library/http1.0/http.tcl
deleted file mode 100644
index 8329de4..0000000
--- a/library/http1.0/http.tcl
+++ /dev/null
@@ -1,377 +0,0 @@
-# http.tcl
-# Client-side HTTP for GET, POST, and HEAD commands.
-# These routines can be used in untrusted code that uses the Safesock
-# security policy.
-# These procedures use a callback interface to avoid using vwait,
-# which is not defined in the safe base.
-#
-# See the http.n man page for documentation
-
-package provide http 1.0
-
-array set http {
- -accept */*
- -proxyhost {}
- -proxyport {}
- -useragent {Tcl http client package 1.0}
- -proxyfilter httpProxyRequired
-}
-proc http_config {args} {
- global http
- set options [lsort [array names http -*]]
- set usage [join $options ", "]
- if {[llength $args] == 0} {
- set result {}
- foreach name $options {
- lappend result $name $http($name)
- }
- return $result
- }
- regsub -all -- - $options {} options
- set pat ^-([join $options |])$
- if {[llength $args] == 1} {
- set flag [lindex $args 0]
- if {[regexp -- $pat $flag]} {
- return $http($flag)
- } else {
- return -code error "Unknown option $flag, must be: $usage"
- }
- } else {
- foreach {flag value} $args {
- if {[regexp -- $pat $flag]} {
- set http($flag) $value
- } else {
- return -code error "Unknown option $flag, must be: $usage"
- }
- }
- }
-}
-
- proc httpFinish { token {errormsg ""} } {
- upvar #0 $token state
- global errorInfo errorCode
- if {[string length $errormsg] != 0} {
- set state(error) [list $errormsg $errorInfo $errorCode]
- set state(status) error
- }
- catch {close $state(sock)}
- catch {after cancel $state(after)}
- if {[info exists state(-command)]} {
- if {[catch {eval $state(-command) {$token}} err]} {
- if {[string length $errormsg] == 0} {
- set state(error) [list $err $errorInfo $errorCode]
- set state(status) error
- }
- }
- unset state(-command)
- }
-}
-proc http_reset { token {why reset} } {
- upvar #0 $token state
- set state(status) $why
- catch {fileevent $state(sock) readable {}}
- httpFinish $token
- if {[info exists state(error)]} {
- set errorlist $state(error)
- unset state(error)
- eval error $errorlist
- }
-}
-proc http_get { url args } {
- global http
- if {![info exists http(uid)]} {
- set http(uid) 0
- }
- set token http#[incr http(uid)]
- upvar #0 $token state
- http_reset $token
- array set state {
- -blocksize 8192
- -validate 0
- -headers {}
- -timeout 0
- state header
- meta {}
- currentsize 0
- totalsize 0
- type text/html
- body {}
- status ""
- }
- set options {-blocksize -channel -command -handler -headers \
- -progress -query -validate -timeout}
- set usage [join $options ", "]
- regsub -all -- - $options {} options
- set pat ^-([join $options |])$
- foreach {flag value} $args {
- if {[regexp $pat $flag]} {
- # Validate numbers
- if {[info exists state($flag)] && \
- [regexp {^[0-9]+$} $state($flag)] && \
- ![regexp {^[0-9]+$} $value]} {
- return -code error "Bad value for $flag ($value), must be integer"
- }
- set state($flag) $value
- } else {
- return -code error "Unknown option $flag, can be: $usage"
- }
- }
- if {! [regexp -nocase {^(http://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \
- x proto host y port srvurl]} {
- error "Unsupported URL: $url"
- }
- if {[string length $port] == 0} {
- set port 80
- }
- if {[string length $srvurl] == 0} {
- set srvurl /
- }
- if {[string length $proto] == 0} {
- set url http://$url
- }
- set state(url) $url
- if {![catch {$http(-proxyfilter) $host} proxy]} {
- set phost [lindex $proxy 0]
- set pport [lindex $proxy 1]
- }
- if {$state(-timeout) > 0} {
- set state(after) [after $state(-timeout) [list http_reset $token timeout]]
- }
- if {[info exists phost] && [string length $phost]} {
- set srvurl $url
- set s [socket $phost $pport]
- } else {
- set s [socket $host $port]
- }
- set state(sock) $s
-
- # Send data in cr-lf format, but accept any line terminators
-
- fconfigure $s -translation {auto crlf} -buffersize $state(-blocksize)
-
- # The following is disallowed in safe interpreters, but the socket
- # is already in non-blocking mode in that case.
-
- catch {fconfigure $s -blocking off}
- set len 0
- set how GET
- if {[info exists state(-query)]} {
- set len [string length $state(-query)]
- if {$len > 0} {
- set how POST
- }
- } elseif {$state(-validate)} {
- set how HEAD
- }
- puts $s "$how $srvurl HTTP/1.0"
- puts $s "Accept: $http(-accept)"
- puts $s "Host: $host"
- puts $s "User-Agent: $http(-useragent)"
- foreach {key value} $state(-headers) {
- regsub -all \[\n\r\] $value {} value
- set key [string trim $key]
- if {[string length $key]} {
- puts $s "$key: $value"
- }
- }
- if {$len > 0} {
- puts $s "Content-Length: $len"
- puts $s "Content-Type: application/x-www-form-urlencoded"
- puts $s ""
- fconfigure $s -translation {auto binary}
- puts -nonewline $s $state(-query)
- } else {
- puts $s ""
- }
- flush $s
- fileevent $s readable [list httpEvent $token]
- if {! [info exists state(-command)]} {
- http_wait $token
- }
- return $token
-}
-proc http_data {token} {
- upvar #0 $token state
- return $state(body)
-}
-proc http_status {token} {
- upvar #0 $token state
- return $state(status)
-}
-proc http_code {token} {
- upvar #0 $token state
- return $state(http)
-}
-proc http_size {token} {
- upvar #0 $token state
- return $state(currentsize)
-}
-
- proc httpEvent {token} {
- upvar #0 $token state
- set s $state(sock)
-
- if {[eof $s]} {
- httpEof $token
- return
- }
- if {$state(state) == "header"} {
- set n [gets $s line]
- if {$n == 0} {
- set state(state) body
- if {![regexp -nocase ^text $state(type)]} {
- # Turn off conversions for non-text data
- fconfigure $s -translation binary
- if {[info exists state(-channel)]} {
- fconfigure $state(-channel) -translation binary
- }
- }
- if {[info exists state(-channel)] &&
- ![info exists state(-handler)]} {
- # Initiate a sequence of background fcopies
- fileevent $s readable {}
- httpCopyStart $s $token
- }
- } elseif {$n > 0} {
- if {[regexp -nocase {^content-type:(.+)$} $line x type]} {
- set state(type) [string trim $type]
- }
- if {[regexp -nocase {^content-length:(.+)$} $line x length]} {
- set state(totalsize) [string trim $length]
- }
- if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} {
- lappend state(meta) $key $value
- } elseif {[regexp ^HTTP $line]} {
- set state(http) $line
- }
- }
- } else {
- if {[catch {
- if {[info exists state(-handler)]} {
- set n [eval $state(-handler) {$s $token}]
- } else {
- set block [read $s $state(-blocksize)]
- set n [string length $block]
- if {$n >= 0} {
- append state(body) $block
- }
- }
- if {$n >= 0} {
- incr state(currentsize) $n
- }
- } err]} {
- httpFinish $token $err
- } else {
- if {[info exists state(-progress)]} {
- eval $state(-progress) {$token $state(totalsize) $state(currentsize)}
- }
- }
- }
-}
- proc httpCopyStart {s token} {
- upvar #0 $token state
- if {[catch {
- fcopy $s $state(-channel) -size $state(-blocksize) -command \
- [list httpCopyDone $token]
- } err]} {
- httpFinish $token $err
- }
-}
- proc httpCopyDone {token count {error {}}} {
- upvar #0 $token state
- set s $state(sock)
- incr state(currentsize) $count
- if {[info exists state(-progress)]} {
- eval $state(-progress) {$token $state(totalsize) $state(currentsize)}
- }
- if {([string length $error] != 0)} {
- httpFinish $token $error
- } elseif {[eof $s]} {
- httpEof $token
- } else {
- httpCopyStart $s $token
- }
-}
- proc httpEof {token} {
- upvar #0 $token state
- if {$state(state) == "header"} {
- # Premature eof
- set state(status) eof
- } else {
- set state(status) ok
- }
- set state(state) eof
- httpFinish $token
-}
-proc http_wait {token} {
- upvar #0 $token state
- if {![info exists state(status)] || [string length $state(status)] == 0} {
- vwait $token\(status)
- }
- if {[info exists state(error)]} {
- set errorlist $state(error)
- unset state(error)
- eval error $errorlist
- }
- return $state(status)
-}
-
-# Call http_formatQuery with an even number of arguments, where the first is
-# a name, the second is a value, the third is another name, and so on.
-
-proc http_formatQuery {args} {
- set result ""
- set sep ""
- foreach i $args {
- append result $sep [httpMapReply $i]
- if {$sep != "="} {
- set sep =
- } else {
- set sep &
- }
- }
- return $result
-}
-
-# do x-www-urlencoded character mapping
-# The spec says: "non-alphanumeric characters are replaced by '%HH'"
-# 1 leave alphanumerics characters alone
-# 2 Convert every other character to an array lookup
-# 3 Escape constructs that are "special" to the tcl parser
-# 4 "subst" the result, doing all the array substitutions
-
- proc httpMapReply {string} {
- global httpFormMap
- set alphanumeric a-zA-Z0-9
- if {![info exists httpFormMap]} {
-
- for {set i 1} {$i <= 256} {incr i} {
- set c [format %c $i]
- if {![string match \[$alphanumeric\] $c]} {
- set httpFormMap($c) %[format %.2x $i]
- }
- }
- # These are handled specially
- array set httpFormMap {
- " " + \n %0d%0a
- }
- }
- regsub -all \[^$alphanumeric\] $string {$httpFormMap(&)} string
- regsub -all \n $string {\\n} string
- regsub -all \t $string {\\t} string
- regsub -all {[][{})\\]\)} $string {\\&} string
- return [subst $string]
-}
-
-# Default proxy filter.
- proc httpProxyRequired {host} {
- global http
- if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} {
- if {![info exists http(-proxyport)] || ![string length $http(-proxyport)]} {
- set http(-proxyport) 8080
- }
- return [list $http(-proxyhost) $http(-proxyport)]
- } else {
- return {}
- }
-}
diff --git a/library/http1.0/pkgIndex.tcl b/library/http1.0/pkgIndex.tcl
deleted file mode 100644
index ab6170f..0000000
--- a/library/http1.0/pkgIndex.tcl
+++ /dev/null
@@ -1,11 +0,0 @@
-# Tcl package index file, version 1.0
-# This file is generated by the "pkg_mkIndex" command
-# and sourced either when an application starts up or
-# by a "package unknown" script. It invokes the
-# "package ifneeded" command to set up package-related
-# information so that packages will be loaded automatically
-# in response to "package require" commands. When this
-# script is sourced, the variable $dir must contain the
-# full path name of this file's directory.
-
-package ifneeded http 1.0 [list tclPkgSetup $dir http 1.0 {{http.tcl source {httpCopyDone httpCopyStart httpEof httpEvent httpFinish httpMapReply httpProxyRequired http_code http_config http_data http_formatQuery http_get http_reset http_size http_status http_wait}}}]
diff --git a/library/icu.tcl b/library/icu.tcl
new file mode 100644
index 0000000..81ebe55
--- /dev/null
+++ b/library/icu.tcl
@@ -0,0 +1,145 @@
+#----------------------------------------------------------------------
+#
+# icu.tcl --
+#
+# This file implements the portions of the [tcl::unsupported::icu]
+# ensemble that are coded in Tcl.
+#
+#----------------------------------------------------------------------
+#
+# Copyright © 2024 Ashok P. Nadkarni
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+#----------------------------------------------------------------------
+
+::tcl::unsupported::loadIcu
+
+namespace eval ::tcl::unsupported::icu {
+ # Map Tcl encoding names to ICU and back. Note ICU has multiple aliases
+ # for the same encoding.
+ variable tclToIcu
+ variable icuToTcl
+
+ proc LogError {message} {
+ puts stderr $message
+ }
+
+ proc Init {} {
+ variable tclToIcu
+ variable icuToTcl
+ # There are some special cases where names do not line up
+ # at all. Map Tcl -> ICU
+ array set specialCases {
+ ebcdic ebcdic-cp-us
+ macCentEuro maccentraleurope
+ utf16 UTF16_PlatformEndian
+ utf-16be UnicodeBig
+ utf-16le UnicodeLittle
+ utf32 UTF32_PlatformEndian
+ }
+ # Ignore all errors. Do not want to hold up Tcl
+ # if ICU not available
+ if {[catch {
+ foreach tclName [encoding names] {
+ if {[catch {
+ set icuNames [aliases $tclName]
+ } erMsg]} {
+ LogError "Could not get aliases for $tclName: $erMsg"
+ continue
+ }
+ if {[llength $icuNames] == 0} {
+ # E.g. macGreek -> x-MacGreek
+ set icuNames [aliases x-$tclName]
+ if {[llength $icuNames] == 0} {
+ # Still no joy, check for special cases
+ if {[info exists specialCases($tclName)]} {
+ set icuNames [aliases $specialCases($tclName)]
+ }
+ }
+ }
+ # If the Tcl name is also an ICU name use it else use
+ # the first name which is the canonical ICU name
+ set pos [lsearch -exact -nocase $icuNames $tclName]
+ if {$pos >= 0} {
+ lappend tclToIcu($tclName) [lindex $icuNames $pos] {*}[lreplace $icuNames $pos $pos]
+ } else {
+ set tclToIcu($tclName) $icuNames
+ }
+ foreach icuName $icuNames {
+ lappend icuToTcl($icuName) $tclName
+ }
+ }
+ } errMsg]} {
+ LogError $errMsg
+ }
+ array default set tclToIcu ""
+ array default set icuToTcl ""
+
+ # Redefine ourselves to no-op.
+ proc Init {} {}
+ }
+ # Primarily used during development
+ proc MappedIcuNames {{pat *}} {
+ Init
+ variable icuToTcl
+ return [array names icuToTcl $pat]
+ }
+ # Primarily used during development
+ proc UnmappedIcuNames {{pat *}} {
+ Init
+ variable icuToTcl
+ set unmappedNames {}
+ foreach icuName [converters] {
+ if {[llength [icuToTcl $icuName]] == 0} {
+ lappend unmappedNames $icuName
+ }
+ foreach alias [aliases $icuName] {
+ if {[llength [icuToTcl $alias]] == 0} {
+ lappend unmappedNames $alias
+ }
+ }
+ }
+ # Aliases can be duplicates. Remove
+ return [lsort -unique [lsearch -inline -all $unmappedNames $pat]]
+ }
+ # Primarily used during development
+ proc UnmappedTclNames {{pat *}} {
+ Init
+ variable tclToIcu
+ set unmappedNames {}
+ foreach tclName [encoding names] {
+ # Note entry will always exist. Check if empty
+ if {[llength [tclToIcu $tclName]] == 0} {
+ lappend unmappedNames $tclName
+ }
+ }
+ return [lsearch -inline -all $unmappedNames $pat]
+ }
+
+ # Returns the Tcl equivalent of an ICU encoding name or
+ # the empty string in case not found.
+ proc icuToTcl {icuName} {
+ Init
+ proc icuToTcl {icuName} {
+ variable icuToTcl
+ return [lindex $icuToTcl($icuName) 0]
+ }
+ icuToTcl $icuName
+ }
+
+ # Returns the ICU equivalent of an Tcl encoding name or
+ # the empty string in case not found.
+ proc tclToIcu {tclName} {
+ Init
+ proc tclToIcu {tclName} {
+ variable tclToIcu
+ return [lindex $tclToIcu($tclName) 0]
+ }
+ tclToIcu $tclName
+ }
+
+
+ namespace export {[a-z]*}
+ namespace ensemble create
+}
diff --git a/library/init.tcl b/library/init.tcl
index 4aad20c..b478c0b 100644
--- a/library/init.tcl
+++ b/library/init.tcl
@@ -3,20 +3,19 @@
# Default system startup file for Tcl-based applications. Defines
# "unknown" procedure and auto-load facilities.
#
-# Copyright (c) 1991-1993 The Regents of the University of California.
-# Copyright (c) 1994-1996 Sun Microsystems, Inc.
-# Copyright (c) 1998-1999 Scriptics Corporation.
-# Copyright (c) 2004 by Kevin B. Kenny. All rights reserved.
+# Copyright © 1991-1993 The Regents of the University of California.
+# Copyright © 1994-1996 Sun Microsystems, Inc.
+# Copyright © 1998-1999 Scriptics Corporation.
+# Copyright © 2004 Kevin B. Kenny.
+# Copyright © 2018 Sean Woods
+#
+# All rights reserved.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# This test intentionally written in pre-7.5 Tcl
-if {[info commands package] == ""} {
- error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]"
-}
-package require -exact Tcl 8.5.19
+package require -exact tcl 9.1a0
# Compute the auto path to use in this interpreter.
# The values on the path come from several locations:
@@ -37,122 +36,61 @@ package require -exact Tcl 8.5.19
# tcl_pkgPath, which is set by the platform-specific initialization routines
# On UNIX it is compiled in
# On Windows, it is not used
+#
+# (Ticket 41c9857bdd) In a safe interpreter, this file does not set
+# ::auto_path (other than to {} if it is undefined). The caller, typically
+# a Safe Base command, is responsible for setting ::auto_path.
if {![info exists auto_path]} {
- if {[info exists env(TCLLIBPATH)]} {
- set auto_path $env(TCLLIBPATH)
+ if {[info exists env(TCLLIBPATH)] && (![interp issafe])} {
+ set auto_path [apply {{} {
+ lmap path $::env(TCLLIBPATH) {
+ # Paths relative to unresolvable home dirs are ignored
+ if {[catch {file tildeexpand $path} expanded_path]} {
+ continue
+ }
+ set expanded_path
+ }
+ }}]
} else {
set auto_path ""
}
}
+
namespace eval tcl {
- variable Dir
- foreach Dir [list $::tcl_library [file dirname $::tcl_library]] {
- if {$Dir ni $::auto_path} {
- lappend ::auto_path $Dir
- }
- }
- set Dir [file join [file dirname [file dirname \
- [info nameofexecutable]]] lib]
- if {$Dir ni $::auto_path} {
- lappend ::auto_path $Dir
- }
- if {[info exists ::tcl_pkgPath]} { catch {
- foreach Dir $::tcl_pkgPath {
+ if {![interp issafe]} {
+ variable Dir
+ foreach Dir [list $::tcl_library [file dirname $::tcl_library]] {
if {$Dir ni $::auto_path} {
lappend ::auto_path $Dir
}
}
- }}
-
- if {![interp issafe]} {
- variable Path [encoding dirs]
- set Dir [file join $::tcl_library encoding]
- if {$Dir ni $Path} {
- lappend Path $Dir
- encoding dirs $Path
- }
- }
-
- # TIP #255 min and max functions
- namespace eval mathfunc {
- proc min {args} {
- if {![llength $args]} {
- return -code error \
- "too few arguments to math function \"min\""
- }
- set val Inf
- foreach arg $args {
- # This will handle forcing the numeric value without
- # ruining the internal type of a numeric object
- if {[catch {expr {double($arg)}} err]} {
- return -code error $err
- }
- if {$arg < $val} {set val $arg}
- }
- return $val
+ set Dir [file join [file dirname [file dirname \
+ [info nameofexecutable]]] lib]
+ if {$Dir ni $::auto_path} {
+ lappend ::auto_path $Dir
}
- proc max {args} {
- if {![llength $args]} {
- return -code error \
- "too few arguments to math function \"max\""
- }
- set val -Inf
- foreach arg $args {
- # This will handle forcing the numeric value without
- # ruining the internal type of a numeric object
- if {[catch {expr {double($arg)}} err]} {
- return -code error $err
+ if {[info exists ::tcl_pkgPath]} { catch {
+ foreach Dir $::tcl_pkgPath {
+ if {$Dir ni $::auto_path} {
+ lappend ::auto_path $Dir
}
- if {$arg > $val} {set val $arg}
}
- return $val
- }
- namespace export min max
- }
-}
+ }}
-# Windows specific end of initialization
-
-if {(![interp issafe]) && ($tcl_platform(platform) eq "windows")} {
- namespace eval tcl {
- proc EnvTraceProc {lo n1 n2 op} {
- global env
- set x $env($n2)
- set env($lo) $x
- set env([string toupper $lo]) $x
- }
- proc InitWinEnv {} {
- global env tcl_platform
- foreach p [array names env] {
- set u [string toupper $p]
- if {$u ne $p} {
- switch -- $u {
- COMSPEC -
- PATH {
- set temp $env($p)
- unset env($p)
- set env($u) $temp
- trace add variable env($p) write \
- [namespace code [list EnvTraceProc $p]]
- trace add variable env($u) write \
- [namespace code [list EnvTraceProc $p]]
- }
- }
- }
- }
- if {![info exists env(COMSPEC)]} {
- if {$tcl_platform(os) eq "Windows NT"} {
- set env(COMSPEC) cmd.exe
- } else {
- set env(COMSPEC) command.com
- }
- }
+ variable Path [encoding dirs]
+ set Dir [file join $::tcl_library encoding]
+ if {$Dir ni $Path} {
+ lappend Path $Dir
+ encoding dirs $Path
}
- InitWinEnv
+ unset Dir Path
}
}
+namespace eval tcl::Pkg {}
+
+
# Setup the unknown package handler
@@ -171,27 +109,15 @@ if {[interp issafe]} {
# Set up the 'clock' ensemble
- namespace eval ::tcl::clock [list variable TclLibDir $::tcl_library]
-
- proc clock args {
- namespace eval ::tcl::clock [list namespace ensemble create -command \
- [uplevel 1 [list namespace origin [lindex [info level 0] 0]]] \
- -subcommands {
- add clicks format microseconds milliseconds scan seconds
- }]
-
- # Auto-loading stubs for 'clock.tcl'
-
- foreach cmd {add format scan} {
- proc ::tcl::clock::$cmd args {
- variable TclLibDir
- source -encoding utf-8 [file join $TclLibDir clock.tcl]
- return [uplevel 1 [info level 0]]
- }
+ apply {{} {
+ set cmdmap [dict create]
+ foreach cmd {add clicks format microseconds milliseconds scan seconds} {
+ dict set cmdmap $cmd ::tcl::clock::$cmd
}
-
- return [uplevel 1 [info level 0]]
- }
+ namespace inscope ::tcl::clock [list namespace ensemble create -command \
+ ::clock -map $cmdmap]
+ ::tcl::unsupported::clock::configure -init-complete
+ }}
}
# Conditionalize for presence of exec.
@@ -204,7 +130,7 @@ if {[namespace which -command exec] eq ""} {
set auto_noexec 1
}
-# Define a log command (which can be overwitten to log errors
+# Define a log command (which can be overwritten to log errors
# differently, specially when stderr is not available)
if {[namespace which -command tclLog] eq ""} {
@@ -218,11 +144,9 @@ if {[namespace which -command tclLog] eq ""} {
# exist in the interpreter. It takes the following steps to make the
# command available:
#
-# 1. See if the command has the form "namespace inscope ns cmd" and
-# if so, concatenate its arguments onto the end and evaluate it.
-# 2. See if the autoload facility can locate the command in a
+# 1. See if the autoload facility can locate the command in a
# Tcl script file. If so, load it and execute it.
-# 3. If the command was invoked interactively at top-level:
+# 2. If the command was invoked interactively at top-level:
# (a) see if the command exists as an executable UNIX program.
# If so, "exec" the command.
# (b) see if the command requests csh-like history substitution
@@ -239,22 +163,14 @@ proc unknown args {
variable ::tcl::UnknownPending
global auto_noexec auto_noload env tcl_interactive errorInfo errorCode
- # If the command word has the form "namespace inscope ns cmd"
- # then concatenate its arguments onto the end and evaluate it.
-
- set cmd [lindex $args 0]
- if {[regexp "^:*namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} {
- #return -code error "You need an {*}"
- set arglist [lrange $args 1 end]
- set ret [catch {uplevel 1 ::$cmd $arglist} result opts]
- dict unset opts -errorinfo
- dict incr opts -level
- return -options $opts $result
+ if {[info exists errorInfo]} {
+ set savedErrorInfo $errorInfo
+ }
+ if {[info exists errorCode]} {
+ set savedErrorCode $errorCode
}
- catch {set savedErrorInfo $errorInfo}
- catch {set savedErrorCode $errorCode}
- set name $cmd
+ set name [lindex $args 0]
if {![info exists auto_noload]} {
#
# Make sure we're not trying to load the same proc twice.
@@ -296,21 +212,16 @@ proc unknown args {
set errInfo [dict get $opts -errorinfo]
set errCode [dict get $opts -errorcode]
set cinfo $args
- if {[string bytelength $cinfo] > 150} {
+ if {[string length [encoding convertto utf-8 $cinfo]] > 150} {
set cinfo [string range $cinfo 0 150]
- while {[string bytelength $cinfo] > 150} {
+ while {[string length [encoding convertto utf-8 $cinfo]] > 150} {
set cinfo [string range $cinfo 0 end-1]
}
append cinfo ...
}
- append cinfo "\"\n (\"uplevel\" body line 1)"
- append cinfo "\n invoked from within"
- append cinfo "\n\"uplevel 1 \$args\""
- #
- # Try each possible form of the stack trace
- # and trim the extra contribution from the matching case
- #
- set expect "$msg\n while executing\n\"$cinfo"
+ set tail "\n (\"uplevel\" body line 1)\n invoked\
+ from within\n\"uplevel 1 \$args\""
+ set expect "$msg\n while executing\n\"$cinfo\"$tail"
if {$errInfo eq $expect} {
#
# The stack has only the eval from the expanded command
@@ -324,21 +235,32 @@ proc unknown args {
# Stack trace is nested, trim off just the contribution
# from the extra "eval" of $args due to the "catch" above.
#
- set expect "\n invoked from within\n\"$cinfo"
- set exlen [string length $expect]
- set eilen [string length $errInfo]
- set i [expr {$eilen - $exlen - 1}]
- set einfo [string range $errInfo 0 $i]
- #
- # For now verify that $errInfo consists of what we are about
- # to return plus what we expected to trim off.
- #
- if {$errInfo ne "$einfo$expect"} {
- error "Tcl bug: unexpected stack trace in \"unknown\"" {} \
- [list CORE UNKNOWN BADTRACE $einfo $expect $errInfo]
+ set last [string last $tail $errInfo]
+ if {$last + [string length $tail] != [string length $errInfo]} {
+ # Very likely cannot happen
+ return -options $opts $msg
+ }
+ set errInfo [string range $errInfo 0 $last-1]
+ set tail "\"$cinfo\""
+ set last [string last $tail $errInfo]
+ if {$last < 0 || $last + [string length $tail] != [string length $errInfo]} {
+ return -code error -errorcode $errCode \
+ -errorinfo $errInfo $msg
+ }
+ set errInfo [string range $errInfo 0 $last-1]
+ set tail "\n invoked from within\n"
+ set last [string last $tail $errInfo]
+ if {$last + [string length $tail] == [string length $errInfo]} {
+ return -code error -errorcode $errCode \
+ -errorinfo [string range $errInfo 0 $last-1] $msg
}
- return -code error -errorcode $errCode \
- -errorinfo $einfo $msg
+ set tail "\n while executing\n"
+ set last [string last $tail $errInfo]
+ if {$last + [string length $tail] == [string length $errInfo]} {
+ return -code error -errorcode $errCode \
+ -errorinfo [string range $errInfo 0 $last-1] $msg
+ }
+ return -options $opts $msg
} else {
dict incr opts -level
return -options $opts $msg
@@ -379,14 +301,14 @@ proc unknown args {
return -options $::tcl::UnknownOptions $::tcl::UnknownResult
}
- set ret [catch {set candidates [info commands $name*]} msg]
+ set ret [catch [list uplevel 1 [list info commands $name*]] candidates]
if {$name eq "::"} {
set name ""
}
if {$ret != 0} {
dict append opts -errorinfo \
"\n (expanding command prefix \"$name\" in unknown)"
- return -options $opts $msg
+ return -options $opts $candidates
}
# Filter out bogus matches when $name contained
# a glob-special char [Bug 946952]
@@ -412,7 +334,8 @@ proc unknown args {
return -code error "ambiguous command name \"$name\": [lsort $cmds]"
}
}
- return -code error "invalid command name \"$name\""
+ return -code error -errorcode [list TCL LOOKUP COMMAND $name] \
+ "invalid command name \"$name\""
}
# auto_load --
@@ -430,16 +353,20 @@ proc unknown args {
proc auto_load {cmd {namespace {}}} {
global auto_index auto_path
+ # qualify names:
if {$namespace eq ""} {
set namespace [uplevel 1 [list ::namespace current]]
}
set nameList [auto_qualify $cmd $namespace]
# workaround non canonical auto_index entries that might be around
# from older auto_mkindex versions
- lappend nameList $cmd
- foreach name $nameList {
+ if {$cmd ni $nameList} {lappend nameList $cmd}
+
+ # try to load (and create sub-cmd handler "_sub_load_cmd" for further usage):
+ foreach name $nameList [set _sub_load_cmd {
+ # via auto_index:
if {[info exists auto_index($name)]} {
- namespace eval :: $auto_index($name)
+ namespace inscope :: $auto_index($name)
# There's a couple of ways to look for a command of a given
# name. One is to use
# info commands $name
@@ -451,25 +378,38 @@ proc auto_load {cmd {namespace {}}} {
return 1
}
}
- }
+ }]
+
+ # load auto_index if possible:
if {![info exists auto_path]} {
return 0
}
-
if {![auto_load_index]} {
return 0
}
- foreach name $nameList {
- if {[info exists auto_index($name)]} {
- namespace eval :: $auto_index($name)
- if {[namespace which -command $name] ne ""} {
- return 1
- }
- }
- }
+
+ # try again (something new could be loaded):
+ foreach name $nameList $_sub_load_cmd
+
return 0
}
+# ::tcl::Pkg::source --
+# This procedure provides an alternative "source" command, which doesn't
+# register the file for the "package files" command. Safe interpreters
+# don't have to do anything special.
+#
+# Arguments:
+# filename
+
+proc ::tcl::Pkg::source {filename} {
+ if {[interp issafe]} {
+ uplevel 1 [list ::source $filename]
+ } else {
+ uplevel 1 [list ::source -nopkg $filename]
+ }
+}
+
# auto_load_index --
# Loads the contents of tclIndex files on the auto_path directory
# list. This is usually invoked within auto_load to load the index
@@ -501,7 +441,7 @@ proc auto_load_index {} {
continue
} else {
set error [catch {
- fconfigure $f -eofchar "\032 {}"
+ fconfigure $f -encoding utf-8 -eofchar \x1A
set id [gets $f]
if {$id eq "# Tcl autoload index file, version 2.0"} {
eval [read $f]
@@ -513,7 +453,7 @@ proc auto_load_index {} {
}
set name [lindex $line 0]
set auto_index($name) \
- "source [file join $dir [lindex $line 1]]"
+ "::tcl::Pkg::source [file join $dir [lindex $line 1]]"
}
} else {
error "[file join $dir tclIndex] isn't a proper Tcl index file"
@@ -614,12 +554,12 @@ proc auto_import {pattern} {
auto_load_index
foreach pattern $patternList {
- foreach name [array names auto_index $pattern] {
- if {([namespace which -command $name] eq "")
+ foreach name [array names auto_index $pattern] {
+ if {([namespace which -command $name] eq "")
&& ([namespace qualifiers $pattern] eq [namespace qualifiers $name])} {
- namespace eval :: $auto_index($name)
- }
- }
+ namespace inscope :: $auto_index($name)
+ }
+ }
}
}
@@ -650,8 +590,10 @@ proc auto_execok name {
}
set auto_execs($name) ""
- set shellBuiltins [list assoc cls copy date del dir echo erase exit ftype \
- md mkdir mklink move rd ren rename rmdir start time type ver vol]
+ set shellBuiltins [list assoc call cd cls color copy date del dir echo \
+ erase exit ftype for if md mkdir mklink move path \
+ pause prompt rd ren rename rmdir set start time \
+ title type ver vol]
if {[info exists env(PATHEXT)]} {
# Add an initial ; to have the {} extension check first.
set execExtensions [split ";$env(PATHEXT)" ";"]
@@ -680,17 +622,14 @@ proc auto_execok name {
return ""
}
- set path "[file dirname [info nameof]];.;"
+ set path "[file dirname [info nameofexecutable]];.;"
if {[info exists env(SystemRoot)]} {
set windir $env(SystemRoot)
} elseif {[info exists env(WINDIR)]} {
set windir $env(WINDIR)
}
if {[info exists windir]} {
- if {$tcl_platform(os) eq "Windows NT"} {
- append path "$windir/system32;"
- }
- append path "$windir/system;$windir;"
+ append path "$windir/system32;$windir/system;$windir;"
}
foreach var {PATH Path path} {
@@ -788,7 +727,7 @@ proc tcl::CopyDirectory {action src dest} {
# the following code is now commented out.
#
# return -code error "error $action \"$src\" to\
- # \"$dest\": file already exists"
+ # \"$dest\": file exists"
} else {
# Depending on the platform, and on the current
# working directory, the directories '.', '..'
@@ -800,7 +739,7 @@ proc tcl::CopyDirectory {action src dest} {
foreach s $existing {
if {[file tail $s] ni {. ..}} {
return -code error "error $action \"$src\" to\
- \"$dest\": file already exists"
+ \"$dest\": file exists"
}
}
}
diff --git a/library/install.tcl b/library/install.tcl
new file mode 100644
index 0000000..5613583
--- /dev/null
+++ b/library/install.tcl
@@ -0,0 +1,247 @@
+###
+# Installer actions built into tclsh and invoked
+# if the first command line argument is "install"
+###
+if {[llength $argv] < 2} {
+ exit 0
+}
+namespace eval ::practcl {}
+###
+# Installer tools
+###
+proc ::practcl::_isdirectory name {
+ return [file isdirectory $name]
+}
+###
+# Return true if the pkgindex file contains
+# any statement other than "package ifneeded"
+# and/or if any package ifneeded loads a DLL
+###
+proc ::practcl::_pkgindex_directory {path} {
+ set buffer {}
+ set pkgidxfile [file join $path pkgIndex.tcl]
+ if {![file exists $pkgidxfile]} {
+ # No pkgIndex file, read the source
+ foreach file [glob -nocomplain $path/*.tm] {
+ set file [file normalize $file]
+ set fname [file rootname [file tail $file]]
+ ###
+ # We used to be able to ... Assume the package is correct in the filename
+ # No hunt for a "package provides"
+ ###
+ set package [lindex [split $fname -] 0]
+ set version [lindex [split $fname -] 1]
+ ###
+ # Read the file, and override assumptions as needed
+ ###
+ set fin [open $file r]
+ fconfigure $fin -encoding utf-8 -eofchar \x1A
+ set dat [read $fin]
+ close $fin
+ # Look for a teapot style Package statement
+ foreach line [split $dat \n] {
+ set line [string trim $line]
+ if { [string range $line 0 9] != "# Package " } continue
+ set package [lindex $line 2]
+ set version [lindex $line 3]
+ break
+ }
+ # Look for a package provide statement
+ foreach line [split $dat \n] {
+ set line [string trim $line]
+ if { [string range $line 0 14] != "package provide" } continue
+ set package [lindex $line 2]
+ set version [lindex $line 3]
+ break
+ }
+ append buffer "package ifneeded $package $version \[list source \[file join \$dir [file tail $file]\]\]" \n
+ }
+ foreach file [glob -nocomplain $path/*.tcl] {
+ if { [file tail $file] == "version_info.tcl" } continue
+ set fin [open $file r]
+ fconfigure $fin -encoding utf-8 -eofchar \x1A
+ set dat [read $fin]
+ close $fin
+ if {![regexp "package provide" $dat]} continue
+ set fname [file rootname [file tail $file]]
+ # Look for a package provide statement
+ foreach line [split $dat \n] {
+ set line [string trim $line]
+ if { [string range $line 0 14] != "package provide" } continue
+ set package [lindex $line 2]
+ set version [lindex $line 3]
+ if {[string index $package 0] in "\$ \[ @"} continue
+ if {[string index $version 0] in "\$ \[ @"} continue
+ append buffer "package ifneeded $package $version \[list source \[file join \$dir [file tail $file]\]\]" \n
+ break
+ }
+ }
+ return $buffer
+ }
+ set fin [open $pkgidxfile r]
+ fconfigure $fin -encoding utf-8 -eofchar \x1A
+ set dat [read $fin]
+ close $fin
+ set trace 0
+ #if {[file tail $path] eq "tool"} {
+ # set trace 1
+ #}
+ set thisline {}
+ foreach line [split $dat \n] {
+ append thisline $line \n
+ if {![info complete $thisline]} continue
+ set line [string trim $line]
+ if {[string length $line]==0} {
+ set thisline {} ; continue
+ }
+ if {[string index $line 0] eq "#"} {
+ set thisline {} ; continue
+ }
+ if {[regexp "if.*catch.*package.*Tcl.*return" $thisline]} {
+ if {$trace} {puts "[file dirname $pkgidxfile] Ignoring $thisline"}
+ set thisline {} ; continue
+ }
+ if {[regexp "if.*package.*vsatisfies.*package.*provide.*return" $thisline]} {
+ if {$trace} { puts "[file dirname $pkgidxfile] Ignoring $thisline" }
+ set thisline {} ; continue
+ }
+ if {![regexp "package.*ifneeded" $thisline]} {
+ # This package index contains arbitrary code
+ # source instead of trying to add it to the main
+ # package index
+ if {$trace} { puts "[file dirname $pkgidxfile] Arbitrary code $thisline" }
+ return {source [file join $dir pkgIndex.tcl]}
+ }
+ append buffer $thisline \n
+ set thisline {}
+ }
+ if {$trace} {puts [list [file dirname $pkgidxfile] $buffer]}
+ return $buffer
+}
+
+
+proc ::practcl::_pkgindex_path_subdir {path} {
+ set result {}
+ foreach subpath [glob -nocomplain [file join $path *]] {
+ if {[file isdirectory $subpath]} {
+ lappend result $subpath {*}[_pkgindex_path_subdir $subpath]
+ }
+ }
+ return $result
+}
+###
+# Index all paths given as though they will end up in the same
+# virtual file system
+###
+proc ::practcl::pkgindex_path args {
+ set stack {}
+ set buffer {
+lappend ::PATHSTACK $dir
+ }
+ foreach base $args {
+ set base [file normalize $base]
+ set paths {}
+ foreach dir [glob -nocomplain [file join $base *]] {
+ if {[file tail $dir] eq "teapot"} continue
+ lappend paths $dir {*}[::practcl::_pkgindex_path_subdir $dir]
+ }
+ set i [string length $base]
+ # Build a list of all of the paths
+ if {[llength $paths]} {
+ foreach path $paths {
+ if {$path eq $base} continue
+ set path_indexed($path) 0
+ }
+ } else {
+ puts [list WARNING: NO PATHS FOUND IN $base]
+ }
+ set path_indexed($base) 1
+ set path_indexed([file join $base boot tcl]) 1
+ foreach teapath [glob -nocomplain [file join $base teapot *]] {
+ set pkg [file tail $teapath]
+ append buffer [list set pkg $pkg]
+ append buffer {
+set pkginstall [file join $::g(HOME) teapot $pkg]
+if {![file exists $pkginstall]} {
+ installDir [file join $dir teapot $pkg] $pkginstall
+}
+}
+ }
+ foreach path $paths {
+ if {$path_indexed($path)} continue
+ set thisdir [file_relative $base $path]
+ set idxbuf [::practcl::_pkgindex_directory $path]
+ if {[string length $idxbuf]} {
+ incr path_indexed($path)
+ append buffer "set dir \[set PKGDIR \[file join \[lindex \$::PATHSTACK end\] $thisdir\]\]" \n
+ append buffer [string map {$dir $PKGDIR} [string trimright $idxbuf]] \n
+ }
+ }
+ }
+ append buffer {
+set dir [lindex $::PATHSTACK end]
+set ::PATHSTACK [lrange $::PATHSTACK 0 end-1]
+}
+ return $buffer
+}
+
+###
+# topic: 64319f4600fb63c82b2258d908f9d066
+# description: Script to build the VFS file system
+###
+proc ::practcl::installDir {d1 d2} {
+
+ puts [format {%*sCreating %s} [expr {4 * [info level]}] {} [file tail $d2]]
+ file delete -force -- $d2
+ file mkdir $d2
+
+ foreach ftail [glob -directory $d1 -nocomplain -tails *] {
+ set f [file join $d1 $ftail]
+ if {[file isdirectory $f] && [string compare CVS $ftail]} {
+ installDir $f [file join $d2 $ftail]
+ } elseif {[file isfile $f]} {
+ file copy -force $f [file join $d2 $ftail]
+ if {$::tcl_platform(platform) eq {unix}} {
+ file attributes [file join $d2 $ftail] -permissions 0o644
+ } else {
+ file attributes [file join $d2 $ftail] -readonly 1
+ }
+ }
+ }
+
+ if {$::tcl_platform(platform) eq {unix}} {
+ file attributes $d2 -permissions 0o755
+ } else {
+ file attributes $d2 -readonly 1
+ }
+}
+
+proc ::practcl::copyDir {d1 d2 {toplevel 1}} {
+ #if {$toplevel} {
+ # puts [list ::practcl::copyDir $d1 -> $d2]
+ #}
+ #file delete -force -- $d2
+ file mkdir $d2
+
+ foreach ftail [glob -directory $d1 -nocomplain -tails *] {
+ set f [file join $d1 $ftail]
+ if {[file isdirectory $f] && [string compare CVS $ftail]} {
+ copyDir $f [file join $d2 $ftail] 0
+ } elseif {[file isfile $f]} {
+ file copy -force $f [file join $d2 $ftail]
+ }
+ }
+}
+
+switch [lindex $argv 1] {
+ mkzip {
+ zipfs mkzip {*}[lrange $argv 2 end]
+ }
+ mkzip {
+ zipfs mkimg {*}[lrange $argv 2 end]
+ }
+ default {
+ ::practcl::[lindex $argv 1] {*}[lrange $argv 2 end]
+ }
+}
+exit 0
diff --git a/library/manifest.txt b/library/manifest.txt
new file mode 100644
index 0000000..24b04e2
--- /dev/null
+++ b/library/manifest.txt
@@ -0,0 +1,19 @@
+###
+# Package manifest for all Tcl packages included in the /library file system
+###
+apply {{dir} {
+ set isafe [interp issafe]
+ foreach {safe package version file} {
+ 0 http 2.10.0 {http http.tcl}
+ 1 msgcat 1.7.1 {msgcat msgcat.tcl}
+ 1 opt 0.4.9 {opt optparse.tcl}
+ 0 cookiejar 0.2.0 {cookiejar cookiejar.tcl}
+ 0 tcl::idna 1.0.1 {cookiejar idna.tcl}
+ 0 platform 1.0.19 {platform platform.tcl}
+ 0 platform::shell 1.1.4 {platform shell.tcl}
+ 1 tcltest 2.5.9 {tcltest tcltest.tcl}
+ } {
+ if {$isafe && !$safe} continue
+ package ifneeded $package $version [list source [file join $dir {*}$file]]
+ }
+}} $dir
diff --git a/library/msgcat/msgcat.tcl b/library/msgcat/msgcat.tcl
index cf3b9d7..decf1d2 100644
--- a/library/msgcat/msgcat.tcl
+++ b/library/msgcat/msgcat.tcl
@@ -4,35 +4,51 @@
# message catalog facility for Tcl programs. It should be
# loaded with the command "package require msgcat".
#
-# Copyright (c) 1998-2000 by Ajuba Solutions.
-# Copyright (c) 1998 by Mark Harrison.
+# Copyright © 2010-2018 Harald Oehlmann.
+# Copyright © 1998-2000 Ajuba Solutions.
+# Copyright © 1998 Mark Harrison.
#
# 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.5
+# We use oo::define::self, which is new in Tcl 8.7
+package require Tcl 8.7-
# When the version number changes, be sure to update the pkgIndex.tcl file,
# and the installation directory in the Makefiles.
-package provide msgcat 1.5.2
+package provide msgcat 1.7.1
namespace eval msgcat {
- namespace export mc mcload mclocale mcmax mcmset mcpreferences mcset \
- mcunknown mcflset mcflmset
-
- # Records the current locale as passed to mclocale
- variable Locale ""
+ namespace export mc mcn mcexists mcload mclocale mcmax\
+ mcmset mcpreferences mcset\
+ mcunknown mcflset mcflmset mcloadedlocales mcforgetpackage\
+ mcpackagenamespaceget mcpackageconfig mcpackagelocale mcutil
# Records the list of locales to search
variable Loclist {}
+ # List of currently loaded locales
+ variable LoadedLocales {}
+
# Records the locale of the currently sourced message catalogue file
variable FileLocale
+ # Configuration values per Package (e.g. client namespace).
+ # The dict key is of the form "<option> <namespace>" and the value is the
+ # configuration option. A non-existing key is an unset option.
+ variable PackageConfig [dict create mcfolder {} loadcmd {} changecmd {}\
+ unknowncmd {} loadedlocales {} loclist {}]
+
# Records the mapping between source strings and translated strings. The
- # dict key is of the form "<locale> <namespace> <src>", where locale and
+ # dict key is of the form "<namespace> <locale> <src>", where locale and
# namespace should be themselves dict values and the value is
# the translated string.
variable Msgs [dict create]
+}
+
+# create ensemble namespace for mcutil command
+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"} {
@@ -171,8 +187,10 @@ namespace eval msgcat {
# Find the translation for the given string based on the current
# locale setting. Check the local namespace first, then look in each
# parent namespace until the source is found. If additional args are
-# specified, use the format command to work them into the traslated
+# specified, use the format command to work them into the translated
# string.
+# If no catalog item is found, mcunknown is called in the caller frame
+# and its result is returned.
#
# Arguments:
# src The string to translate.
@@ -182,31 +200,115 @@ namespace eval msgcat {
# Returns the translated string. Propagates errors thrown by the
# format command.
-proc msgcat::mc {src args} {
+proc msgcat::mc {args} {
+ tailcall mcn [PackageNamespaceGet] {*}$args
+}
+
+# msgcat::mcn --
+#
+# Find the translation for the given string based on the current
+# locale setting. Check the passed namespace first, then look in each
+# parent namespace until the source is found. If additional args are
+# specified, use the format command to work them into the translated
+# string.
+#
+# If no catalog item is found, mcunknown is called in the caller frame
+# and its result is returned.
+#
+# Arguments:
+# ns Package namespace of the translation
+# src The string to translate.
+# args Args to pass to the format command
+#
+# Results:
+# Returns the translated string. Propagates errors thrown by the
+# format command.
+
+proc msgcat::mcn {ns src args} {
+
# Check for the src in each namespace starting from the local and
# ending in the global.
variable Msgs
variable Loclist
- variable Locale
- set ns [uplevel 1 [list ::namespace current]]
+ set loclist [PackagePreferences $ns]
+
+ set nscur $ns
+ while {$nscur != ""} {
+ foreach loc $loclist {
+ if {[dict exists $Msgs $nscur $loc $src]} {
+ return [DefaultUnknown "" [dict get $Msgs $nscur $loc $src]\
+ {*}$args]
+ }
+ }
+ set nscur [namespace parent $nscur]
+ }
+ # call package local or default unknown command
+ set args [linsert $args 0 [lindex $loclist 0] $src]
+ switch -exact -- [Invoke unknowncmd $args $ns result 1] {
+ 0 { tailcall mcunknown {*}$args }
+ 1 { return [DefaultUnknown {*}$args] }
+ default { return $result }
+ }
+}
+
+# msgcat::mcexists --
+#
+# Check if a catalog item is set or if mc would invoke mcunknown.
+#
+# Arguments:
+# -exactnamespace Only check the exact namespace and no
+# parent namespaces
+# -exactlocale Only check the exact locale and not all members
+# of the preferences list
+# src Message catalog key
+#
+# Results:
+# true if an adequate catalog key was found
+
+proc msgcat::mcexists {args} {
- while {$ns != ""} {
- foreach loc $Loclist {
- if {[dict exists $Msgs $loc $ns $src]} {
- if {[llength $args] == 0} {
- return [dict get $Msgs $loc $ns $src]
- } else {
- return [format [dict get $Msgs $loc $ns $src] {*}$args]
+ variable Msgs
+ variable Loclist
+ variable PackageConfig
+
+ while {[llength $args] != 1} {
+ set args [lassign $args option]
+ switch -glob -- $option {
+ -exactnamespace - -exactlocale { set $option 1 }
+ -namespace {
+ if {[llength $args] < 2} {
+ return -code error\
+ "Argument missing for switch \"-namespace\""
}
+ set args [lassign $args ns]
+ }
+ -* { return -code error "unknown option \"$option\"" }
+ default {
+ return -code error "wrong # args: should be\
+ \"[lindex [info level 0] 0] ?-exactnamespace?\
+ ?-exactlocale? ?-namespace ns? src\""
}
}
+ }
+ set src [lindex $args 0]
+
+ if {![info exists ns]} { set ns [PackageNamespaceGet] }
+
+ set loclist [PackagePreferences $ns]
+ if {[info exists -exactlocale]} { set loclist [lrange $loclist 0 0] }
+
+ while {$ns ne ""} {
+ foreach loc $loclist {
+ if {[dict exists $Msgs $ns $loc $src]} {
+ return 1
+ }
+ }
+ if {[info exists -exactnamespace]} {return 0}
set ns [namespace parent $ns]
}
- # we have not found the translation
- return [uplevel 1 [list [namespace origin mcunknown] \
- $Locale $src {*}$args]]
+ return 0
}
# msgcat::mclocale --
@@ -219,11 +321,11 @@ proc msgcat::mc {src args} {
# separated by underscores (e.g. en_US).
#
# Results:
-# Returns the current locale.
+# Returns the normalized set locale.
proc msgcat::mclocale {args} {
variable Loclist
- variable Locale
+ variable LoadedLocales
set len [llength $args]
if {$len > 1} {
@@ -232,24 +334,46 @@ proc msgcat::mclocale {args} {
}
if {$len == 1} {
- set newLocale [lindex $args 0]
+ set newLocale [string tolower [lindex $args 0]]
if {$newLocale ne [file tail $newLocale]} {
return -code error "invalid newLocale value \"$newLocale\":\
could be path to unsafe code."
}
- set Locale [string tolower $newLocale]
- set Loclist {}
- set word ""
- foreach part [split $Locale _] {
- set word [string trim "${word}_${part}" _]
- if {$word ne [lindex $Loclist 0]} {
- set Loclist [linsert $Loclist 0 $word]
- }
+ mcpreferences {*}[mcutil getpreferences $newLocale]
+ }
+ return [lindex $Loclist 0]
+}
+
+# msgcat::mcutil::getpreferences --
+#
+# Get list of locales from a locale.
+# The first element is always the lowercase locale.
+# Other elements have one component separated by "_" less.
+# Multiple "_" are seen as one separator: de__ch_spec de__ch de {}
+#
+# This method is part of the ensemble mcutil
+#
+# Arguments:
+# Locale.
+#
+# Results:
+# Locale list
+
+proc msgcat::mcutil::getpreferences {locale} {
+ set locale [string tolower $locale]
+ set result [list {}]
+ set el {}
+ foreach e [split $locale _] {
+ if {$el eq {}} {
+ set el ${e}
+ } else {
+ set el ${el}_${e}
+ }
+ if {[string index $el end] != {_}} {
+ set result [linsert $result 0 $el]
}
- lappend Loclist {}
- set Locale [lindex $Loclist 0]
}
- return $Locale
+ return $result
}
# msgcat::mcpreferences --
@@ -258,16 +382,475 @@ proc msgcat::mclocale {args} {
# most preferred to least preferred.
#
# Arguments:
-# None.
+# New location list
#
# Results:
# Returns an ordered list of the locales preferred by the user.
-proc msgcat::mcpreferences {} {
+proc msgcat::mcpreferences {args} {
+ variable Loclist
+
+ if {[llength $args] > 0} {
+ # args is the new loclist
+ if {![ListEqualString $args $Loclist]} {
+ set Loclist $args
+
+ # locale not loaded jet
+ LoadAll $Loclist
+ # Invoke callback
+ Invoke changecmd $Loclist
+ }
+ }
+ return $Loclist
+}
+
+# msgcat::ListStringEqual --
+#
+# Compare two strings for equal string contents
+#
+# Arguments:
+# list1 first list
+# list2 second list
+#
+# Results:
+# 1 if lists of strings are identical, 0 otherwise
+
+proc msgcat::ListEqualString {list1 list2} {
+ if {[llength $list1] != [llength $list2]} {
+ return 0
+ }
+ foreach item1 $list1 item2 $list2 {
+ if {$item1 ne $item2} {
+ return 0
+ }
+ }
+ return 1
+}
+
+# msgcat::mcloadedlocales --
+#
+# Get or change the list of currently loaded default locales
+#
+# The following subcommands are available:
+# loaded
+# Get the current list of loaded locales
+# clear
+# Remove all loaded locales not present in mcpreferences.
+#
+# Arguments:
+# subcommand One of loaded or clear
+#
+# Results:
+# Empty string, if not stated differently for the subcommand
+
+proc msgcat::mcloadedlocales {subcommand} {
+ variable Loclist
+ variable LoadedLocales
+ variable Msgs
+ variable PackageConfig
+ switch -exact -- $subcommand {
+ clear {
+ # Remove all locales not contained in Loclist
+ # skip any packages with package locale
+ set LoadedLocales $Loclist
+ foreach ns [dict keys $Msgs] {
+ if {![dict exists $PackageConfig loclist $ns]} {
+ foreach locale [dict keys [dict get $Msgs $ns]] {
+ if {$locale ni $Loclist} {
+ dict unset Msgs $ns $locale
+ }
+ }
+ }
+ }
+ }
+ loaded { return $LoadedLocales }
+ default {
+ return -code error "unknown subcommand \"$subcommand\": must be\
+ clear, or loaded"
+ }
+ }
+ return
+}
+
+# msgcat::mcpackagelocale --
+#
+# Get or change the package locale of the calling package.
+#
+# The following subcommands are available:
+# set
+# Set a package locale.
+# This may load message catalog files and may clear message catalog
+# items, if the former locale was the default locale.
+# Returns the normalized set locale.
+# The default locale is taken, if locale is not given.
+# get
+# Get the locale valid for this package.
+# isset
+# Returns true, if a package locale is set
+# unset
+# Unset the package locale and activate the default locale.
+# This loads message catalog file which where missing in the package
+# locale.
+# preferences
+# Return locale preference list valid for the package.
+# loaded
+# Return loaded locale list valid for the current package.
+# clear
+# If the current package has a package locale, remove all package
+# locales not containes in package mcpreferences.
+# It is an error to call this without a package locale set.
+#
+# The subcommands get, preferences and loaded return the corresponding
+# default data, if no package locale is set.
+#
+# Arguments:
+# subcommand see list above
+# locale package locale (only set subcommand)
+#
+# Results:
+# Empty string, if not stated differently for the subcommand
+
+proc msgcat::mcpackagelocale {subcommand args} {
+ # todo: implement using an ensemble
+ variable Loclist
+ variable LoadedLocales
+ variable Msgs
+ variable PackageConfig
+ # Check option
+ # check if required item is exactly provided
+ if { [llength $args] > 0
+ && $subcommand in {"get" "isset" "unset" "loaded" "clear"} } {
+ return -code error "wrong # args: should be\
+ \"[lrange [info level 0] 0 1]\""
+ }
+ set ns [PackageNamespaceGet]
+
+ switch -exact -- $subcommand {
+ get { return [lindex [PackagePreferences $ns] 0] }
+ loaded { return [PackageLocales $ns] }
+ present {
+ if {[llength $args] != 1} {
+ return -code error "wrong # args: should be\
+ \"[lrange [info level 0] 0 1] locale\""
+ }
+ return [expr {[string tolower [lindex $args 0]]
+ in [PackageLocales $ns]} ]
+ }
+ isset { return [dict exists $PackageConfig loclist $ns] }
+ 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\
+ \"[lrange [info level 0] 0 1] ?locale?\""
+ }
+
+ # > Return preferences if no parameter
+ if {!$fSet && 0 == [llength $args] } {
+ return [PackagePreferences $ns]
+ }
+
+ # Copy the default locale if no package locale set so far
+ if {![dict exists $PackageConfig loclist $ns]} {
+ dict set PackageConfig loclist $ns $Loclist
+ dict set PackageConfig loadedlocales $ns $LoadedLocales
+ }
+
+ # No argument for set: return current package locale
+ # The difference to no argument and subcommand "preferences" is,
+ # that "preferences" does not set the package locale property.
+ # This case is processed above, so no check for fSet here
+ if { 0 == [llength $args] } {
+ return [lindex [dict get $PackageConfig loclist $ns] 0]
+ }
+
+ # Get new loclist
+ if {$fSet} {
+ set loclist [mcutil getpreferences [lindex $args 0]]
+ } else {
+ set loclist $args
+ }
+
+ # Check if not changed to return imediately
+ if { [ListEqualString $loclist\
+ [dict get $PackageConfig loclist $ns]] } {
+ if {$fSet} {
+ return [lindex $loclist 0]
+ }
+ return $loclist
+ }
+
+ # Change loclist
+ dict set PackageConfig loclist $ns $loclist
+
+ # load eventual missing locales
+ set loadedLocales [dict get $PackageConfig loadedlocales $ns]
+ set loadLocales [ListComplement $loadedLocales $loclist]
+ dict set PackageConfig loadedlocales $ns\
+ [concat $loadedLocales $loadLocales]
+ Load $ns $loadLocales
+ if {$fSet} {
+ return [lindex $loclist 0]
+ }
+ return $loclist
+ }
+ clear { # Remove all locales not contained in Loclist
+ if {![dict exists $PackageConfig loclist $ns]} {
+ return -code error "clear only when package locale set"
+ }
+ set loclist [dict get $PackageConfig loclist $ns]
+ dict set PackageConfig loadedlocales $ns $loclist
+ if {[dict exists $Msgs $ns]} {
+ foreach locale [dict keys [dict get $Msgs $ns]] {
+ if {$locale ni $loclist} {
+ dict unset Msgs $ns $locale
+ }
+ }
+ }
+ }
+ unset { # unset package locale and restore default locales
+
+ if { ![dict exists $PackageConfig loclist $ns] } { return }
+
+ # unset package locale
+ set loadLocales [ListComplement\
+ [dict get $PackageConfig loadedlocales $ns] $LoadedLocales]
+ dict unset PackageConfig loadedlocales $ns
+ dict unset PackageConfig loclist $ns
+
+ # unset keys not in global loaded locales
+ if {[dict exists $Msgs $ns]} {
+ foreach locale [dict keys [dict get $Msgs $ns]] {
+ if {$locale ni $LoadedLocales} {
+ dict unset Msgs $ns $locale
+ }
+ }
+ }
+
+ # Add missing locales
+ Load $ns $loadLocales
+ }
+ default {
+ return -code error "unknown subcommand \"$subcommand\": must be\
+ clear, get, isset, loaded, present, set, or unset"
+ }
+ }
+ return
+}
+
+# msgcat::mcforgetpackage --
+#
+# Remove any data of the calling package from msgcat
+#
+
+proc msgcat::mcforgetpackage {} {
+ # todo: this may be implemented using an ensemble
+ variable PackageConfig
+ variable Msgs
+ set ns [PackageNamespaceGet]
+ # Remove MC items
+ dict unset Msgs $ns
+ # Remove config items
+ foreach key [dict keys $PackageConfig] {
+ dict unset PackageConfig $key $ns
+ }
+ return
+}
+
+# msgcat::mcgetmynamespace --
+#
+# Return the package namespace of the caller
+# This consideres to be called from a class or object.
+
+proc msgcat::mcpackagenamespaceget {} {
+ return [PackageNamespaceGet]
+}
+
+# msgcat::mcpackageconfig --
+#
+# Get or modify the per caller namespace (e.g. packages) config options.
+#
+# Available subcommands are:
+#
+# get get the current value or an error if not set.
+# isset return true, if the option is set
+# set set the value (see also distinct option).
+# Returns the number of loaded message files.
+# unset Clear option. return "".
+#
+# Available options are:
+#
+# mcfolder
+# The message catalog folder of the package.
+# This is automatically set by mcload.
+# If the value is changed using the set subcommand, an eventual
+# loadcmd is invoked and all message files of the package locale are
+# loaded.
+#
+# loadcmd
+# The command gets executed before a message file would be
+# sourced for this module.
+# The command is invoked with the expanded locale list to load.
+# The command is not invoked if the registering package namespace
+# is not present.
+# This callback might also be used as an alternative to message
+# files.
+# If the value is changed using the set subcommand, the callback is
+# directly invoked with the current file locale list. No file load is
+# executed.
+#
+# changecmd
+# The command is invoked, after an executed locale change.
+# Appended argument is expanded mcpreferences.
+#
+# unknowncmd
+# Use a package locale mcunknown procedure instead the global one.
+# The appended arguments are identical to mcunknown.
+# A default unknown handler is used if set to the empty string.
+# This consists in returning the key if no arguments are given.
+# With given arguments, format is used to process the arguments.
+#
+# Arguments:
+# subcommand Operation on the package
+# option The package option to get or set.
+# ?value? Eventual value for the subcommand
+#
+# Results:
+# Depends on the subcommand and option and is described there
+
+proc msgcat::mcpackageconfig {subcommand option {value ""}} {
+ variable PackageConfig
+ # get namespace
+ set ns [PackageNamespaceGet]
+
+ if {$option ni {"mcfolder" "loadcmd" "changecmd" "unknowncmd"}} {
+ return -code error "bad option \"$option\": must be mcfolder, loadcmd,\
+ changecmd, or unknowncmd"
+ }
+
+ # check if value argument is exactly provided
+ if {[llength [info level 0]] == 4 } {
+ # value provided
+ if {$subcommand in {"get" "isset" "unset"}} {
+ return -code error "wrong # args: should be\
+ \"[lrange [info level 0] 0 2] value\""
+ }
+ } elseif {$subcommand eq "set"} {
+ return -code error\
+ "wrong # args: should be \"[lrange [info level 0] 0 2]\""
+ }
+
+ # Execute subcommands
+ switch -exact -- $subcommand {
+ get { # Operation get return current value
+ if {![dict exists $PackageConfig $option $ns]} {
+ return -code error "package option \"$option\" not set"
+ }
+ return [dict get $PackageConfig $option $ns]
+ }
+ isset { return [dict exists $PackageConfig $option $ns] }
+ unset { dict unset PackageConfig $option $ns }
+ set { # Set option
+
+ if {$option eq "mcfolder"} {
+ set value [file normalize $value]
+ }
+ # Check if changed
+ if { [dict exists $PackageConfig $option $ns]
+ && $value eq [dict get $PackageConfig $option $ns] } {
+ return 0
+ }
+
+ # set new value
+ dict set PackageConfig $option $ns $value
+
+ # Reload pending message catalogs
+ switch -exact -- $option {
+ mcfolder { return [Load $ns [PackageLocales $ns]] }
+ loadcmd { return [Load $ns [PackageLocales $ns] 1] }
+ }
+ return 0
+ }
+ default {
+ return -code error "unknown subcommand \"$subcommand\":\
+ must be get, isset, set, or unset"
+ }
+ }
+ return
+}
+
+# msgcat::PackagePreferences --
+#
+# Return eventual present package preferences or the default list if not
+# present.
+#
+# Arguments:
+# ns Package namespace
+#
+# Results:
+# locale list
+
+proc msgcat::PackagePreferences {ns} {
+ variable PackageConfig
+ if {[dict exists $PackageConfig loclist $ns]} {
+ return [dict get $PackageConfig loclist $ns]
+ }
variable Loclist
return $Loclist
}
+# msgcat::PackageLocales --
+#
+# Return eventual present package locales or the default list if not
+# present.
+#
+# Arguments:
+# ns Package namespace
+#
+# Results:
+# locale list
+
+proc msgcat::PackageLocales {ns} {
+ variable PackageConfig
+ if {[dict exists $PackageConfig loadedlocales $ns]} {
+ return [dict get $PackageConfig loadedlocales $ns]
+ }
+ variable LoadedLocales
+ return $LoadedLocales
+}
+
+# msgcat::ListComplement --
+#
+# Build the complement of two lists.
+# Return a list with all elements in list2 but not in list1.
+# Optionally return the intersection.
+#
+# Arguments:
+# list1 excluded list
+# list2 included list
+# inlistname If not "", write in this variable the intersection list
+#
+# Results:
+# list with all elements in list2 but not in list1
+
+proc msgcat::ListComplement {list1 list2 {inlistname ""}} {
+ if {"" ne $inlistname} {
+ upvar 1 $inlistname inlist
+ }
+ set inlist {}
+ set outlist {}
+ foreach item $list2 {
+ if {$item in $list1} {
+ lappend inlist $item
+ } else {
+ lappend outlist $item
+ }
+ }
+ return $outlist
+}
+
# msgcat::mcload --
#
# Attempt to load message catalogs for each locale in the
@@ -280,24 +863,87 @@ proc msgcat::mcpreferences {} {
# Returns the number of message catalogs that were loaded.
proc msgcat::mcload {langdir} {
+ tailcall mcpackageconfig set mcfolder $langdir
+}
+
+# msgcat::LoadAll --
+#
+# Load a list of locales for all packages not having a package locale
+# list.
+#
+# Arguments:
+# langdir The directory to search.
+#
+# Results:
+# Returns the number of message catalogs that were loaded.
+
+proc msgcat::LoadAll {locales} {
+ variable PackageConfig
+ variable LoadedLocales
+ if {0 == [llength $locales]} { return {} }
+ # filter jet unloaded locales
+ set locales [ListComplement $LoadedLocales $locales]
+ if {0 == [llength $locales]} { return {} }
+ lappend LoadedLocales {*}$locales
+
+ set packages [lsort -unique [concat\
+ [dict keys [dict get $PackageConfig loadcmd]]\
+ [dict keys [dict get $PackageConfig mcfolder]]]]
+ foreach ns $packages {
+ if {! [dict exists $PackageConfig loclist $ns] } {
+ Load $ns $locales
+ }
+ }
+ return $locales
+}
+
+# msgcat::Load --
+#
+# Invoke message load callback and load message catalog files.
+#
+# Arguments:
+# ns Namespace (equal package) to load the message catalog.
+# locales List of locales to load.
+# callbackonly true if only callback should be invoked
+#
+# Results:
+# Returns the number of message catalogs that were loaded.
+
+proc msgcat::Load {ns locales {callbackonly 0}} {
variable FileLocale
+ variable PackageConfig
+ variable LoadedLocals
+
+ if {0 == [llength $locales]} { return 0 }
+
+ # Invoke callback
+ Invoke loadcmd $locales $ns
+
+ if {$callbackonly || ![dict exists $PackageConfig mcfolder $ns]} {
+ return 0
+ }
+
+ # Invoke file load
+ set langdir [dict get $PackageConfig mcfolder $ns]
+
# Save the file locale if we are recursively called
if {[info exists FileLocale]} {
set nestedFileLocale $FileLocale
}
set x 0
- foreach p [mcpreferences] {
+ foreach p $locales {
if {$p eq {}} {
set p ROOT
}
set langfile [file join $langdir $p.msg]
if {[file exists $langfile]} {
incr x
- set FileLocale [string tolower [file tail [file rootname $langfile]]]
+ set FileLocale [string tolower\
+ [file tail [file rootname $langfile]]]
if {"root" eq $FileLocale} {
set FileLocale ""
}
- uplevel 1 [list ::source -encoding utf-8 $langfile]
+ namespace inscope $ns [list ::source -encoding utf-8 $langfile]
unset FileLocale
}
}
@@ -307,6 +953,63 @@ proc msgcat::mcload {langdir} {
return $x
}
+# msgcat::Invoke --
+#
+# Invoke a set of registered callbacks.
+# The callback is only invoked, if its registered namespace exists.
+#
+# Arguments:
+# index Index into PackageConfig to get callback command
+# arglist parameters to the callback invocation
+# ns (Optional) package to call.
+# If not given or empty, check all registered packages.
+# resultname Variable to save the callback result of the last called
+# callback to. May be set to "" to discard the result.
+# failerror (0) Fail on error if true. Otherwise call bgerror.
+#
+# Results:
+# Possible values:
+# - 0: no valid command registered
+# - 1: registered command was the empty string
+# - 2: registered command called, resultname is set
+# - 3: registered command failed
+# If multiple commands are called, the maximum of all results is returned.
+
+proc msgcat::Invoke {index arglist {ns ""} {resultname ""} {failerror 0}} {
+ variable PackageConfig
+ variable Config
+ if {"" ne $resultname} {
+ upvar 1 $resultname result
+ }
+ if {"" eq $ns} {
+ set packageList [dict keys [dict get $PackageConfig $index]]
+ } else {
+ set packageList [list $ns]
+ }
+ set ret 0
+ foreach ns $packageList {
+ if {[dict exists $PackageConfig $index $ns] && [namespace exists $ns]} {
+ set cmd [dict get $PackageConfig $index $ns]
+ if {"" eq $cmd} {
+ if {$ret == 0} {set ret 1}
+ } else {
+ if {$failerror} {
+ set result [namespace inscope $ns $cmd {*}$arglist]
+ set ret 2
+ } elseif {1 == [catch {
+ set result [namespace inscope $ns $cmd {*}$arglist]
+ if {$ret < 2} {set ret 2}
+ } err derr]} {
+ after idle [concat [::interp bgerror ""]\
+ [list $err $derr]]
+ set ret 3
+ }
+ }
+ }
+ }
+ return $ret
+}
+
# msgcat::mcset --
#
# Set the translation for a given string in a specified locale.
@@ -326,11 +1029,11 @@ proc msgcat::mcset {locale src {dest ""}} {
set dest $src
}
- set ns [uplevel 1 [list ::namespace current]]
+ set ns [PackageNamespaceGet]
set locale [string tolower $locale]
- dict set Msgs $locale $ns $src $dest
+ dict set Msgs $ns $locale $src $dest
return $dest
}
@@ -351,16 +1054,10 @@ proc msgcat::mcflset {src {dest ""}} {
variable Msgs
if {![info exists FileLocale]} {
- return -code error \
- "must only be used inside a message catalog loaded with ::msgcat::mcload"
+ return -code error "must only be used inside a message catalog loaded\
+ with ::msgcat::mcload"
}
- if {[llength [info level 0]] == 2} { ;# dest not specified
- set dest $src
- }
-
- set ns [uplevel 1 [list ::namespace current]]
- dict set Msgs $FileLocale $ns $src $dest
- return $dest
+ tailcall mcset $FileLocale $src $dest
}
# msgcat::mcmset --
@@ -380,14 +1077,14 @@ proc msgcat::mcmset {locale pairs} {
set length [llength $pairs]
if {$length % 2} {
return -code error "bad translation list:\
- should be \"[lindex [info level 0] 0] locale {src dest ...}\""
+ should be \"[lindex [info level 0] 0] locale {src dest ...}\""
}
set locale [string tolower $locale]
- set ns [uplevel 1 [list ::namespace current]]
+ set ns [PackageNamespaceGet]
foreach {src dest} $pairs {
- dict set Msgs $locale $ns $src $dest
+ dict set Msgs $ns $locale $src $dest
}
return [expr {$length / 2}]
@@ -408,30 +1105,21 @@ proc msgcat::mcflmset {pairs} {
variable Msgs
if {![info exists FileLocale]} {
- return -code error \
- "must only be used inside a message catalog loaded with ::msgcat::mcload"
- }
- set length [llength $pairs]
- if {$length % 2} {
- return -code error "bad translation list:\
- should be \"[lindex [info level 0] 0] locale {src dest ...}\""
+ return -code error "must only be used inside a message catalog loaded\
+ with ::msgcat::mcload"
}
-
- set ns [uplevel 1 [list ::namespace current]]
- foreach {src dest} $pairs {
- dict set Msgs $FileLocale $ns $src $dest
- }
- return [expr {$length / 2}]
+ tailcall mcmset $FileLocale $pairs
}
# msgcat::mcunknown --
#
# This routine is called by msgcat::mc if a translation cannot
-# be found for a string. This routine is intended to be replaced
+# be found for a string and no unknowncmd is set for the current
+# package. This routine is intended to be replaced
# by an application specific routine for error reporting
# purposes. The default behavior is to return the source string.
# If additional args are specified, the format command will be used
-# to work them into the traslated string.
+# to work them into the translated string.
#
# Arguments:
# locale The current locale.
@@ -441,7 +1129,30 @@ proc msgcat::mcflmset {pairs} {
# Results:
# Returns the translated value.
-proc msgcat::mcunknown {locale src args} {
+proc msgcat::mcunknown {args} {
+ tailcall DefaultUnknown {*}$args
+}
+
+# msgcat::DefaultUnknown --
+#
+# This routine is called by msgcat::mc if a translation cannot
+# be found for a string in the following circumstances:
+# - Default global handler, if mcunknown is not redefined.
+# - Per package handler, if the package sets unknowncmd to the empty
+# string.
+# It returns the source string if the argument list is empty.
+# If additional args are specified, the format command will be used
+# to work them into the translated string.
+#
+# Arguments:
+# locale (unused) The current locale.
+# src The string to be translated.
+# args Args to pass to the format command
+#
+# Results:
+# Returns the translated value.
+
+proc msgcat::DefaultUnknown {locale src args} {
if {[llength $args]} {
return [format $src {*}$args]
} else {
@@ -462,8 +1173,9 @@ proc msgcat::mcunknown {locale src args} {
proc msgcat::mcmax {args} {
set max 0
+ set ns [PackageNamespaceGet]
foreach string $args {
- set translated [uplevel 1 [list [namespace origin mc] $string]]
+ set translated [uplevel 1 [list [namespace origin mcn] $ns $string]]
set len [string length $translated]
if {$len>$max} {
set max $len
@@ -474,7 +1186,7 @@ proc msgcat::mcmax {args} {
# Convert the locale values stored in environment variables to a form
# suitable for passing to [mclocale]
-proc msgcat::ConvertLocale {value} {
+proc msgcat::mcutil::ConvertLocale {value} {
# Assume $value is of form: $language[_$territory][.$codeset][@modifier]
# Convert to form: $language[_$territory][_$modifier]
#
@@ -501,8 +1213,46 @@ proc msgcat::ConvertLocale {value} {
return $ret
}
+# helper function to find package namespace of stack-frame -2
+# There are 4 possibilities:
+# - called from a proc
+# - called within a class definition script
+# - called from an class defined oo object
+# - called from a classless oo object
+proc ::msgcat::PackageNamespaceGet {} {
+ set ns [uplevel 2 { namespace current }]
+
+ if {![string match {::oo::*} $ns]} {
+ # Not in object environment
+ return $ns
+ }
+ # Ticket 91b3a5bb14: call to self may fail if namespace is stored
+ # so catch all this
+ try {
+ # Check self namespace to determine environment
+ switch -exact -- [uplevel 2 { namespace which -command self }] {
+ {::oo::define::self} {
+ # We are within a class definition
+ return [namespace qualifiers [uplevel 2 { self }]]
+ }
+ {::oo::Helpers::self} {
+ # We are within an object
+ set Class [info object class [uplevel 2 { self }]]
+ # Check for classless defined object
+ if {$Class eq {::oo::object}} {
+ return [namespace qualifiers [uplevel 2 { self }]]
+ }
+ # Class defined object
+ return [namespace qualifiers $Class]
+ }
+ }
+ } on error {} {
+ }
+ return $ns
+}
+
# Initialize the default locale
-proc msgcat::Init {} {
+proc msgcat::mcutil::getsystemlocale {} {
global env
#
@@ -510,10 +1260,8 @@ proc msgcat::Init {} {
#
foreach varName {LC_ALL LC_MESSAGES LANG} {
if {[info exists env($varName)] && ("" ne $env($varName))} {
- if {![catch {
- mclocale [ConvertLocale $env($varName)]
- }]} {
- return
+ if {![catch { ConvertLocale $env($varName) } locale]} {
+ return $locale
}
}
}
@@ -521,10 +1269,8 @@ proc msgcat::Init {} {
# On Darwin, fallback to current CFLocale identifier if available.
#
if {[info exists ::tcl::mac::locale] && $::tcl::mac::locale ne ""} {
- if {![catch {
- mclocale [ConvertLocale $::tcl::mac::locale]
- }]} {
- return
+ if {![catch { ConvertLocale $::tcl::mac::locale } locale]} {
+ return $locale
}
}
#
@@ -533,8 +1279,7 @@ proc msgcat::Init {} {
#
if {([info sharedlibextension] ne ".dll")
|| [catch {package require registry}]} {
- mclocale C
- return
+ return C
}
#
# On Windows or Cygwin, try to set locale depending on registry
@@ -543,7 +1288,7 @@ proc msgcat::Init {} {
# On Vista and later:
# HCU/Control Panel/Desktop : PreferredUILanguages is for language packs,
- # HCU/Control Pannel/International : localName is the default locale.
+ # HCU/Control Panel/International : localName is the default locale.
#
# They contain the local string as RFC5646, composed of:
# [a-z]{2,3} : language
@@ -565,8 +1310,8 @@ proc msgcat::Init {} {
if {[dict exists $modifierDict $script]} {
append locale @ [dict get $modifierDict $script]
}
- if {![catch {mclocale [ConvertLocale $locale]}]} {
- return
+ if {![catch {ConvertLocale $locale} locale]} {
+ return $locale
}
}
}
@@ -575,13 +1320,12 @@ proc msgcat::Init {} {
if {[catch {
set locale [registry get $key "locale"]
}]} {
- mclocale C
- return
+ return C
}
#
# Keep trying to match against smaller and smaller suffixes
- # of the registry value, since the latter hexadigits appear
- # to determine general language and earlier hexadigits determine
+ # of the registry value, since the latter hexdigits appear
+ # to determine general language and earlier hexdigits determine
# more precise information, such as territory. For example,
# 0409 - English - United States
# 0809 - English - United Kingdom
@@ -591,15 +1335,15 @@ proc msgcat::Init {} {
set locale [string tolower $locale]
while {[string length $locale]} {
if {![catch {
- mclocale [ConvertLocale [dict get $WinRegToISO639 $locale]]
- }]} {
- return
+ ConvertLocale [dict get $WinRegToISO639 $locale]
+ } localeOut]} {
+ return $localeOut
}
set locale [string range $locale 1 end]
}
#
# No translation known. Fall back on "C" locale
#
- mclocale C
+ return C
}
-msgcat::Init
+msgcat::mclocale [msgcat::mcutil getsystemlocale]
diff --git a/library/msgcat/pkgIndex.tcl b/library/msgcat/pkgIndex.tcl
index 5fabfe3..e141c67 100644
--- a/library/msgcat/pkgIndex.tcl
+++ b/library/msgcat/pkgIndex.tcl
@@ -1,2 +1,2 @@
-if {![package vsatisfies [package provide Tcl] 8.5]} {return}
-package ifneeded msgcat 1.5.2 [list source [file join $dir msgcat.tcl]]
+if {![package vsatisfies [package provide Tcl] 8.7-]} {return}
+package ifneeded msgcat 1.7.1 [list source -encoding utf-8 [file join $dir msgcat.tcl]]
diff --git a/library/msgs/ar.msg b/library/msgs/ar.msg
index 257157f..2d403ec 100644
--- a/library/msgs/ar.msg
+++ b/library/msgs/ar.msg
@@ -1,53 +1,53 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ar DAYS_OF_WEEK_ABBREV [list \
- "\u062d"\
- "\u0646"\
- "\u062b"\
- "\u0631"\
- "\u062e"\
- "\u062c"\
- "\u0633"]
+ "ح"\
+ "ن"\
+ "ث"\
+ "ر"\
+ "خ"\
+ "ج"\
+ "س"]
::msgcat::mcset ar DAYS_OF_WEEK_FULL [list \
- "\u0627\u0644\u0623\u062d\u062f"\
- "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\
- "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\
- "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\
- "\u0627\u0644\u062e\u0645\u064a\u0633"\
- "\u0627\u0644\u062c\u0645\u0639\u0629"\
- "\u0627\u0644\u0633\u0628\u062a"]
+ "الأحد"\
+ "الاثنين"\
+ "الثلاثاء"\
+ "الأربعاء"\
+ "الخميس"\
+ "الجمعة"\
+ "السبت"]
::msgcat::mcset ar MONTHS_ABBREV [list \
- "\u064a\u0646\u0627"\
- "\u0641\u0628\u0631"\
- "\u0645\u0627\u0631"\
- "\u0623\u0628\u0631"\
- "\u0645\u0627\u064a"\
- "\u064a\u0648\u0646"\
- "\u064a\u0648\u0644"\
- "\u0623\u063a\u0633"\
- "\u0633\u0628\u062a"\
- "\u0623\u0643\u062a"\
- "\u0646\u0648\u0641"\
- "\u062f\u064a\u0633"\
+ "ينا"\
+ "فبر"\
+ "مار"\
+ "أبر"\
+ "ماي"\
+ "يون"\
+ "يول"\
+ "أغس"\
+ "سبت"\
+ "أكت"\
+ "نوف"\
+ "ديس"\
""]
::msgcat::mcset ar MONTHS_FULL [list \
- "\u064a\u0646\u0627\u064a\u0631"\
- "\u0641\u0628\u0631\u0627\u064a\u0631"\
- "\u0645\u0627\u0631\u0633"\
- "\u0623\u0628\u0631\u064a\u0644"\
- "\u0645\u0627\u064a\u0648"\
- "\u064a\u0648\u0646\u064a\u0648"\
- "\u064a\u0648\u0644\u064a\u0648"\
- "\u0623\u063a\u0633\u0637\u0633"\
- "\u0633\u0628\u062a\u0645\u0628\u0631"\
- "\u0623\u0643\u062a\u0648\u0628\u0631"\
- "\u0646\u0648\u0641\u0645\u0628\u0631"\
- "\u062f\u064a\u0633\u0645\u0628\u0631"\
+ "يناير"\
+ "فبراير"\
+ "مارس"\
+ "أبريل"\
+ "مايو"\
+ "يونيو"\
+ "يوليو"\
+ "أغسطس"\
+ "سبتمبر"\
+ "أكتوبر"\
+ "نوفمبر"\
+ "ديسمبر"\
""]
- ::msgcat::mcset ar BCE "\u0642.\u0645"
- ::msgcat::mcset ar CE "\u0645"
- ::msgcat::mcset ar AM "\u0635"
- ::msgcat::mcset ar PM "\u0645"
+ ::msgcat::mcset ar BCE "ق.م"
+ ::msgcat::mcset ar CE "م"
+ ::msgcat::mcset ar AM "ص"
+ ::msgcat::mcset ar PM "م"
::msgcat::mcset ar DATE_FORMAT "%d/%m/%Y"
::msgcat::mcset ar TIME_FORMAT_12 "%I:%M:%S %P"
::msgcat::mcset ar DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z"
diff --git a/library/msgs/ar_jo.msg b/library/msgs/ar_jo.msg
index 0f5e269..9a9dda0 100644
--- a/library/msgs/ar_jo.msg
+++ b/library/msgs/ar_jo.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ar_JO DAYS_OF_WEEK_ABBREV [list \
- "\u0627\u0644\u0623\u062d\u062f"\
- "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\
- "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\
- "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\
- "\u0627\u0644\u062e\u0645\u064a\u0633"\
- "\u0627\u0644\u062c\u0645\u0639\u0629"\
- "\u0627\u0644\u0633\u0628\u062a"]
+ "الأحد"\
+ "الاثنين"\
+ "الثلاثاء"\
+ "الأربعاء"\
+ "الخميس"\
+ "الجمعة"\
+ "السبت"]
::msgcat::mcset ar_JO MONTHS_ABBREV [list \
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0634\u0628\u0627\u0637"\
- "\u0622\u0630\u0627\u0631"\
- "\u0646\u064a\u0633\u0627\u0646"\
- "\u0646\u0648\u0627\u0631"\
- "\u062d\u0632\u064a\u0631\u0627\u0646"\
- "\u062a\u0645\u0648\u0632"\
- "\u0622\u0628"\
- "\u0623\u064a\u0644\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\
+ "كانون الثاني"\
+ "شباط"\
+ "آذار"\
+ "نيسان"\
+ "نوار"\
+ "حزيران"\
+ "تموز"\
+ "آب"\
+ "أيلول"\
+ "تشرين الأول"\
+ "تشرين الثاني"\
+ "كانون الأول"\
""]
::msgcat::mcset ar_JO MONTHS_FULL [list \
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0634\u0628\u0627\u0637"\
- "\u0622\u0630\u0627\u0631"\
- "\u0646\u064a\u0633\u0627\u0646"\
- "\u0646\u0648\u0627\u0631"\
- "\u062d\u0632\u064a\u0631\u0627\u0646"\
- "\u062a\u0645\u0648\u0632"\
- "\u0622\u0628"\
- "\u0623\u064a\u0644\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\
+ "كانون الثاني"\
+ "شباط"\
+ "آذار"\
+ "نيسان"\
+ "نوار"\
+ "حزيران"\
+ "تموز"\
+ "آب"\
+ "أيلول"\
+ "تشرين الأول"\
+ "تشرين الثاني"\
+ "كانون الأول"\
""]
}
diff --git a/library/msgs/ar_lb.msg b/library/msgs/ar_lb.msg
index e62acd3..c23aa2c 100644
--- a/library/msgs/ar_lb.msg
+++ b/library/msgs/ar_lb.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ar_LB DAYS_OF_WEEK_ABBREV [list \
- "\u0627\u0644\u0623\u062d\u062f"\
- "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\
- "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\
- "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\
- "\u0627\u0644\u062e\u0645\u064a\u0633"\
- "\u0627\u0644\u062c\u0645\u0639\u0629"\
- "\u0627\u0644\u0633\u0628\u062a"]
+ "الأحد"\
+ "الاثنين"\
+ "الثلاثاء"\
+ "الأربعاء"\
+ "الخميس"\
+ "الجمعة"\
+ "السبت"]
::msgcat::mcset ar_LB MONTHS_ABBREV [list \
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0634\u0628\u0627\u0637"\
- "\u0622\u0630\u0627\u0631"\
- "\u0646\u064a\u0633\u0627\u0646"\
- "\u0646\u0648\u0627\u0631"\
- "\u062d\u0632\u064a\u0631\u0627\u0646"\
- "\u062a\u0645\u0648\u0632"\
- "\u0622\u0628"\
- "\u0623\u064a\u0644\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\
+ "كانون الثاني"\
+ "شباط"\
+ "آذار"\
+ "نيسان"\
+ "نوار"\
+ "حزيران"\
+ "تموز"\
+ "آب"\
+ "أيلول"\
+ "تشرين الأول"\
+ "تشرين الثاني"\
+ "كانون الأول"\
""]
::msgcat::mcset ar_LB MONTHS_FULL [list \
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0634\u0628\u0627\u0637"\
- "\u0622\u0630\u0627\u0631"\
- "\u0646\u064a\u0633\u0627\u0646"\
- "\u0646\u0648\u0627\u0631"\
- "\u062d\u0632\u064a\u0631\u0627\u0646"\
- "\u062a\u0645\u0648\u0632"\
- "\u0622\u0628"\
- "\u0623\u064a\u0644\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\
+ "كانون الثاني"\
+ "شباط"\
+ "آذار"\
+ "نيسان"\
+ "نوار"\
+ "حزيران"\
+ "تموز"\
+ "آب"\
+ "أيلول"\
+ "تشرين الأول"\
+ "تشرين الثاني"\
+ "كانون الأول"\
""]
}
diff --git a/library/msgs/ar_sy.msg b/library/msgs/ar_sy.msg
index d5e1c87..f0daec0 100644
--- a/library/msgs/ar_sy.msg
+++ b/library/msgs/ar_sy.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ar_SY DAYS_OF_WEEK_ABBREV [list \
- "\u0627\u0644\u0623\u062d\u062f"\
- "\u0627\u0644\u0627\u062b\u0646\u064a\u0646"\
- "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621"\
- "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621"\
- "\u0627\u0644\u062e\u0645\u064a\u0633"\
- "\u0627\u0644\u062c\u0645\u0639\u0629"\
- "\u0627\u0644\u0633\u0628\u062a"]
+ "الأحد"\
+ "الاثنين"\
+ "الثلاثاء"\
+ "الأربعاء"\
+ "الخميس"\
+ "الجمعة"\
+ "السبت"]
::msgcat::mcset ar_SY MONTHS_ABBREV [list \
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0634\u0628\u0627\u0637"\
- "\u0622\u0630\u0627\u0631"\
- "\u0646\u064a\u0633\u0627\u0646"\
- "\u0646\u0648\u0627\u0631"\
- "\u062d\u0632\u064a\u0631\u0627\u0646"\
- "\u062a\u0645\u0648\u0632"\
- "\u0622\u0628"\
- "\u0623\u064a\u0644\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\
+ "كانون الثاني"\
+ "شباط"\
+ "آذار"\
+ "نيسان"\
+ "نوار"\
+ "حزيران"\
+ "تموز"\
+ "آب"\
+ "أيلول"\
+ "تشرين الأول"\
+ "تشرين الثاني"\
+ "كانون الأول"\
""]
::msgcat::mcset ar_SY MONTHS_FULL [list \
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0634\u0628\u0627\u0637"\
- "\u0622\u0630\u0627\u0631"\
- "\u0646\u064a\u0633\u0627\u0646"\
- "\u0646\u0648\u0627\u0631\u0627\u0646"\
- "\u062d\u0632\u064a\u0631"\
- "\u062a\u0645\u0648\u0632"\
- "\u0622\u0628"\
- "\u0623\u064a\u0644\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u0623\u0648\u0644"\
- "\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a"\
- "\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0644"\
+ "كانون الثاني"\
+ "شباط"\
+ "آذار"\
+ "نيسان"\
+ "نواران"\
+ "حزير"\
+ "تموز"\
+ "آب"\
+ "أيلول"\
+ "تشرين الأول"\
+ "تشرين الثاني"\
+ "كانون الأول"\
""]
}
diff --git a/library/msgs/be.msg b/library/msgs/be.msg
index 379a1d7..a0aceed 100644
--- a/library/msgs/be.msg
+++ b/library/msgs/be.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset be DAYS_OF_WEEK_ABBREV [list \
- "\u043d\u0434"\
- "\u043f\u043d"\
- "\u0430\u0442"\
- "\u0441\u0440"\
- "\u0447\u0446"\
- "\u043f\u0442"\
- "\u0441\u0431"]
+ "нд"\
+ "пн"\
+ "ат"\
+ "ср"\
+ "чц"\
+ "пт"\
+ "сб"]
::msgcat::mcset be DAYS_OF_WEEK_FULL [list \
- "\u043d\u044f\u0434\u0437\u0435\u043b\u044f"\
- "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a"\
- "\u0430\u045e\u0442\u043e\u0440\u0430\u043a"\
- "\u0441\u0435\u0440\u0430\u0434\u0430"\
- "\u0447\u0430\u0446\u0432\u0435\u0440"\
- "\u043f\u044f\u0442\u043d\u0456\u0446\u0430"\
- "\u0441\u0443\u0431\u043e\u0442\u0430"]
+ "нядзеля"\
+ "панядзелак"\
+ "аўторак"\
+ "серада"\
+ "чацвер"\
+ "пятніца"\
+ "субота"]
::msgcat::mcset be MONTHS_ABBREV [list \
- "\u0441\u0442\u0434"\
- "\u043b\u044e\u0442"\
- "\u0441\u043a\u0432"\
- "\u043a\u0440\u0441"\
- "\u043c\u0430\u0439"\
- "\u0447\u0440\u0432"\
- "\u043b\u043f\u043d"\
- "\u0436\u043d\u0432"\
- "\u0432\u0440\u0441"\
- "\u043a\u0441\u0442"\
- "\u043b\u0441\u0442"\
- "\u0441\u043d\u0436"\
+ "стд"\
+ "лют"\
+ "скв"\
+ "крс"\
+ "май"\
+ "чрв"\
+ "лпн"\
+ "жнв"\
+ "врс"\
+ "кст"\
+ "лст"\
+ "снж"\
""]
::msgcat::mcset be MONTHS_FULL [list \
- "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f"\
- "\u043b\u044e\u0442\u0430\u0433\u0430"\
- "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430"\
- "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430"\
- "\u043c\u0430\u044f"\
- "\u0447\u0440\u0432\u0435\u043d\u044f"\
- "\u043b\u0456\u043f\u0435\u043d\u044f"\
- "\u0436\u043d\u0456\u045e\u043d\u044f"\
- "\u0432\u0435\u0440\u0430\u0441\u043d\u044f"\
- "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430"\
- "\u043b\u0438\u0441\u0442\u0430\u043f\u0430\u0434\u0430"\
- "\u0441\u043d\u0435\u0436\u043d\u044f"\
+ "студзеня"\
+ "лютага"\
+ "сакавіка"\
+ "красавіка"\
+ "мая"\
+ "чрвеня"\
+ "ліпеня"\
+ "жніўня"\
+ "верасня"\
+ "кастрычніка"\
+ "листапада"\
+ "снежня"\
""]
- ::msgcat::mcset be BCE "\u0434\u0430 \u043d.\u0435."
- ::msgcat::mcset be CE "\u043d.\u0435."
+ ::msgcat::mcset be BCE "да н.е."
+ ::msgcat::mcset be CE "н.е."
::msgcat::mcset be DATE_FORMAT "%e.%m.%Y"
::msgcat::mcset be TIME_FORMAT "%k.%M.%S"
::msgcat::mcset be DATE_TIME_FORMAT "%e.%m.%Y %k.%M.%S %z"
diff --git a/library/msgs/bg.msg b/library/msgs/bg.msg
index ff17759..2e7730d 100644
--- a/library/msgs/bg.msg
+++ b/library/msgs/bg.msg
@@ -1,21 +1,21 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset bg DAYS_OF_WEEK_ABBREV [list \
- "\u041d\u0434"\
- "\u041f\u043d"\
- "\u0412\u0442"\
- "\u0421\u0440"\
- "\u0427\u0442"\
- "\u041f\u0442"\
- "\u0421\u0431"]
+ "Нд"\
+ "Пн"\
+ "Вт"\
+ "Ср"\
+ "Чт"\
+ "Пт"\
+ "Сб"]
::msgcat::mcset bg DAYS_OF_WEEK_FULL [list \
- "\u041d\u0435\u0434\u0435\u043b\u044f"\
- "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a"\
- "\u0412\u0442\u043e\u0440\u043d\u0438\u043a"\
- "\u0421\u0440\u044f\u0434\u0430"\
- "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a"\
- "\u041f\u0435\u0442\u044a\u043a"\
- "\u0421\u044a\u0431\u043e\u0442\u0430"]
+ "Неделя"\
+ "Понеделник"\
+ "Вторник"\
+ "Сряда"\
+ "Четвъртък"\
+ "Петък"\
+ "Събота"]
::msgcat::mcset bg MONTHS_ABBREV [list \
"I"\
"II"\
@@ -31,21 +31,21 @@ namespace eval ::tcl::clock {
"XII"\
""]
::msgcat::mcset bg MONTHS_FULL [list \
- "\u042f\u043d\u0443\u0430\u0440\u0438"\
- "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438"\
- "\u041c\u0430\u0440\u0442"\
- "\u0410\u043f\u0440\u0438\u043b"\
- "\u041c\u0430\u0439"\
- "\u042e\u043d\u0438"\
- "\u042e\u043b\u0438"\
- "\u0410\u0432\u0433\u0443\u0441\u0442"\
- "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438"\
- "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438"\
- "\u041d\u043e\u0435\u043c\u0432\u0440\u0438"\
- "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438"\
+ "Януари"\
+ "Февруари"\
+ "Март"\
+ "Април"\
+ "Май"\
+ "Юни"\
+ "Юли"\
+ "Август"\
+ "Септември"\
+ "Октомври"\
+ "Ноември"\
+ "Декември"\
""]
- ::msgcat::mcset bg BCE "\u043f\u0440.\u043d.\u0435."
- ::msgcat::mcset bg CE "\u043d.\u0435."
+ ::msgcat::mcset bg BCE "пр.н.е."
+ ::msgcat::mcset bg CE "н.е."
::msgcat::mcset bg DATE_FORMAT "%Y-%m-%e"
::msgcat::mcset bg TIME_FORMAT "%k:%M:%S"
::msgcat::mcset bg DATE_TIME_FORMAT "%Y-%m-%e %k:%M:%S %z"
diff --git a/library/msgs/bn.msg b/library/msgs/bn.msg
index 664b9d8..a0aef13 100644
--- a/library/msgs/bn.msg
+++ b/library/msgs/bn.msg
@@ -1,49 +1,49 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset bn DAYS_OF_WEEK_ABBREV [list \
- "\u09b0\u09ac\u09bf"\
- "\u09b8\u09cb\u09ae"\
- "\u09ae\u0999\u0997\u09b2"\
- "\u09ac\u09c1\u09a7"\
- "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf"\
- "\u09b6\u09c1\u0995\u09cd\u09b0"\
- "\u09b6\u09a8\u09bf"]
+ "রবি"\
+ "সোম"\
+ "মঙগল"\
+ "বুধ"\
+ "বৃহস্পতি"\
+ "শুক্র"\
+ "শনি"]
::msgcat::mcset bn DAYS_OF_WEEK_FULL [list \
- "\u09b0\u09ac\u09bf\u09ac\u09be\u09b0"\
- "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0"\
- "\u09ae\u0999\u0997\u09b2\u09ac\u09be\u09b0"\
- "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0"\
- "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0"\
- "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0"\
- "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"]
+ "রবিবার"\
+ "সোমবার"\
+ "মঙগলবার"\
+ "বুধবার"\
+ "বৃহস্পতিবার"\
+ "শুক্রবার"\
+ "শনিবার"]
::msgcat::mcset bn MONTHS_ABBREV [list \
- "\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0"\
- "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0"\
- "\u09ae\u09be\u09b0\u09cd\u099a"\
- "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2"\
- "\u09ae\u09c7"\
- "\u099c\u09c1\u09a8"\
- "\u099c\u09c1\u09b2\u09be\u0987"\
- "\u0986\u0997\u09b8\u09cd\u099f"\
- "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0"\
- "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0"\
- "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0"\
- "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"\
+ "জানুয়ারী"\
+ "ফেব্রুয়ারী"\
+ "মার্চ"\
+ "এপ্রিল"\
+ "মে"\
+ "জুন"\
+ "জুলাই"\
+ "আগস্ট"\
+ "সেপ্টেম্বর"\
+ "অক্টোবর"\
+ "নভেম্বর"\
+ "ডিসেম্বর"\
""]
::msgcat::mcset bn MONTHS_FULL [list \
- "\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0"\
- "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09c0"\
- "\u09ae\u09be\u09b0\u09cd\u099a"\
- "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2"\
- "\u09ae\u09c7"\
- "\u099c\u09c1\u09a8"\
- "\u099c\u09c1\u09b2\u09be\u0987"\
- "\u0986\u0997\u09b8\u09cd\u099f"\
- "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0"\
- "\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0"\
- "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0"\
- "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"\
+ "জানুয়ারী"\
+ "ফেব্রুয়ারী"\
+ "মার্চ"\
+ "এপ্রিল"\
+ "মে"\
+ "জুন"\
+ "জুলাই"\
+ "আগস্ট"\
+ "সেপ্টেম্বর"\
+ "অক্টোবর"\
+ "নভেম্বর"\
+ "ডিসেম্বর"\
""]
- ::msgcat::mcset bn AM "\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09b9\u09cd\u09a3"
- ::msgcat::mcset bn PM "\u0985\u09aa\u09b0\u09be\u09b9\u09cd\u09a3"
+ ::msgcat::mcset bn AM "পূর্বাহ্ণ"
+ ::msgcat::mcset bn PM "অপরাহ্ণ"
}
diff --git a/library/msgs/ca.msg b/library/msgs/ca.msg
index 36c9772..272f682 100644
--- a/library/msgs/ca.msg
+++ b/library/msgs/ca.msg
@@ -19,7 +19,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset ca MONTHS_ABBREV [list \
"gen."\
"feb."\
- "mar\u00e7"\
+ "març"\
"abr."\
"maig"\
"juny"\
@@ -33,7 +33,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset ca MONTHS_FULL [list \
"gener"\
"febrer"\
- "mar\u00e7"\
+ "març"\
"abril"\
"maig"\
"juny"\
diff --git a/library/msgs/cs.msg b/library/msgs/cs.msg
index 8db8bdd..4673cd4 100644
--- a/library/msgs/cs.msg
+++ b/library/msgs/cs.msg
@@ -3,18 +3,18 @@ namespace eval ::tcl::clock {
::msgcat::mcset cs DAYS_OF_WEEK_ABBREV [list \
"Ne"\
"Po"\
- "\u00dat"\
+ "Út"\
"St"\
- "\u010ct"\
- "P\u00e1"\
+ "Čt"\
+ "Pá"\
"So"]
::msgcat::mcset cs DAYS_OF_WEEK_FULL [list \
- "Ned\u011ble"\
- "Pond\u011bl\u00ed"\
- "\u00dater\u00fd"\
- "St\u0159eda"\
- "\u010ctvrtek"\
- "P\u00e1tek"\
+ "Neděle"\
+ "Pondělí"\
+ "Úterý"\
+ "Středa"\
+ "Čtvrtek"\
+ "Pátek"\
"Sobota"]
::msgcat::mcset cs MONTHS_ABBREV [list \
"I"\
@@ -32,19 +32,19 @@ namespace eval ::tcl::clock {
""]
::msgcat::mcset cs MONTHS_FULL [list \
"leden"\
- "\u00fanor"\
- "b\u0159ezen"\
+ "únor"\
+ "březen"\
"duben"\
- "kv\u011bten"\
- "\u010derven"\
- "\u010dervenec"\
+ "květen"\
+ "červen"\
+ "červenec"\
"srpen"\
- "z\u00e1\u0159\u00ed"\
- "\u0159\u00edjen"\
+ "září"\
+ "říjen"\
"listopad"\
"prosinec"\
""]
- ::msgcat::mcset cs BCE "p\u0159.Kr."
+ ::msgcat::mcset cs BCE "př.Kr."
::msgcat::mcset cs CE "po Kr."
::msgcat::mcset cs AM "dop."
::msgcat::mcset cs PM "odp."
diff --git a/library/msgs/da.msg b/library/msgs/da.msg
index e4fec7f..abed3c5 100644
--- a/library/msgs/da.msg
+++ b/library/msgs/da.msg
@@ -1,21 +1,21 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset da DAYS_OF_WEEK_ABBREV [list \
- "s\u00f8"\
+ "sø"\
"ma"\
"ti"\
"on"\
"to"\
"fr"\
- "l\u00f8"]
+ "lø"]
::msgcat::mcset da DAYS_OF_WEEK_FULL [list \
- "s\u00f8ndag"\
+ "søndag"\
"mandag"\
"tirsdag"\
"onsdag"\
"torsdag"\
"fredag"\
- "l\u00f8rdag"]
+ "lørdag"]
::msgcat::mcset da MONTHS_ABBREV [list \
"jan"\
"feb"\
diff --git a/library/msgs/de.msg b/library/msgs/de.msg
index 9eb3145..0bb7399 100644
--- a/library/msgs/de.msg
+++ b/library/msgs/de.msg
@@ -33,7 +33,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset de MONTHS_FULL [list \
"Januar"\
"Februar"\
- "M\u00e4rz"\
+ "März"\
"April"\
"Mai"\
"Juni"\
diff --git a/library/msgs/de_at.msg b/library/msgs/de_at.msg
index 61bc266..1a0a0f5 100644
--- a/library/msgs/de_at.msg
+++ b/library/msgs/de_at.msg
@@ -1,9 +1,9 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset de_AT MONTHS_ABBREV [list \
- "J\u00e4n"\
+ "Jän"\
"Feb"\
- "M\u00e4r"\
+ "Mär"\
"Apr"\
"Mai"\
"Jun"\
@@ -15,9 +15,9 @@ namespace eval ::tcl::clock {
"Dez"\
""]
::msgcat::mcset de_AT MONTHS_FULL [list \
- "J\u00e4nner"\
+ "Jänner"\
"Februar"\
- "M\u00e4rz"\
+ "März"\
"April"\
"Mai"\
"Juni"\
diff --git a/library/msgs/de_be.msg b/library/msgs/de_be.msg
index 3614763..04cf88c 100644
--- a/library/msgs/de_be.msg
+++ b/library/msgs/de_be.msg
@@ -19,7 +19,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset de_BE MONTHS_ABBREV [list \
"Jan"\
"Feb"\
- "M\u00e4r"\
+ "Mär"\
"Apr"\
"Mai"\
"Jun"\
@@ -33,7 +33,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset de_BE MONTHS_FULL [list \
"Januar"\
"Februar"\
- "M\u00e4rz"\
+ "März"\
"April"\
"Mai"\
"Juni"\
diff --git a/library/msgs/el.msg b/library/msgs/el.msg
index ac19f62..26bdfe9 100644
--- a/library/msgs/el.msg
+++ b/library/msgs/el.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset el DAYS_OF_WEEK_ABBREV [list \
- "\u039a\u03c5\u03c1"\
- "\u0394\u03b5\u03c5"\
- "\u03a4\u03c1\u03b9"\
- "\u03a4\u03b5\u03c4"\
- "\u03a0\u03b5\u03bc"\
- "\u03a0\u03b1\u03c1"\
- "\u03a3\u03b1\u03b2"]
+ "Κυρ"\
+ "Δευ"\
+ "Τρι"\
+ "Τετ"\
+ "Πεμ"\
+ "Παρ"\
+ "Σαβ"]
::msgcat::mcset el DAYS_OF_WEEK_FULL [list \
- "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae"\
- "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1"\
- "\u03a4\u03c1\u03af\u03c4\u03b7"\
- "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7"\
- "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7"\
- "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae"\
- "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"]
+ "Κυριακή"\
+ "Δευτέρα"\
+ "Τρίτη"\
+ "Τετάρτη"\
+ "Πέμπτη"\
+ "Παρασκευή"\
+ "Σάββατο"]
::msgcat::mcset el MONTHS_ABBREV [list \
- "\u0399\u03b1\u03bd"\
- "\u03a6\u03b5\u03b2"\
- "\u039c\u03b1\u03c1"\
- "\u0391\u03c0\u03c1"\
- "\u039c\u03b1\u03ca"\
- "\u0399\u03bf\u03c5\u03bd"\
- "\u0399\u03bf\u03c5\u03bb"\
- "\u0391\u03c5\u03b3"\
- "\u03a3\u03b5\u03c0"\
- "\u039f\u03ba\u03c4"\
- "\u039d\u03bf\u03b5"\
- "\u0394\u03b5\u03ba"\
+ "Ιαν"\
+ "Φεβ"\
+ "Μαρ"\
+ "Απρ"\
+ "Μαϊ"\
+ "Ιουν"\
+ "Ιουλ"\
+ "Αυγ"\
+ "Σεπ"\
+ "Οκτ"\
+ "Νοε"\
+ "Δεκ"\
""]
::msgcat::mcset el MONTHS_FULL [list \
- "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2"\
- "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2"\
- "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2"\
- "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2"\
- "\u039c\u03ac\u03ca\u03bf\u03c2"\
- "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2"\
- "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2"\
- "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2"\
- "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\
- "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2"\
- "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\
- "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"\
+ "Ιανουάριος"\
+ "Φεβρουάριος"\
+ "Μάρτιος"\
+ "Απρίλιος"\
+ "Μάϊος"\
+ "Ιούνιος"\
+ "Ιούλιος"\
+ "Αύγουστος"\
+ "Σεπτέμβριος"\
+ "Οκτώβριος"\
+ "Νοέμβριος"\
+ "Δεκέμβριος"\
""]
- ::msgcat::mcset el AM "\u03c0\u03bc"
- ::msgcat::mcset el PM "\u03bc\u03bc"
+ ::msgcat::mcset el AM "πμ"
+ ::msgcat::mcset el PM "μμ"
::msgcat::mcset el DATE_FORMAT "%e/%m/%Y"
::msgcat::mcset el TIME_FORMAT_12 "%l:%M:%S %P"
::msgcat::mcset el DATE_TIME_FORMAT "%e/%m/%Y %l:%M:%S %P %z"
diff --git a/library/msgs/eo.msg b/library/msgs/eo.msg
index 1d2a24f..b9b1500 100644
--- a/library/msgs/eo.msg
+++ b/library/msgs/eo.msg
@@ -5,15 +5,15 @@ namespace eval ::tcl::clock {
"lu"\
"ma"\
"me"\
- "\u0135a"\
+ "ĵa"\
"ve"\
"sa"]
::msgcat::mcset eo DAYS_OF_WEEK_FULL [list \
- "diman\u0109o"\
+ "dimanĉo"\
"lundo"\
"mardo"\
"merkredo"\
- "\u0135a\u016ddo"\
+ "ĵaŭdo"\
"vendredo"\
"sabato"]
::msgcat::mcset eo MONTHS_ABBREV [list \
@@ -24,7 +24,7 @@ namespace eval ::tcl::clock {
"maj"\
"jun"\
"jul"\
- "a\u016dg"\
+ "aŭg"\
"sep"\
"okt"\
"nov"\
@@ -38,7 +38,7 @@ namespace eval ::tcl::clock {
"majo"\
"junio"\
"julio"\
- "a\u016dgusto"\
+ "aŭgusto"\
"septembro"\
"oktobro"\
"novembro"\
diff --git a/library/msgs/es.msg b/library/msgs/es.msg
index a24f0a1..6090eab 100644
--- a/library/msgs/es.msg
+++ b/library/msgs/es.msg
@@ -4,18 +4,18 @@ namespace eval ::tcl::clock {
"dom"\
"lun"\
"mar"\
- "mi\u00e9"\
+ "mié"\
"jue"\
"vie"\
- "s\u00e1b"]
+ "sáb"]
::msgcat::mcset es DAYS_OF_WEEK_FULL [list \
"domingo"\
"lunes"\
"martes"\
- "mi\u00e9rcoles"\
+ "miércoles"\
"jueves"\
"viernes"\
- "s\u00e1bado"]
+ "sábado"]
::msgcat::mcset es MONTHS_ABBREV [list \
"ene"\
"feb"\
diff --git a/library/msgs/et.msg b/library/msgs/et.msg
index 8d32e9e..a782f9b 100644
--- a/library/msgs/et.msg
+++ b/library/msgs/et.msg
@@ -9,17 +9,17 @@ namespace eval ::tcl::clock {
"R"\
"L"]
::msgcat::mcset et DAYS_OF_WEEK_FULL [list \
- "p\u00fchap\u00e4ev"\
- "esmasp\u00e4ev"\
- "teisip\u00e4ev"\
- "kolmap\u00e4ev"\
- "neljap\u00e4ev"\
+ "pühapäev"\
+ "esmaspäev"\
+ "teisipäev"\
+ "kolmapäev"\
+ "neljapäev"\
"reede"\
- "laup\u00e4ev"]
+ "laupäev"]
::msgcat::mcset et MONTHS_ABBREV [list \
"Jaan"\
"Veebr"\
- "M\u00e4rts"\
+ "Märts"\
"Apr"\
"Mai"\
"Juuni"\
@@ -33,7 +33,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset et MONTHS_FULL [list \
"Jaanuar"\
"Veebruar"\
- "M\u00e4rts"\
+ "Märts"\
"Aprill"\
"Mai"\
"Juuni"\
diff --git a/library/msgs/fa.msg b/library/msgs/fa.msg
index 89b2f90..6166e28 100644
--- a/library/msgs/fa.msg
+++ b/library/msgs/fa.msg
@@ -1,47 +1,47 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset fa DAYS_OF_WEEK_ABBREV [list \
- "\u06cc\u2214"\
- "\u062f\u2214"\
- "\u0633\u2214"\
- "\u0686\u2214"\
- "\u067e\u2214"\
- "\u062c\u2214"\
- "\u0634\u2214"]
+ "ی∔"\
+ "د∔"\
+ "س∔"\
+ "چ∔"\
+ "پ∔"\
+ "ج∔"\
+ "ش∔"]
::msgcat::mcset fa DAYS_OF_WEEK_FULL [list \
- "\u06cc\u06cc\u200c\u0634\u0646\u0628\u0647"\
- "\u062f\u0648\u0634\u0646\u0628\u0647"\
- "\u0633\u0647\u200c\u0634\u0646\u0628\u0647"\
- "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647"\
- "\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647"\
- "\u062c\u0645\u0639\u0647"\
- "\u0634\u0646\u0628\u0647"]
+ "یی‌شنبه"\
+ "دوشنبه"\
+ "سه‌شنبه"\
+ "چهارشنبه"\
+ "پنج‌شنبه"\
+ "جمعه"\
+ "شنبه"]
::msgcat::mcset fa MONTHS_ABBREV [list \
- "\u0698\u0627\u0646"\
- "\u0641\u0648\u0631"\
- "\u0645\u0627\u0631"\
- "\u0622\u0648\u0631"\
- "\u0645\u0640\u0647"\
- "\u0698\u0648\u0646"\
- "\u0698\u0648\u06cc"\
- "\u0627\u0648\u062a"\
- "\u0633\u067e\u062a"\
- "\u0627\u0643\u062a"\
- "\u0646\u0648\u0627"\
- "\u062f\u0633\u0627"\
+ "ژان"\
+ "فور"\
+ "مار"\
+ "آور"\
+ "مـه"\
+ "ژون"\
+ "ژوی"\
+ "اوت"\
+ "سپت"\
+ "اكت"\
+ "نوا"\
+ "دسا"\
""]
::msgcat::mcset fa MONTHS_FULL [list \
- "\u0698\u0627\u0646\u0648\u06cc\u0647"\
- "\u0641\u0648\u0631\u0648\u06cc\u0647"\
- "\u0645\u0627\u0631\u0633"\
- "\u0622\u0648\u0631\u06cc\u0644"\
- "\u0645\u0647"\
- "\u0698\u0648\u0626\u0646"\
- "\u0698\u0648\u0626\u06cc\u0647"\
- "\u0627\u0648\u062a"\
- "\u0633\u067e\u062a\u0627\u0645\u0628\u0631"\
- "\u0627\u0643\u062a\u0628\u0631"\
- "\u0646\u0648\u0627\u0645\u0628\u0631"\
- "\u062f\u0633\u0627\u0645\u0628\u0631"\
+ "ژانویه"\
+ "فورویه"\
+ "مارس"\
+ "آوریل"\
+ "مه"\
+ "ژوئن"\
+ "ژوئیه"\
+ "اوت"\
+ "سپتامبر"\
+ "اكتبر"\
+ "نوامبر"\
+ "دسامبر"\
""]
}
diff --git a/library/msgs/fa_in.msg b/library/msgs/fa_in.msg
index adc9e91..ce32f99 100644
--- a/library/msgs/fa_in.msg
+++ b/library/msgs/fa_in.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset fa_IN DAYS_OF_WEEK_ABBREV [list \
- "\u06cc\u2214"\
- "\u062f\u2214"\
- "\u0633\u2214"\
- "\u0686\u2214"\
- "\u067e\u2214"\
- "\u062c\u2214"\
- "\u0634\u2214"]
+ "ی∔"\
+ "د∔"\
+ "س∔"\
+ "چ∔"\
+ "پ∔"\
+ "ج∔"\
+ "ش∔"]
::msgcat::mcset fa_IN DAYS_OF_WEEK_FULL [list \
- "\u06cc\u06cc\u200c\u0634\u0646\u0628\u0647"\
- "\u062f\u0648\u0634\u0646\u0628\u0647"\
- "\u0633\u0647\u200c\u0634\u0646\u0628\u0647"\
- "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647"\
- "\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647"\
- "\u062c\u0645\u0639\u0647"\
- "\u0634\u0646\u0628\u0647"]
+ "یی‌شنبه"\
+ "دوشنبه"\
+ "سه‌شنبه"\
+ "چهارشنبه"\
+ "پنج‌شنبه"\
+ "جمعه"\
+ "شنبه"]
::msgcat::mcset fa_IN MONTHS_ABBREV [list \
- "\u0698\u0627\u0646"\
- "\u0641\u0648\u0631"\
- "\u0645\u0627\u0631"\
- "\u0622\u0648\u0631"\
- "\u0645\u0640\u0647"\
- "\u0698\u0648\u0646"\
- "\u0698\u0648\u06cc"\
- "\u0627\u0648\u062a"\
- "\u0633\u067e\u062a"\
- "\u0627\u0643\u062a"\
- "\u0646\u0648\u0627"\
- "\u062f\u0633\u0627"\
+ "ژان"\
+ "فور"\
+ "مار"\
+ "آور"\
+ "مـه"\
+ "ژون"\
+ "ژوی"\
+ "اوت"\
+ "سپت"\
+ "اكت"\
+ "نوا"\
+ "دسا"\
""]
::msgcat::mcset fa_IN MONTHS_FULL [list \
- "\u0698\u0627\u0646\u0648\u06cc\u0647"\
- "\u0641\u0648\u0631\u0648\u06cc\u0647"\
- "\u0645\u0627\u0631\u0633"\
- "\u0622\u0648\u0631\u06cc\u0644"\
- "\u0645\u0647"\
- "\u0698\u0648\u0626\u0646"\
- "\u0698\u0648\u0626\u06cc\u0647"\
- "\u0627\u0648\u062a"\
- "\u0633\u067e\u062a\u0627\u0645\u0628\u0631"\
- "\u0627\u0643\u062a\u0628\u0631"\
- "\u0646\u0648\u0627\u0645\u0628\u0631"\
- "\u062f\u0633\u0627\u0645\u0628\u0631"\
+ "ژانویه"\
+ "فورویه"\
+ "مارس"\
+ "آوریل"\
+ "مه"\
+ "ژوئن"\
+ "ژوئیه"\
+ "اوت"\
+ "سپتامبر"\
+ "اكتبر"\
+ "نوامبر"\
+ "دسامبر"\
""]
- ::msgcat::mcset fa_IN AM "\u0635\u0628\u062d"
- ::msgcat::mcset fa_IN PM "\u0639\u0635\u0631"
+ ::msgcat::mcset fa_IN AM "صبح"
+ ::msgcat::mcset fa_IN PM "عصر"
::msgcat::mcset fa_IN DATE_FORMAT "%A %d %B %Y"
::msgcat::mcset fa_IN TIME_FORMAT_12 "%I:%M:%S %z"
::msgcat::mcset fa_IN DATE_TIME_FORMAT "%A %d %B %Y %I:%M:%S %z %z"
diff --git a/library/msgs/fa_ir.msg b/library/msgs/fa_ir.msg
index 597ce9d..9ce9284 100644
--- a/library/msgs/fa_ir.msg
+++ b/library/msgs/fa_ir.msg
@@ -1,9 +1,9 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
- ::msgcat::mcset fa_IR AM "\u0635\u0628\u062d"
- ::msgcat::mcset fa_IR PM "\u0639\u0635\u0631"
- ::msgcat::mcset fa_IR DATE_FORMAT "%d\u2044%m\u2044%Y"
+ ::msgcat::mcset fa_IR AM "صبح"
+ ::msgcat::mcset fa_IR PM "عصر"
+ ::msgcat::mcset fa_IR DATE_FORMAT "%d⁄%m⁄%Y"
::msgcat::mcset fa_IR TIME_FORMAT "%S:%M:%H"
::msgcat::mcset fa_IR TIME_FORMAT_12 "%S:%M:%l %P"
- ::msgcat::mcset fa_IR DATE_TIME_FORMAT "%d\u2044%m\u2044%Y %S:%M:%H %z"
+ ::msgcat::mcset fa_IR DATE_TIME_FORMAT "%d⁄%m⁄%Y %S:%M:%H %z"
}
diff --git a/library/msgs/fi.msg b/library/msgs/fi.msg
index acabba0..69be367 100644
--- a/library/msgs/fi.msg
+++ b/library/msgs/fi.msg
@@ -22,8 +22,8 @@ namespace eval ::tcl::clock {
"maalis"\
"huhti"\
"touko"\
- "kes\u00e4"\
- "hein\u00e4"\
+ "kesä"\
+ "heinä"\
"elo"\
"syys"\
"loka"\
@@ -36,8 +36,8 @@ namespace eval ::tcl::clock {
"maaliskuu"\
"huhtikuu"\
"toukokuu"\
- "kes\u00e4kuu"\
- "hein\u00e4kuu"\
+ "kesäkuu"\
+ "heinäkuu"\
"elokuu"\
"syyskuu"\
"lokakuu"\
diff --git a/library/msgs/fo.msg b/library/msgs/fo.msg
index 4696e62..1f1794d 100644
--- a/library/msgs/fo.msg
+++ b/library/msgs/fo.msg
@@ -2,19 +2,19 @@
namespace eval ::tcl::clock {
::msgcat::mcset fo DAYS_OF_WEEK_ABBREV [list \
"sun"\
- "m\u00e1n"\
- "t\u00fds"\
+ "mán"\
+ "týs"\
"mik"\
- "h\u00f3s"\
- "fr\u00ed"\
+ "hós"\
+ "frí"\
"ley"]
::msgcat::mcset fo DAYS_OF_WEEK_FULL [list \
"sunnudagur"\
- "m\u00e1nadagur"\
- "t\u00fdsdagur"\
+ "mánadagur"\
+ "týsdagur"\
"mikudagur"\
- "h\u00f3sdagur"\
- "fr\u00edggjadagur"\
+ "hósdagur"\
+ "fríggjadagur"\
"leygardagur"]
::msgcat::mcset fo MONTHS_ABBREV [list \
"jan"\
@@ -34,7 +34,7 @@ namespace eval ::tcl::clock {
"januar"\
"februar"\
"mars"\
- "apr\u00edl"\
+ "apríl"\
"mai"\
"juni"\
"juli"\
diff --git a/library/msgs/fr.msg b/library/msgs/fr.msg
index 55b19bf..a274468 100644
--- a/library/msgs/fr.msg
+++ b/library/msgs/fr.msg
@@ -18,31 +18,31 @@ namespace eval ::tcl::clock {
"samedi"]
::msgcat::mcset fr MONTHS_ABBREV [list \
"janv."\
- "f\u00e9vr."\
+ "févr."\
"mars"\
"avr."\
"mai"\
"juin"\
"juil."\
- "ao\u00fbt"\
+ "août"\
"sept."\
"oct."\
"nov."\
- "d\u00e9c."\
+ "déc."\
""]
::msgcat::mcset fr MONTHS_FULL [list \
"janvier"\
- "f\u00e9vrier"\
+ "février"\
"mars"\
"avril"\
"mai"\
"juin"\
"juillet"\
- "ao\u00fbt"\
+ "août"\
"septembre"\
"octobre"\
"novembre"\
- "d\u00e9cembre"\
+ "décembre"\
""]
::msgcat::mcset fr BCE "av. J.-C."
::msgcat::mcset fr CE "ap. J.-C."
diff --git a/library/msgs/ga.msg b/library/msgs/ga.msg
index 6edf13a..056c9a0 100644
--- a/library/msgs/ga.msg
+++ b/library/msgs/ga.msg
@@ -3,45 +3,45 @@ namespace eval ::tcl::clock {
::msgcat::mcset ga DAYS_OF_WEEK_ABBREV [list \
"Domh"\
"Luan"\
- "M\u00e1irt"\
- "C\u00e9ad"\
- "D\u00e9ar"\
+ "Máirt"\
+ "Céad"\
+ "Déar"\
"Aoine"\
"Sath"]
::msgcat::mcset ga DAYS_OF_WEEK_FULL [list \
- "D\u00e9 Domhnaigh"\
- "D\u00e9 Luain"\
- "D\u00e9 M\u00e1irt"\
- "D\u00e9 C\u00e9adaoin"\
- "D\u00e9ardaoin"\
- "D\u00e9 hAoine"\
- "D\u00e9 Sathairn"]
+ "Dé Domhnaigh"\
+ "Dé Luain"\
+ "Dé Máirt"\
+ "Dé Céadaoin"\
+ "Déardaoin"\
+ "Dé hAoine"\
+ "Dé Sathairn"]
::msgcat::mcset ga MONTHS_ABBREV [list \
"Ean"\
"Feabh"\
- "M\u00e1rta"\
+ "Márta"\
"Aib"\
"Beal"\
"Meith"\
- "I\u00fail"\
- "L\u00fan"\
- "MF\u00f3mh"\
- "DF\u00f3mh"\
+ "Iúil"\
+ "Lún"\
+ "MFómh"\
+ "DFómh"\
"Samh"\
"Noll"\
""]
::msgcat::mcset ga MONTHS_FULL [list \
- "Ean\u00e1ir"\
+ "Eanáir"\
"Feabhra"\
- "M\u00e1rta"\
- "Aibre\u00e1n"\
- "M\u00ed na Bealtaine"\
+ "Márta"\
+ "Aibreán"\
+ "Mí na Bealtaine"\
"Meith"\
- "I\u00fail"\
- "L\u00fanasa"\
- "Me\u00e1n F\u00f3mhair"\
- "Deireadh F\u00f3mhair"\
- "M\u00ed na Samhna"\
- "M\u00ed na Nollag"\
+ "Iúil"\
+ "Lúnasa"\
+ "Meán Fómhair"\
+ "Deireadh Fómhair"\
+ "Mí na Samhna"\
+ "Mí na Nollag"\
""]
}
diff --git a/library/msgs/gl.msg b/library/msgs/gl.msg
index 4b869e8..c2fefc9 100644
--- a/library/msgs/gl.msg
+++ b/library/msgs/gl.msg
@@ -4,25 +4,25 @@ namespace eval ::tcl::clock {
"Dom"\
"Lun"\
"Mar"\
- "M\u00e9r"\
+ "Mér"\
"Xov"\
"Ven"\
- "S\u00e1b"]
+ "Sáb"]
::msgcat::mcset gl DAYS_OF_WEEK_FULL [list \
"Domingo"\
"Luns"\
"Martes"\
- "M\u00e9rcores"\
+ "Mércores"\
"Xoves"\
"Venres"\
- "S\u00e1bado"]
+ "Sábado"]
::msgcat::mcset gl MONTHS_ABBREV [list \
"Xan"\
"Feb"\
"Mar"\
"Abr"\
"Mai"\
- "Xu\u00f1"\
+ "Xuñ"\
"Xul"\
"Ago"\
"Set"\
@@ -36,7 +36,7 @@ namespace eval ::tcl::clock {
"Marzo"\
"Abril"\
"Maio"\
- "Xu\u00f1o"\
+ "Xuño"\
"Xullo"\
"Agosto"\
"Setembro"\
diff --git a/library/msgs/he.msg b/library/msgs/he.msg
index 4fd921d..13a81b7 100644
--- a/library/msgs/he.msg
+++ b/library/msgs/he.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset he DAYS_OF_WEEK_ABBREV [list \
- "\u05d0"\
- "\u05d1"\
- "\u05d2"\
- "\u05d3"\
- "\u05d4"\
- "\u05d5"\
- "\u05e9"]
+ "א"\
+ "ב"\
+ "ג"\
+ "ד"\
+ "ה"\
+ "ו"\
+ "ש"]
::msgcat::mcset he DAYS_OF_WEEK_FULL [list \
- "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df"\
- "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9"\
- "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9"\
- "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9"\
- "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9"\
- "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9"\
- "\u05e9\u05d1\u05ea"]
+ "יום ראשון"\
+ "יום שני"\
+ "יום שלישי"\
+ "יום רביעי"\
+ "יום חמישי"\
+ "יום שישי"\
+ "שבת"]
::msgcat::mcset he MONTHS_ABBREV [list \
- "\u05d9\u05e0\u05d5"\
- "\u05e4\u05d1\u05e8"\
- "\u05de\u05e8\u05e5"\
- "\u05d0\u05e4\u05e8"\
- "\u05de\u05d0\u05d9"\
- "\u05d9\u05d5\u05e0"\
- "\u05d9\u05d5\u05dc"\
- "\u05d0\u05d5\u05d2"\
- "\u05e1\u05e4\u05d8"\
- "\u05d0\u05d5\u05e7"\
- "\u05e0\u05d5\u05d1"\
- "\u05d3\u05e6\u05de"\
+ "ינו"\
+ "פבר"\
+ "מרץ"\
+ "אפר"\
+ "מאי"\
+ "יונ"\
+ "יול"\
+ "אוג"\
+ "ספט"\
+ "אוק"\
+ "נוב"\
+ "דצמ"\
""]
::msgcat::mcset he MONTHS_FULL [list \
- "\u05d9\u05e0\u05d5\u05d0\u05e8"\
- "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8"\
- "\u05de\u05e8\u05e5"\
- "\u05d0\u05e4\u05e8\u05d9\u05dc"\
- "\u05de\u05d0\u05d9"\
- "\u05d9\u05d5\u05e0\u05d9"\
- "\u05d9\u05d5\u05dc\u05d9"\
- "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8"\
- "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8"\
- "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8"\
- "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8"\
- "\u05d3\u05e6\u05de\u05d1\u05e8"\
+ "ינואר"\
+ "פברואר"\
+ "מרץ"\
+ "אפריל"\
+ "מאי"\
+ "יוני"\
+ "יולי"\
+ "אוגוסט"\
+ "ספטמבר"\
+ "אוקטובר"\
+ "נובמבר"\
+ "דצמבר"\
""]
- ::msgcat::mcset he BCE "\u05dc\u05e1\u05d4\u0022\u05e0"
- ::msgcat::mcset he CE "\u05dc\u05e4\u05e1\u05d4\u0022\u05e0"
+ ::msgcat::mcset he BCE "לסה"נ"
+ ::msgcat::mcset he CE "לפסה"נ"
::msgcat::mcset he DATE_FORMAT "%d/%m/%Y"
::msgcat::mcset he TIME_FORMAT "%H:%M:%S"
::msgcat::mcset he DATE_TIME_FORMAT "%d/%m/%Y %H:%M:%S %z"
diff --git a/library/msgs/hi.msg b/library/msgs/hi.msg
index 50c9fb8..18c8bf0 100644
--- a/library/msgs/hi.msg
+++ b/library/msgs/hi.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset hi DAYS_OF_WEEK_FULL [list \
- "\u0930\u0935\u093f\u0935\u093e\u0930"\
- "\u0938\u094b\u092e\u0935\u093e\u0930"\
- "\u092e\u0902\u0917\u0932\u0935\u093e\u0930"\
- "\u092c\u0941\u0927\u0935\u093e\u0930"\
- "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\
- "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\
- "\u0936\u0928\u093f\u0935\u093e\u0930"]
+ "रविवार"\
+ "सोमवार"\
+ "मंगलवार"\
+ "बुधवार"\
+ "गुरुवार"\
+ "शुक्रवार"\
+ "शनिवार"]
::msgcat::mcset hi MONTHS_ABBREV [list \
- "\u091c\u0928\u0935\u0930\u0940"\
- "\u092b\u093c\u0930\u0935\u0930\u0940"\
- "\u092e\u093e\u0930\u094d\u091a"\
- "\u0905\u092a\u094d\u0930\u0947\u0932"\
- "\u092e\u0908"\
- "\u091c\u0942\u0928"\
- "\u091c\u0941\u0932\u093e\u0908"\
- "\u0905\u0917\u0938\u094d\u0924"\
- "\u0938\u093f\u0924\u092e\u094d\u092c\u0930"\
- "\u0905\u0915\u094d\u091f\u0942\u092c\u0930"\
- "\u0928\u0935\u092e\u094d\u092c\u0930"\
- "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"]
+ "जनवरी"\
+ "फ़रवरी"\
+ "मार्च"\
+ "अप्रेल"\
+ "मई"\
+ "जून"\
+ "जुलाई"\
+ "अगस्त"\
+ "सितम्बर"\
+ "अक्टूबर"\
+ "नवम्बर"\
+ "दिसम्बर"]
::msgcat::mcset hi MONTHS_FULL [list \
- "\u091c\u0928\u0935\u0930\u0940"\
- "\u092b\u093c\u0930\u0935\u0930\u0940"\
- "\u092e\u093e\u0930\u094d\u091a"\
- "\u0905\u092a\u094d\u0930\u0947\u0932"\
- "\u092e\u0908"\
- "\u091c\u0942\u0928"\
- "\u091c\u0941\u0932\u093e\u0908"\
- "\u0905\u0917\u0938\u094d\u0924"\
- "\u0938\u093f\u0924\u092e\u094d\u092c\u0930"\
- "\u0905\u0915\u094d\u091f\u0942\u092c\u0930"\
- "\u0928\u0935\u092e\u094d\u092c\u0930"\
- "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"]
- ::msgcat::mcset hi AM "\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935"
+ "जनवरी"\
+ "फ़रवरी"\
+ "मार्च"\
+ "अप्रेल"\
+ "मई"\
+ "जून"\
+ "जुलाई"\
+ "अगस्त"\
+ "सितम्बर"\
+ "अक्टूबर"\
+ "नवम्बर"\
+ "दिसम्बर"]
+ ::msgcat::mcset hi AM "ईसापूर्व"
::msgcat::mcset hi PM "."
}
diff --git a/library/msgs/hr.msg b/library/msgs/hr.msg
index cec145b..30491e1 100644
--- a/library/msgs/hr.msg
+++ b/library/msgs/hr.msg
@@ -5,7 +5,7 @@ namespace eval ::tcl::clock {
"pon"\
"uto"\
"sri"\
- "\u010det"\
+ "čet"\
"pet"\
"sub"]
::msgcat::mcset hr DAYS_OF_WEEK_FULL [list \
@@ -13,13 +13,13 @@ namespace eval ::tcl::clock {
"ponedjeljak"\
"utorak"\
"srijeda"\
- "\u010detvrtak"\
+ "četvrtak"\
"petak"\
"subota"]
::msgcat::mcset hr MONTHS_ABBREV [list \
"sij"\
"vel"\
- "o\u017eu"\
+ "ožu"\
"tra"\
"svi"\
"lip"\
@@ -31,9 +31,9 @@ namespace eval ::tcl::clock {
"pro"\
""]
::msgcat::mcset hr MONTHS_FULL [list \
- "sije\u010danj"\
- "velja\u010da"\
- "o\u017eujak"\
+ "siječanj"\
+ "veljača"\
+ "ožujak"\
"travanj"\
"svibanj"\
"lipanj"\
diff --git a/library/msgs/hu.msg b/library/msgs/hu.msg
index e5e68d9..46776dd 100644
--- a/library/msgs/hu.msg
+++ b/library/msgs/hu.msg
@@ -9,21 +9,21 @@ namespace eval ::tcl::clock {
"P"\
"Szo"]
::msgcat::mcset hu DAYS_OF_WEEK_FULL [list \
- "vas\u00e1rnap"\
- "h\u00e9tf\u0151"\
+ "vasárnap"\
+ "hétfő"\
"kedd"\
"szerda"\
- "cs\u00fct\u00f6rt\u00f6k"\
- "p\u00e9ntek"\
+ "csütörtök"\
+ "péntek"\
"szombat"]
::msgcat::mcset hu MONTHS_ABBREV [list \
"jan."\
"febr."\
- "m\u00e1rc."\
- "\u00e1pr."\
- "m\u00e1j."\
- "j\u00fan."\
- "j\u00fal."\
+ "márc."\
+ "ápr."\
+ "máj."\
+ "jún."\
+ "júl."\
"aug."\
"szept."\
"okt."\
@@ -31,16 +31,16 @@ namespace eval ::tcl::clock {
"dec."\
""]
::msgcat::mcset hu MONTHS_FULL [list \
- "janu\u00e1r"\
- "febru\u00e1r"\
- "m\u00e1rcius"\
- "\u00e1prilis"\
- "m\u00e1jus"\
- "j\u00fanius"\
- "j\u00falius"\
+ "január"\
+ "február"\
+ "március"\
+ "április"\
+ "május"\
+ "június"\
+ "július"\
"augusztus"\
"szeptember"\
- "okt\u00f3ber"\
+ "október"\
"november"\
"december"\
""]
diff --git a/library/msgs/is.msg b/library/msgs/is.msg
index adc2d2a..a369b89 100644
--- a/library/msgs/is.msg
+++ b/library/msgs/is.msg
@@ -2,46 +2,46 @@
namespace eval ::tcl::clock {
::msgcat::mcset is DAYS_OF_WEEK_ABBREV [list \
"sun."\
- "m\u00e1n."\
- "\u00feri."\
- "mi\u00f0."\
+ "mán."\
+ "þri."\
+ "mið."\
"fim."\
- "f\u00f6s."\
+ "fös."\
"lau."]
::msgcat::mcset is DAYS_OF_WEEK_FULL [list \
"sunnudagur"\
- "m\u00e1nudagur"\
- "\u00feri\u00f0judagur"\
- "mi\u00f0vikudagur"\
+ "mánudagur"\
+ "þriðjudagur"\
+ "miðvikudagur"\
"fimmtudagur"\
- "f\u00f6studagur"\
+ "föstudagur"\
"laugardagur"]
::msgcat::mcset is MONTHS_ABBREV [list \
"jan."\
"feb."\
"mar."\
"apr."\
- "ma\u00ed"\
- "j\u00fan."\
- "j\u00fal."\
- "\u00e1g\u00fa."\
+ "maí"\
+ "jún."\
+ "júl."\
+ "ágú."\
"sep."\
"okt."\
- "n\u00f3v."\
+ "nóv."\
"des."\
""]
::msgcat::mcset is MONTHS_FULL [list \
- "jan\u00faar"\
- "febr\u00faar"\
+ "janúar"\
+ "febrúar"\
"mars"\
- "apr\u00edl"\
- "ma\u00ed"\
- "j\u00fan\u00ed"\
- "j\u00fal\u00ed"\
- "\u00e1g\u00fast"\
+ "apríl"\
+ "maí"\
+ "júní"\
+ "júlí"\
+ "ágúst"\
"september"\
- "okt\u00f3ber"\
- "n\u00f3vember"\
+ "október"\
+ "nóvember"\
"desember"\
""]
::msgcat::mcset is DATE_FORMAT "%e.%m.%Y"
diff --git a/library/msgs/it.msg b/library/msgs/it.msg
index b641cde..e51aee2 100644
--- a/library/msgs/it.msg
+++ b/library/msgs/it.msg
@@ -10,11 +10,11 @@ namespace eval ::tcl::clock {
"sab"]
::msgcat::mcset it DAYS_OF_WEEK_FULL [list \
"domenica"\
- "luned\u00ec"\
- "marted\u00ec"\
- "mercoled\u00ec"\
- "gioved\u00ec"\
- "venerd\u00ec"\
+ "lunedì"\
+ "martedì"\
+ "mercoledì"\
+ "giovedì"\
+ "venerdì"\
"sabato"]
::msgcat::mcset it MONTHS_ABBREV [list \
"gen"\
diff --git a/library/msgs/ja.msg b/library/msgs/ja.msg
index cf70c2f..dac690b 100644
--- a/library/msgs/ja.msg
+++ b/library/msgs/ja.msg
@@ -1,44 +1,44 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ja DAYS_OF_WEEK_ABBREV [list \
- "\u65e5"\
- "\u6708"\
- "\u706b"\
- "\u6c34"\
- "\u6728"\
- "\u91d1"\
- "\u571f"]
+ "日"\
+ "月"\
+ "火"\
+ "水"\
+ "木"\
+ "金"\
+ "土"]
::msgcat::mcset ja DAYS_OF_WEEK_FULL [list \
- "\u65e5\u66dc\u65e5"\
- "\u6708\u66dc\u65e5"\
- "\u706b\u66dc\u65e5"\
- "\u6c34\u66dc\u65e5"\
- "\u6728\u66dc\u65e5"\
- "\u91d1\u66dc\u65e5"\
- "\u571f\u66dc\u65e5"]
+ "日曜日"\
+ "月曜日"\
+ "火曜日"\
+ "水曜日"\
+ "木曜日"\
+ "金曜日"\
+ "土曜日"]
::msgcat::mcset ja MONTHS_FULL [list \
- "1\u6708"\
- "2\u6708"\
- "3\u6708"\
- "4\u6708"\
- "5\u6708"\
- "6\u6708"\
- "7\u6708"\
- "8\u6708"\
- "9\u6708"\
- "10\u6708"\
- "11\u6708"\
- "12\u6708"]
- ::msgcat::mcset ja BCE "\u7d00\u5143\u524d"
- ::msgcat::mcset ja CE "\u897f\u66a6"
- ::msgcat::mcset ja AM "\u5348\u524d"
- ::msgcat::mcset ja PM "\u5348\u5f8c"
+ "1月"\
+ "2月"\
+ "3月"\
+ "4月"\
+ "5月"\
+ "6月"\
+ "7月"\
+ "8月"\
+ "9月"\
+ "10月"\
+ "11月"\
+ "12月"]
+ ::msgcat::mcset ja BCE "紀元前"
+ ::msgcat::mcset ja CE "西暦"
+ ::msgcat::mcset ja AM "午前"
+ ::msgcat::mcset ja PM "午後"
::msgcat::mcset ja DATE_FORMAT "%Y/%m/%d"
::msgcat::mcset ja TIME_FORMAT "%k:%M:%S"
::msgcat::mcset ja TIME_FORMAT_12 "%P %I:%M:%S"
::msgcat::mcset ja DATE_TIME_FORMAT "%Y/%m/%d %k:%M:%S %z"
- ::msgcat::mcset ja LOCALE_DATE_FORMAT "%EY\u5e74%m\u6708%d\u65e5"
- ::msgcat::mcset ja LOCALE_TIME_FORMAT "%H\u6642%M\u5206%S\u79d2"
- ::msgcat::mcset ja LOCALE_DATE_TIME_FORMAT "%EY\u5e74%m\u6708%d\u65e5 (%a) %H\u6642%M\u5206%S\u79d2 %z"
- ::msgcat::mcset ja LOCALE_ERAS "{-9223372036854775808 \u897f\u66a6 0} {-3061011600 \u660e\u6cbb 1867} {-1812186000 \u5927\u6b63 1911} {-1357635600 \u662d\u548c 1925} {600220800 \u5e73\u6210 1988} {1556668800 \u4ee4\u548c 2018}"
+ ::msgcat::mcset ja LOCALE_DATE_FORMAT "%EY年%m月%d日"
+ ::msgcat::mcset ja LOCALE_TIME_FORMAT "%H時%M分%S秒"
+ ::msgcat::mcset ja LOCALE_DATE_TIME_FORMAT "%EY年%m月%d日 (%a) %H時%M分%S秒 %z"
+ ::msgcat::mcset ja LOCALE_ERAS "{-9223372036854775808 西暦 0} {-3061011600 明治 1867} {-1812186000 大正 1911} {-1357635600 昭和 1925} {600220800 平成 1988} {1556668800 令和 2018}"
}
diff --git a/library/msgs/ko.msg b/library/msgs/ko.msg
index 0cd17a1..817c2e7 100644
--- a/library/msgs/ko.msg
+++ b/library/msgs/ko.msg
@@ -1,55 +1,55 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ko DAYS_OF_WEEK_ABBREV [list \
- "\uc77c"\
- "\uc6d4"\
- "\ud654"\
- "\uc218"\
- "\ubaa9"\
- "\uae08"\
- "\ud1a0"]
+ "일"\
+ "월"\
+ "화"\
+ "수"\
+ "목"\
+ "금"\
+ "토"]
::msgcat::mcset ko DAYS_OF_WEEK_FULL [list \
- "\uc77c\uc694\uc77c"\
- "\uc6d4\uc694\uc77c"\
- "\ud654\uc694\uc77c"\
- "\uc218\uc694\uc77c"\
- "\ubaa9\uc694\uc77c"\
- "\uae08\uc694\uc77c"\
- "\ud1a0\uc694\uc77c"]
+ "일요일"\
+ "월요일"\
+ "화요일"\
+ "수요일"\
+ "목요일"\
+ "금요일"\
+ "토요일"]
::msgcat::mcset ko MONTHS_ABBREV [list \
- "1\uc6d4"\
- "2\uc6d4"\
- "3\uc6d4"\
- "4\uc6d4"\
- "5\uc6d4"\
- "6\uc6d4"\
- "7\uc6d4"\
- "8\uc6d4"\
- "9\uc6d4"\
- "10\uc6d4"\
- "11\uc6d4"\
- "12\uc6d4"\
+ "1월"\
+ "2월"\
+ "3월"\
+ "4월"\
+ "5월"\
+ "6월"\
+ "7월"\
+ "8월"\
+ "9월"\
+ "10월"\
+ "11월"\
+ "12월"\
""]
::msgcat::mcset ko MONTHS_FULL [list \
- "1\uc6d4"\
- "2\uc6d4"\
- "3\uc6d4"\
- "4\uc6d4"\
- "5\uc6d4"\
- "6\uc6d4"\
- "7\uc6d4"\
- "8\uc6d4"\
- "9\uc6d4"\
- "10\uc6d4"\
- "11\uc6d4"\
- "12\uc6d4"\
+ "1월"\
+ "2월"\
+ "3월"\
+ "4월"\
+ "5월"\
+ "6월"\
+ "7월"\
+ "8월"\
+ "9월"\
+ "10월"\
+ "11월"\
+ "12월"\
""]
- ::msgcat::mcset ko AM "\uc624\uc804"
- ::msgcat::mcset ko PM "\uc624\ud6c4"
+ ::msgcat::mcset ko AM "오전"
+ ::msgcat::mcset ko PM "오후"
::msgcat::mcset ko DATE_FORMAT "%Y-%m-%d"
::msgcat::mcset ko TIME_FORMAT_12 "%P %l:%M:%S"
::msgcat::mcset ko DATE_TIME_FORMAT "%Y-%m-%d %P %l:%M:%S %z"
- ::msgcat::mcset ko LOCALE_DATE_FORMAT "%Y\ub144%B%Od\uc77c"
- ::msgcat::mcset ko LOCALE_TIME_FORMAT "%H\uc2dc%M\ubd84%S\ucd08"
- ::msgcat::mcset ko LOCALE_DATE_TIME_FORMAT "%A %Y\ub144%B%Od\uc77c%H\uc2dc%M\ubd84%S\ucd08 %z"
+ ::msgcat::mcset ko LOCALE_DATE_FORMAT "%Y년%B%Od일"
+ ::msgcat::mcset ko LOCALE_TIME_FORMAT "%H시%M분%S초"
+ ::msgcat::mcset ko LOCALE_DATE_TIME_FORMAT "%A %Y년%B%Od일%H시%M분%S초 %z"
}
diff --git a/library/msgs/ko_kr.msg b/library/msgs/ko_kr.msg
index ea5bbd7..f23bd6b 100644
--- a/library/msgs/ko_kr.msg
+++ b/library/msgs/ko_kr.msg
@@ -1,7 +1,7 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
- ::msgcat::mcset ko_KR BCE "\uae30\uc6d0\uc804"
- ::msgcat::mcset ko_KR CE "\uc11c\uae30"
+ ::msgcat::mcset ko_KR BCE "기원전"
+ ::msgcat::mcset ko_KR CE "서기"
::msgcat::mcset ko_KR DATE_FORMAT "%Y.%m.%d"
::msgcat::mcset ko_KR TIME_FORMAT_12 "%P %l:%M:%S"
::msgcat::mcset ko_KR DATE_TIME_FORMAT "%Y.%m.%d %P %l:%M:%S %z"
diff --git a/library/msgs/kok.msg b/library/msgs/kok.msg
index 0869f20..231853b 100644
--- a/library/msgs/kok.msg
+++ b/library/msgs/kok.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset kok DAYS_OF_WEEK_FULL [list \
- "\u0906\u0926\u093f\u0924\u094d\u092f\u0935\u093e\u0930"\
- "\u0938\u094b\u092e\u0935\u093e\u0930"\
- "\u092e\u0902\u0917\u0933\u093e\u0930"\
- "\u092c\u0941\u0927\u0935\u093e\u0930"\
- "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\
- "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\
- "\u0936\u0928\u093f\u0935\u093e\u0930"]
+ "आदित्यवार"\
+ "सोमवार"\
+ "मंगळार"\
+ "बुधवार"\
+ "गुरुवार"\
+ "शुक्रवार"\
+ "शनिवार"]
::msgcat::mcset kok MONTHS_ABBREV [list \
- "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\
- "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\
- "\u092e\u093e\u0930\u094d\u091a"\
- "\u090f\u092a\u094d\u0930\u093f\u0932"\
- "\u092e\u0947"\
- "\u091c\u0942\u0928"\
- "\u091c\u0941\u0932\u0948"\
- "\u0913\u0917\u0938\u094d\u091f"\
- "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\
- "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\
- "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\
- "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"]
+ "जानेवारी"\
+ "फेबृवारी"\
+ "मार्च"\
+ "एप्रिल"\
+ "मे"\
+ "जून"\
+ "जुलै"\
+ "ओगस्ट"\
+ "सेप्टेंबर"\
+ "ओक्टोबर"\
+ "नोव्हेंबर"\
+ "डिसेंबर"]
::msgcat::mcset kok MONTHS_FULL [list \
- "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\
- "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940"\
- "\u092e\u093e\u0930\u094d\u091a"\
- "\u090f\u092a\u094d\u0930\u093f\u0932"\
- "\u092e\u0947"\
- "\u091c\u0942\u0928"\
- "\u091c\u0941\u0932\u0948"\
- "\u0913\u0917\u0938\u094d\u091f"\
- "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\
- "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\
- "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\
- "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"]
- ::msgcat::mcset kok AM "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u092a\u0942\u0930\u094d\u0935"
- ::msgcat::mcset kok PM "\u0915\u094d\u0930\u093f\u0938\u094d\u0924\u0936\u0916\u093e"
+ "जानेवारी"\
+ "फेब्रुवारी"\
+ "मार्च"\
+ "एप्रिल"\
+ "मे"\
+ "जून"\
+ "जुलै"\
+ "ओगस्ट"\
+ "सेप्टेंबर"\
+ "ओक्टोबर"\
+ "नोव्हेंबर"\
+ "डिसेंबर"]
+ ::msgcat::mcset kok AM "क्रिस्तपूर्व"
+ ::msgcat::mcset kok PM "क्रिस्तशखा"
}
diff --git a/library/msgs/lt.msg b/library/msgs/lt.msg
index 27b0985..15829a9 100644
--- a/library/msgs/lt.msg
+++ b/library/msgs/lt.msg
@@ -7,15 +7,15 @@ namespace eval ::tcl::clock {
"Tr"\
"Kt"\
"Pn"\
- "\u0160t"]
+ "Št"]
::msgcat::mcset lt DAYS_OF_WEEK_FULL [list \
"Sekmadienis"\
"Pirmadienis"\
"Antradienis"\
- "Tre\u010diadienis"\
+ "Trečiadienis"\
"Ketvirtadienis"\
"Penktadienis"\
- "\u0160e\u0161tadienis"]
+ "Šeštadienis"]
::msgcat::mcset lt MONTHS_ABBREV [list \
"Sau"\
"Vas"\
@@ -34,15 +34,15 @@ namespace eval ::tcl::clock {
"Sausio"\
"Vasario"\
"Kovo"\
- "Baland\u017eio"\
- "Gegu\u017e\u0117s"\
- "Bir\u017eelio"\
+ "Balandžio"\
+ "Gegužės"\
+ "Birželio"\
"Liepos"\
- "Rugpj\u016b\u010dio"\
- "Rugs\u0117jo"\
+ "Rugpjūčio"\
+ "Rugsėjo"\
"Spalio"\
- "Lapkri\u010dio"\
- "Gruod\u017eio"\
+ "Lapkričio"\
+ "Gruodžio"\
""]
::msgcat::mcset lt BCE "pr.Kr."
::msgcat::mcset lt CE "po.Kr."
diff --git a/library/msgs/lv.msg b/library/msgs/lv.msg
index a037b15..730fd33 100644
--- a/library/msgs/lv.msg
+++ b/library/msgs/lv.msg
@@ -9,10 +9,10 @@ namespace eval ::tcl::clock {
"Pk"\
"S"]
::msgcat::mcset lv DAYS_OF_WEEK_FULL [list \
- "sv\u0113tdiena"\
+ "svētdiena"\
"pirmdiena"\
"otrdiena"\
- "tre\u0161diena"\
+ "trešdiena"\
"ceturdien"\
"piektdiena"\
"sestdiena"]
@@ -22,8 +22,8 @@ namespace eval ::tcl::clock {
"Mar"\
"Apr"\
"Maijs"\
- "J\u016bn"\
- "J\u016bl"\
+ "Jūn"\
+ "Jūl"\
"Aug"\
"Sep"\
"Okt"\
@@ -31,21 +31,21 @@ namespace eval ::tcl::clock {
"Dec"\
""]
::msgcat::mcset lv MONTHS_FULL [list \
- "janv\u0101ris"\
- "febru\u0101ris"\
+ "janvāris"\
+ "februāris"\
"marts"\
- "apr\u012blis"\
+ "aprīlis"\
"maijs"\
- "j\u016bnijs"\
- "j\u016blijs"\
+ "jūnijs"\
+ "jūlijs"\
"augusts"\
"septembris"\
"oktobris"\
"novembris"\
"decembris"\
""]
- ::msgcat::mcset lv BCE "pm\u0113"
- ::msgcat::mcset lv CE "m\u0113"
+ ::msgcat::mcset lv BCE "pmē"
+ ::msgcat::mcset lv CE "mē"
::msgcat::mcset lv DATE_FORMAT "%Y.%e.%m"
::msgcat::mcset lv TIME_FORMAT "%H:%M:%S"
::msgcat::mcset lv DATE_TIME_FORMAT "%Y.%e.%m %H:%M:%S %z"
diff --git a/library/msgs/mk.msg b/library/msgs/mk.msg
index 41cf60d..9b7bd9d 100644
--- a/library/msgs/mk.msg
+++ b/library/msgs/mk.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset mk DAYS_OF_WEEK_ABBREV [list \
- "\u043d\u0435\u0434."\
- "\u043f\u043e\u043d."\
- "\u0432\u0442."\
- "\u0441\u0440\u0435."\
- "\u0447\u0435\u0442."\
- "\u043f\u0435\u0442."\
- "\u0441\u0430\u0431."]
+ "нед."\
+ "пон."\
+ "вт."\
+ "сре."\
+ "чет."\
+ "пет."\
+ "саб."]
::msgcat::mcset mk DAYS_OF_WEEK_FULL [list \
- "\u043d\u0435\u0434\u0435\u043b\u0430"\
- "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a"\
- "\u0432\u0442\u043e\u0440\u043d\u0438\u043a"\
- "\u0441\u0440\u0435\u0434\u0430"\
- "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a"\
- "\u043f\u0435\u0442\u043e\u043a"\
- "\u0441\u0430\u0431\u043e\u0442\u0430"]
+ "недела"\
+ "понеделник"\
+ "вторник"\
+ "среда"\
+ "четврток"\
+ "петок"\
+ "сабота"]
::msgcat::mcset mk MONTHS_ABBREV [list \
- "\u0458\u0430\u043d."\
- "\u0444\u0435\u0432."\
- "\u043c\u0430\u0440."\
- "\u0430\u043f\u0440."\
- "\u043c\u0430\u0458."\
- "\u0458\u0443\u043d."\
- "\u0458\u0443\u043b."\
- "\u0430\u0432\u0433."\
- "\u0441\u0435\u043f\u0442."\
- "\u043e\u043a\u0442."\
- "\u043d\u043e\u0435\u043c."\
- "\u0434\u0435\u043a\u0435\u043c."\
+ "јан."\
+ "фев."\
+ "мар."\
+ "апр."\
+ "мај."\
+ "јун."\
+ "јул."\
+ "авг."\
+ "септ."\
+ "окт."\
+ "ноем."\
+ "декем."\
""]
::msgcat::mcset mk MONTHS_FULL [list \
- "\u0458\u0430\u043d\u0443\u0430\u0440\u0438"\
- "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438"\
- "\u043c\u0430\u0440\u0442"\
- "\u0430\u043f\u0440\u0438\u043b"\
- "\u043c\u0430\u0458"\
- "\u0458\u0443\u043d\u0438"\
- "\u0458\u0443\u043b\u0438"\
- "\u0430\u0432\u0433\u0443\u0441\u0442"\
- "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438"\
- "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438"\
- "\u043d\u043e\u0435\u043c\u0432\u0440\u0438"\
- "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"\
+ "јануари"\
+ "февруари"\
+ "март"\
+ "април"\
+ "мај"\
+ "јуни"\
+ "јули"\
+ "август"\
+ "септември"\
+ "октомври"\
+ "ноември"\
+ "декември"\
""]
- ::msgcat::mcset mk BCE "\u043f\u0440.\u043d.\u0435."
- ::msgcat::mcset mk CE "\u0430\u0435."
+ ::msgcat::mcset mk BCE "пр.н.е."
+ ::msgcat::mcset mk CE "ае."
::msgcat::mcset mk DATE_FORMAT "%e.%m.%Y"
::msgcat::mcset mk TIME_FORMAT "%H:%M:%S %z"
::msgcat::mcset mk DATE_TIME_FORMAT "%e.%m.%Y %H:%M:%S %z %z"
diff --git a/library/msgs/mr.msg b/library/msgs/mr.msg
index cea427a..e475615 100644
--- a/library/msgs/mr.msg
+++ b/library/msgs/mr.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset mr DAYS_OF_WEEK_FULL [list \
- "\u0930\u0935\u093f\u0935\u093e\u0930"\
- "\u0938\u094b\u092e\u0935\u093e\u0930"\
- "\u092e\u0902\u0917\u0933\u0935\u093e\u0930"\
- "\u092e\u0902\u0917\u0933\u0935\u093e\u0930"\
- "\u0917\u0941\u0930\u0941\u0935\u093e\u0930"\
- "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930"\
- "\u0936\u0928\u093f\u0935\u093e\u0930"]
+ "रविवार"\
+ "सोमवार"\
+ "मंगळवार"\
+ "मंगळवार"\
+ "गुरुवार"\
+ "शुक्रवार"\
+ "शनिवार"]
::msgcat::mcset mr MONTHS_ABBREV [list \
- "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\
- "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\
- "\u092e\u093e\u0930\u094d\u091a"\
- "\u090f\u092a\u094d\u0930\u093f\u0932"\
- "\u092e\u0947"\
- "\u091c\u0942\u0928"\
- "\u091c\u0941\u0932\u0948"\
- "\u0913\u0917\u0938\u094d\u091f"\
- "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\
- "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\
- "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\
- "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"]
+ "जानेवारी"\
+ "फेबृवारी"\
+ "मार्च"\
+ "एप्रिल"\
+ "मे"\
+ "जून"\
+ "जुलै"\
+ "ओगस्ट"\
+ "सेप्टेंबर"\
+ "ओक्टोबर"\
+ "नोव्हेंबर"\
+ "डिसेंबर"]
::msgcat::mcset mr MONTHS_FULL [list \
- "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940"\
- "\u092b\u0947\u092c\u0943\u0935\u093e\u0930\u0940"\
- "\u092e\u093e\u0930\u094d\u091a"\
- "\u090f\u092a\u094d\u0930\u093f\u0932"\
- "\u092e\u0947"\
- "\u091c\u0942\u0928"\
- "\u091c\u0941\u0932\u0948"\
- "\u0913\u0917\u0938\u094d\u091f"\
- "\u0938\u0947\u092a\u094d\u091f\u0947\u0902\u092c\u0930"\
- "\u0913\u0915\u094d\u091f\u094b\u092c\u0930"\
- "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930"\
- "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"]
+ "जानेवारी"\
+ "फेबृवारी"\
+ "मार्च"\
+ "एप्रिल"\
+ "मे"\
+ "जून"\
+ "जुलै"\
+ "ओगस्ट"\
+ "सेप्टेंबर"\
+ "ओक्टोबर"\
+ "नोव्हेंबर"\
+ "डिसेंबर"]
::msgcat::mcset mr AM "BC"
::msgcat::mcset mr PM "AD"
}
diff --git a/library/msgs/mt.msg b/library/msgs/mt.msg
index ddd5446..c479e47 100644
--- a/library/msgs/mt.msg
+++ b/library/msgs/mt.msg
@@ -1,19 +1,19 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset mt DAYS_OF_WEEK_ABBREV [list \
- "\u0126ad"\
+ "Ħad"\
"Tne"\
"Tli"\
"Erb"\
- "\u0126am"\
- "\u0120im"]
+ "Ħam"\
+ "Ġim"]
::msgcat::mcset mt MONTHS_ABBREV [list \
"Jan"\
"Fra"\
"Mar"\
"Apr"\
"Mej"\
- "\u0120un"\
+ "Ġun"\
"Lul"\
"Awi"\
"Set"\
diff --git a/library/msgs/nb.msg b/library/msgs/nb.msg
index 90d49a3..4dd76c7 100644
--- a/library/msgs/nb.msg
+++ b/library/msgs/nb.msg
@@ -1,21 +1,21 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset nb DAYS_OF_WEEK_ABBREV [list \
- "s\u00f8"\
+ "sø"\
"ma"\
"ti"\
"on"\
"to"\
"fr"\
- "l\u00f8"]
+ "lø"]
::msgcat::mcset nb DAYS_OF_WEEK_FULL [list \
- "s\u00f8ndag"\
+ "søndag"\
"mandag"\
"tirsdag"\
"onsdag"\
"torsdag"\
"fredag"\
- "l\u00f8rdag"]
+ "lørdag"]
::msgcat::mcset nb MONTHS_ABBREV [list \
"jan"\
"feb"\
diff --git a/library/msgs/nn.msg b/library/msgs/nn.msg
index bd61ac9..b61a2dd 100644
--- a/library/msgs/nn.msg
+++ b/library/msgs/nn.msg
@@ -2,7 +2,7 @@
namespace eval ::tcl::clock {
::msgcat::mcset nn DAYS_OF_WEEK_ABBREV [list \
"su"\
- "m\u00e5"\
+ "må"\
"ty"\
"on"\
"to"\
@@ -10,7 +10,7 @@ namespace eval ::tcl::clock {
"lau"]
::msgcat::mcset nn DAYS_OF_WEEK_FULL [list \
"sundag"\
- "m\u00e5ndag"\
+ "måndag"\
"tysdag"\
"onsdag"\
"torsdag"\
diff --git a/library/msgs/pl.msg b/library/msgs/pl.msg
index d206f4b..821eea7 100644
--- a/library/msgs/pl.msg
+++ b/library/msgs/pl.msg
@@ -4,17 +4,17 @@ namespace eval ::tcl::clock {
"N"\
"Pn"\
"Wt"\
- "\u015ar"\
+ "Śr"\
"Cz"\
"Pt"\
"So"]
::msgcat::mcset pl DAYS_OF_WEEK_FULL [list \
"niedziela"\
- "poniedzia\u0142ek"\
+ "poniedziałek"\
"wtorek"\
- "\u015broda"\
+ "środa"\
"czwartek"\
- "pi\u0105tek"\
+ "piątek"\
"sobota"]
::msgcat::mcset pl MONTHS_ABBREV [list \
"sty"\
@@ -26,23 +26,23 @@ namespace eval ::tcl::clock {
"lip"\
"sie"\
"wrz"\
- "pa\u017a"\
+ "paź"\
"lis"\
"gru"\
""]
::msgcat::mcset pl MONTHS_FULL [list \
- "stycze\u0144"\
+ "styczeń"\
"luty"\
"marzec"\
- "kwiecie\u0144"\
+ "kwiecień"\
"maj"\
"czerwiec"\
"lipiec"\
- "sierpie\u0144"\
- "wrzesie\u0144"\
- "pa\u017adziernik"\
+ "sierpień"\
+ "wrzesień"\
+ "październik"\
"listopad"\
- "grudzie\u0144"\
+ "grudzień"\
""]
::msgcat::mcset pl BCE "p.n.e."
::msgcat::mcset pl CE "n.e."
diff --git a/library/msgs/pt.msg b/library/msgs/pt.msg
index 96fdb35..425c1f6 100644
--- a/library/msgs/pt.msg
+++ b/library/msgs/pt.msg
@@ -7,15 +7,15 @@ namespace eval ::tcl::clock {
"Qua"\
"Qui"\
"Sex"\
- "S\u00e1b"]
+ "Sáb"]
::msgcat::mcset pt DAYS_OF_WEEK_FULL [list \
"Domingo"\
"Segunda-feira"\
- "Ter\u00e7a-feira"\
+ "Terça-feira"\
"Quarta-feira"\
"Quinta-feira"\
"Sexta-feira"\
- "S\u00e1bado"]
+ "Sábado"]
::msgcat::mcset pt MONTHS_ABBREV [list \
"Jan"\
"Fev"\
@@ -33,7 +33,7 @@ namespace eval ::tcl::clock {
::msgcat::mcset pt MONTHS_FULL [list \
"Janeiro"\
"Fevereiro"\
- "Mar\u00e7o"\
+ "Março"\
"Abril"\
"Maio"\
"Junho"\
diff --git a/library/msgs/ro.msg b/library/msgs/ro.msg
index bdd7c61..f4452ba 100644
--- a/library/msgs/ro.msg
+++ b/library/msgs/ro.msg
@@ -9,13 +9,13 @@ namespace eval ::tcl::clock {
"V"\
"S"]
::msgcat::mcset ro DAYS_OF_WEEK_FULL [list \
- "duminic\u0103"\
+ "duminică"\
"luni"\
- "mar\u0163i"\
+ "marţi"\
"miercuri"\
"joi"\
"vineri"\
- "s\u00eemb\u0103t\u0103"]
+ "sîmbătă"]
::msgcat::mcset ro MONTHS_ABBREV [list \
"Ian"\
"Feb"\
@@ -45,7 +45,7 @@ namespace eval ::tcl::clock {
"decembrie"\
""]
::msgcat::mcset ro BCE "d.C."
- ::msgcat::mcset ro CE "\u00ee.d.C."
+ ::msgcat::mcset ro CE "î.d.C."
::msgcat::mcset ro DATE_FORMAT "%d.%m.%Y"
::msgcat::mcset ro TIME_FORMAT "%H:%M:%S"
::msgcat::mcset ro DATE_TIME_FORMAT "%d.%m.%Y %H:%M:%S %z"
diff --git a/library/msgs/ru.msg b/library/msgs/ru.msg
index 65b075d..983a253 100644
--- a/library/msgs/ru.msg
+++ b/library/msgs/ru.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ru DAYS_OF_WEEK_ABBREV [list \
- "\u0412\u0441"\
- "\u041f\u043d"\
- "\u0412\u0442"\
- "\u0421\u0440"\
- "\u0427\u0442"\
- "\u041f\u0442"\
- "\u0421\u0431"]
+ "Вс"\
+ "Пн"\
+ "Вт"\
+ "Ср"\
+ "Чт"\
+ "Пт"\
+ "Сб"]
::msgcat::mcset ru DAYS_OF_WEEK_FULL [list \
- "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435"\
- "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a"\
- "\u0432\u0442\u043e\u0440\u043d\u0438\u043a"\
- "\u0441\u0440\u0435\u0434\u0430"\
- "\u0447\u0435\u0442\u0432\u0435\u0440\u0433"\
- "\u043f\u044f\u0442\u043d\u0438\u0446\u0430"\
- "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"]
+ "воскресенье"\
+ "понедельник"\
+ "вторник"\
+ "среда"\
+ "четверг"\
+ "пятница"\
+ "суббота"]
::msgcat::mcset ru MONTHS_ABBREV [list \
- "\u044f\u043d\u0432"\
- "\u0444\u0435\u0432"\
- "\u043c\u0430\u0440"\
- "\u0430\u043f\u0440"\
- "\u043c\u0430\u0439"\
- "\u0438\u044e\u043d"\
- "\u0438\u044e\u043b"\
- "\u0430\u0432\u0433"\
- "\u0441\u0435\u043d"\
- "\u043e\u043a\u0442"\
- "\u043d\u043e\u044f"\
- "\u0434\u0435\u043a"\
+ "янв"\
+ "фев"\
+ "мар"\
+ "апр"\
+ "май"\
+ "июн"\
+ "июл"\
+ "авг"\
+ "сен"\
+ "окт"\
+ "ноя"\
+ "дек"\
""]
::msgcat::mcset ru MONTHS_FULL [list \
- "\u042f\u043d\u0432\u0430\u0440\u044c"\
- "\u0424\u0435\u0432\u0440\u0430\u043b\u044c"\
- "\u041c\u0430\u0440\u0442"\
- "\u0410\u043f\u0440\u0435\u043b\u044c"\
- "\u041c\u0430\u0439"\
- "\u0418\u044e\u043d\u044c"\
- "\u0418\u044e\u043b\u044c"\
- "\u0410\u0432\u0433\u0443\u0441\u0442"\
- "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c"\
- "\u041e\u043a\u0442\u044f\u0431\u0440\u044c"\
- "\u041d\u043e\u044f\u0431\u0440\u044c"\
- "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"\
+ "Январь"\
+ "Февраль"\
+ "Март"\
+ "Апрель"\
+ "Май"\
+ "Июнь"\
+ "Июль"\
+ "Август"\
+ "Сентябрь"\
+ "Октябрь"\
+ "Ноябрь"\
+ "Декабрь"\
""]
- ::msgcat::mcset ru BCE "\u0434\u043e \u043d.\u044d."
- ::msgcat::mcset ru CE "\u043d.\u044d."
+ ::msgcat::mcset ru BCE "до н.э."
+ ::msgcat::mcset ru CE "н.э."
::msgcat::mcset ru DATE_FORMAT "%d.%m.%Y"
::msgcat::mcset ru TIME_FORMAT "%k:%M:%S"
::msgcat::mcset ru DATE_TIME_FORMAT "%d.%m.%Y %k:%M:%S %z"
diff --git a/library/msgs/sh.msg b/library/msgs/sh.msg
index 6ee0fc7..2e4143d 100644
--- a/library/msgs/sh.msg
+++ b/library/msgs/sh.msg
@@ -5,7 +5,7 @@ namespace eval ::tcl::clock {
"Pon"\
"Uto"\
"Sre"\
- "\u010cet"\
+ "Čet"\
"Pet"\
"Sub"]
::msgcat::mcset sh DAYS_OF_WEEK_FULL [list \
@@ -13,7 +13,7 @@ namespace eval ::tcl::clock {
"Ponedeljak"\
"Utorak"\
"Sreda"\
- "\u010cetvrtak"\
+ "Četvrtak"\
"Petak"\
"Subota"]
::msgcat::mcset sh MONTHS_ABBREV [list \
diff --git a/library/msgs/sk.msg b/library/msgs/sk.msg
index 9b2f0aa..dc6f6b6 100644
--- a/library/msgs/sk.msg
+++ b/library/msgs/sk.msg
@@ -5,15 +5,15 @@ namespace eval ::tcl::clock {
"Po"\
"Ut"\
"St"\
- "\u0160t"\
+ "Št"\
"Pa"\
"So"]
::msgcat::mcset sk DAYS_OF_WEEK_FULL [list \
- "Nede\u013ee"\
+ "Nedeľe"\
"Pondelok"\
"Utorok"\
"Streda"\
- "\u0160tvrtok"\
+ "Štvrtok"\
"Piatok"\
"Sobota"]
::msgcat::mcset sk MONTHS_ABBREV [list \
@@ -21,9 +21,9 @@ namespace eval ::tcl::clock {
"feb"\
"mar"\
"apr"\
- "m\u00e1j"\
- "j\u00fan"\
- "j\u00fal"\
+ "máj"\
+ "jún"\
+ "júl"\
"aug"\
"sep"\
"okt"\
@@ -31,16 +31,16 @@ namespace eval ::tcl::clock {
"dec"\
""]
::msgcat::mcset sk MONTHS_FULL [list \
- "janu\u00e1r"\
- "febru\u00e1r"\
+ "január"\
+ "február"\
"marec"\
- "apr\u00edl"\
- "m\u00e1j"\
- "j\u00fan"\
- "j\u00fal"\
+ "apríl"\
+ "máj"\
+ "jún"\
+ "júl"\
"august"\
"september"\
- "okt\u00f3ber"\
+ "október"\
"november"\
"december"\
""]
diff --git a/library/msgs/sl.msg b/library/msgs/sl.msg
index 42bc509..2ee0a03 100644
--- a/library/msgs/sl.msg
+++ b/library/msgs/sl.msg
@@ -5,7 +5,7 @@ namespace eval ::tcl::clock {
"Pon"\
"Tor"\
"Sre"\
- "\u010cet"\
+ "Čet"\
"Pet"\
"Sob"]
::msgcat::mcset sl DAYS_OF_WEEK_FULL [list \
@@ -13,7 +13,7 @@ namespace eval ::tcl::clock {
"Ponedeljek"\
"Torek"\
"Sreda"\
- "\u010cetrtek"\
+ "Četrtek"\
"Petek"\
"Sobota"]
::msgcat::mcset sl MONTHS_ABBREV [list \
@@ -44,7 +44,7 @@ namespace eval ::tcl::clock {
"november"\
"december"\
""]
- ::msgcat::mcset sl BCE "pr.n.\u0161."
+ ::msgcat::mcset sl BCE "pr.n.š."
::msgcat::mcset sl CE "po Kr."
::msgcat::mcset sl DATE_FORMAT "%Y.%m.%e"
::msgcat::mcset sl TIME_FORMAT "%k:%M:%S"
diff --git a/library/msgs/sq.msg b/library/msgs/sq.msg
index 8fb1fce..65da407 100644
--- a/library/msgs/sq.msg
+++ b/library/msgs/sq.msg
@@ -2,20 +2,20 @@
namespace eval ::tcl::clock {
::msgcat::mcset sq DAYS_OF_WEEK_ABBREV [list \
"Die"\
- "H\u00ebn"\
+ "Hën"\
"Mar"\
- "M\u00ebr"\
+ "Mër"\
"Enj"\
"Pre"\
"Sht"]
::msgcat::mcset sq DAYS_OF_WEEK_FULL [list \
"e diel"\
- "e h\u00ebn\u00eb"\
- "e mart\u00eb"\
- "e m\u00ebrkur\u00eb"\
+ "e hënë"\
+ "e martë"\
+ "e mërkurë"\
"e enjte"\
"e premte"\
- "e shtun\u00eb"]
+ "e shtunë"]
::msgcat::mcset sq MONTHS_ABBREV [list \
"Jan"\
"Shk"\
@@ -27,7 +27,7 @@ namespace eval ::tcl::clock {
"Gsh"\
"Sht"\
"Tet"\
- "N\u00ebn"\
+ "Nën"\
"Dhj"\
""]
::msgcat::mcset sq MONTHS_FULL [list \
@@ -41,7 +41,7 @@ namespace eval ::tcl::clock {
"gusht"\
"shtator"\
"tetor"\
- "n\u00ebntor"\
+ "nëntor"\
"dhjetor"\
""]
::msgcat::mcset sq BCE "p.e.r."
diff --git a/library/msgs/sr.msg b/library/msgs/sr.msg
index 7576668..3d84d6c 100644
--- a/library/msgs/sr.msg
+++ b/library/msgs/sr.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset sr DAYS_OF_WEEK_ABBREV [list \
- "\u041d\u0435\u0434"\
- "\u041f\u043e\u043d"\
- "\u0423\u0442\u043e"\
- "\u0421\u0440\u0435"\
- "\u0427\u0435\u0442"\
- "\u041f\u0435\u0442"\
- "\u0421\u0443\u0431"]
+ "Нед"\
+ "Пон"\
+ "Уто"\
+ "Сре"\
+ "Чет"\
+ "Пет"\
+ "Суб"]
::msgcat::mcset sr DAYS_OF_WEEK_FULL [list \
- "\u041d\u0435\u0434\u0435\u0459\u0430"\
- "\u041f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a"\
- "\u0423\u0442\u043e\u0440\u0430\u043a"\
- "\u0421\u0440\u0435\u0434\u0430"\
- "\u0427\u0435\u0442\u0432\u0440\u0442\u0430\u043a"\
- "\u041f\u0435\u0442\u0430\u043a"\
- "\u0421\u0443\u0431\u043e\u0442\u0430"]
+ "Недеља"\
+ "Понедељак"\
+ "Уторак"\
+ "Среда"\
+ "Четвртак"\
+ "Петак"\
+ "Субота"]
::msgcat::mcset sr MONTHS_ABBREV [list \
- "\u0408\u0430\u043d"\
- "\u0424\u0435\u0431"\
- "\u041c\u0430\u0440"\
- "\u0410\u043f\u0440"\
- "\u041c\u0430\u0458"\
- "\u0408\u0443\u043d"\
- "\u0408\u0443\u043b"\
- "\u0410\u0432\u0433"\
- "\u0421\u0435\u043f"\
- "\u041e\u043a\u0442"\
- "\u041d\u043e\u0432"\
- "\u0414\u0435\u0446"\
+ "Јан"\
+ "Феб"\
+ "Мар"\
+ "Апр"\
+ "Мај"\
+ "Јун"\
+ "Јул"\
+ "Авг"\
+ "Сеп"\
+ "Окт"\
+ "Нов"\
+ "Дец"\
""]
::msgcat::mcset sr MONTHS_FULL [list \
- "\u0408\u0430\u043d\u0443\u0430\u0440"\
- "\u0424\u0435\u0431\u0440\u0443\u0430\u0440"\
- "\u041c\u0430\u0440\u0442"\
- "\u0410\u043f\u0440\u0438\u043b"\
- "\u041c\u0430\u0458"\
- "\u0408\u0443\u043d\u0438"\
- "\u0408\u0443\u043b\u0438"\
- "\u0410\u0432\u0433\u0443\u0441\u0442"\
- "\u0421\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440"\
- "\u041e\u043a\u0442\u043e\u0431\u0430\u0440"\
- "\u041d\u043e\u0432\u0435\u043c\u0431\u0430\u0440"\
- "\u0414\u0435\u0446\u0435\u043c\u0431\u0430\u0440"\
+ "Јануар"\
+ "Фебруар"\
+ "Март"\
+ "Април"\
+ "Мај"\
+ "Јуни"\
+ "Јули"\
+ "Август"\
+ "Септембар"\
+ "Октобар"\
+ "Новембар"\
+ "Децембар"\
""]
- ::msgcat::mcset sr BCE "\u043f. \u043d. \u0435."
- ::msgcat::mcset sr CE "\u043d. \u0435"
+ ::msgcat::mcset sr BCE "п. н. е."
+ ::msgcat::mcset sr CE "н. е"
::msgcat::mcset sr DATE_FORMAT "%Y.%m.%e"
::msgcat::mcset sr TIME_FORMAT "%k.%M.%S"
::msgcat::mcset sr DATE_TIME_FORMAT "%Y.%m.%e %k.%M.%S %z"
diff --git a/library/msgs/sv.msg b/library/msgs/sv.msg
index f7a67c6..5716092 100644
--- a/library/msgs/sv.msg
+++ b/library/msgs/sv.msg
@@ -1,21 +1,21 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset sv DAYS_OF_WEEK_ABBREV [list \
- "s\u00f6"\
- "m\u00e5"\
+ "sö"\
+ "må"\
"ti"\
"on"\
"to"\
"fr"\
- "l\u00f6"]
+ "lö"]
::msgcat::mcset sv DAYS_OF_WEEK_FULL [list \
- "s\u00f6ndag"\
- "m\u00e5ndag"\
+ "söndag"\
+ "måndag"\
"tisdag"\
"onsdag"\
"torsdag"\
"fredag"\
- "l\u00f6rdag"]
+ "lördag"]
::msgcat::mcset sv MONTHS_ABBREV [list \
"jan"\
"feb"\
diff --git a/library/msgs/ta.msg b/library/msgs/ta.msg
index 4abb90c..ea62552 100644
--- a/library/msgs/ta.msg
+++ b/library/msgs/ta.msg
@@ -1,39 +1,39 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset ta DAYS_OF_WEEK_FULL [list \
- "\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1"\
- "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd"\
- "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd"\
- "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd"\
- "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd"\
- "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf"\
- "\u0b9a\u0ba9\u0bbf"]
+ "ஞாயிறு"\
+ "திங்கள்"\
+ "செவ்வாய்"\
+ "புதன்"\
+ "வியாழன்"\
+ "வெள்ளி"\
+ "சனி"]
::msgcat::mcset ta MONTHS_ABBREV [list \
- "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf"\
- "\u0baa\u0bc6\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf"\
- "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd"\
- "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd"\
- "\u0bae\u0bc7"\
- "\u0b9c\u0bc2\u0ba9\u0bcd"\
- "\u0b9c\u0bc2\u0bb2\u0bc8"\
- "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd"\
- "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\
- "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd"\
- "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\
- "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcdr"]
+ "ஜனவரி"\
+ "பெப்ரவரி"\
+ "மார்ச்"\
+ "ஏப்ரல்"\
+ "மே"\
+ "ஜூன்"\
+ "ஜூலை"\
+ "ஆகஸ்ட்"\
+ "செப்டம்பர்"\
+ "அக்டோபர்"\
+ "நவம்பர்"\
+ "டிசம்பர்r"]
::msgcat::mcset ta MONTHS_FULL [list \
- "\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf"\
- "\u0baa\u0bc6\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf"\
- "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd"\
- "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd"\
- "\u0bae\u0bc7"\
- "\u0b9c\u0bc2\u0ba9\u0bcd"\
- "\u0b9c\u0bc2\u0bb2\u0bc8"\
- "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd"\
- "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\
- "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd"\
- "\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd"\
- "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcdr"]
- ::msgcat::mcset ta AM "\u0b95\u0bbf\u0bae\u0bc1"
- ::msgcat::mcset ta PM "\u0b95\u0bbf\u0baa\u0bbf"
+ "ஜனவரி"\
+ "பெப்ரவரி"\
+ "மார்ச்"\
+ "ஏப்ரல்"\
+ "மே"\
+ "ஜூன்"\
+ "ஜூலை"\
+ "ஆகஸ்ட்"\
+ "செப்டம்பர்"\
+ "அக்டோபர்"\
+ "நவம்பர்"\
+ "டிசம்பர்r"]
+ ::msgcat::mcset ta AM "கிமு"
+ ::msgcat::mcset ta PM "கிபி"
}
diff --git a/library/msgs/te.msg b/library/msgs/te.msg
index 6111473..f35ece4 100644
--- a/library/msgs/te.msg
+++ b/library/msgs/te.msg
@@ -1,47 +1,47 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset te DAYS_OF_WEEK_ABBREV [list \
- "\u0c06\u0c26\u0c3f"\
- "\u0c38\u0c4b\u0c2e"\
- "\u0c2e\u0c02\u0c17\u0c33"\
- "\u0c2c\u0c41\u0c27"\
- "\u0c17\u0c41\u0c30\u0c41"\
- "\u0c36\u0c41\u0c15\u0c4d\u0c30"\
- "\u0c36\u0c28\u0c3f"]
+ "ఆది"\
+ "సోమ"\
+ "మంగళ"\
+ "బుధ"\
+ "గురు"\
+ "శుక్ర"\
+ "శని"]
::msgcat::mcset te DAYS_OF_WEEK_FULL [list \
- "\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02"\
- "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02"\
- "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02"\
- "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02"\
- "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02"\
- "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02"\
- "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"]
+ "ఆదివారం"\
+ "సోమవారం"\
+ "మంగళవారం"\
+ "బుధవారం"\
+ "గురువారం"\
+ "శుక్రవారం"\
+ "శనివారం"]
::msgcat::mcset te MONTHS_ABBREV [list \
- "\u0c1c\u0c28\u0c35\u0c30\u0c3f"\
- "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f"\
- "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f"\
- "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d"\
- "\u0c2e\u0c47"\
- "\u0c1c\u0c42\u0c28\u0c4d"\
- "\u0c1c\u0c42\u0c32\u0c48"\
- "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41"\
- "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d"\
- "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d"\
- "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d"\
- "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"\
+ "జనవరి"\
+ "ఫిబ్రవరి"\
+ "మార్చి"\
+ "ఏప్రిల్"\
+ "మే"\
+ "జూన్"\
+ "జూలై"\
+ "ఆగస్టు"\
+ "సెప్టెంబర్"\
+ "అక్టోబర్"\
+ "నవంబర్"\
+ "డిసెంబర్"\
""]
::msgcat::mcset te MONTHS_FULL [list \
- "\u0c1c\u0c28\u0c35\u0c30\u0c3f"\
- "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f"\
- "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f"\
- "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d"\
- "\u0c2e\u0c47"\
- "\u0c1c\u0c42\u0c28\u0c4d"\
- "\u0c1c\u0c42\u0c32\u0c48"\
- "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41"\
- "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d"\
- "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d"\
- "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d"\
- "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"\
+ "జనవరి"\
+ "ఫిబ్రవరి"\
+ "మార్చి"\
+ "ఏప్రిల్"\
+ "మే"\
+ "జూన్"\
+ "జూలై"\
+ "ఆగస్టు"\
+ "సెప్టెంబర్"\
+ "అక్టోబర్"\
+ "నవంబర్"\
+ "డిసెంబర్"\
""]
}
diff --git a/library/msgs/te_in.msg b/library/msgs/te_in.msg
index 61638b5..84dd2b3 100644
--- a/library/msgs/te_in.msg
+++ b/library/msgs/te_in.msg
@@ -1,7 +1,7 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
- ::msgcat::mcset te_IN AM "\u0c2a\u0c42\u0c30\u0c4d\u0c35\u0c3e\u0c39\u0c4d\u0c28"
- ::msgcat::mcset te_IN PM "\u0c05\u0c2a\u0c30\u0c3e\u0c39\u0c4d\u0c28"
+ ::msgcat::mcset te_IN AM "పూర్వాహ్న"
+ ::msgcat::mcset te_IN PM "అపరాహ్న"
::msgcat::mcset te_IN DATE_FORMAT "%d/%m/%Y"
::msgcat::mcset te_IN TIME_FORMAT_12 "%I:%M:%S %P"
::msgcat::mcset te_IN DATE_TIME_FORMAT "%d/%m/%Y %I:%M:%S %P %z"
diff --git a/library/msgs/th.msg b/library/msgs/th.msg
index 7486c35..edaa149 100644
--- a/library/msgs/th.msg
+++ b/library/msgs/th.msg
@@ -1,53 +1,53 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset th DAYS_OF_WEEK_ABBREV [list \
- "\u0e2d\u0e32."\
- "\u0e08."\
- "\u0e2d."\
- "\u0e1e."\
- "\u0e1e\u0e24."\
- "\u0e28."\
- "\u0e2a."]
+ "อา."\
+ "จ."\
+ "อ."\
+ "พ."\
+ "พฤ."\
+ "ศ."\
+ "ส."]
::msgcat::mcset th DAYS_OF_WEEK_FULL [list \
- "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c"\
- "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c"\
- "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23"\
- "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18"\
- "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35"\
- "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c"\
- "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"]
+ "วันอาทิตย์"\
+ "วันจันทร์"\
+ "วันอังคาร"\
+ "วันพุธ"\
+ "วันพฤหัสบดี"\
+ "วันศุกร์"\
+ "วันเสาร์"]
::msgcat::mcset th MONTHS_ABBREV [list \
- "\u0e21.\u0e04."\
- "\u0e01.\u0e1e."\
- "\u0e21\u0e35.\u0e04."\
- "\u0e40\u0e21.\u0e22."\
- "\u0e1e.\u0e04."\
- "\u0e21\u0e34.\u0e22."\
- "\u0e01.\u0e04."\
- "\u0e2a.\u0e04."\
- "\u0e01.\u0e22."\
- "\u0e15.\u0e04."\
- "\u0e1e.\u0e22."\
- "\u0e18.\u0e04."\
+ "ม.ค."\
+ "ก.พ."\
+ "มี.ค."\
+ "เม.ย."\
+ "พ.ค."\
+ "มิ.ย."\
+ "ก.ค."\
+ "ส.ค."\
+ "ก.ย."\
+ "ต.ค."\
+ "พ.ย."\
+ "ธ.ค."\
""]
::msgcat::mcset th MONTHS_FULL [list \
- "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21"\
- "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c"\
- "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21"\
- "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19"\
- "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21"\
- "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19"\
- "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21"\
- "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21"\
- "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19"\
- "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21"\
- "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19"\
- "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"\
+ "มกราคม"\
+ "กุมภาพันธ์"\
+ "มีนาคม"\
+ "เมษายน"\
+ "พฤษภาคม"\
+ "มิถุนายน"\
+ "กรกฎาคม"\
+ "สิงหาคม"\
+ "กันยายน"\
+ "ตุลาคม"\
+ "พฤศจิกายน"\
+ "ธันวาคม"\
""]
- ::msgcat::mcset th BCE "\u0e25\u0e17\u0e35\u0e48"
- ::msgcat::mcset th CE "\u0e04.\u0e28."
- ::msgcat::mcset th AM "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"
- ::msgcat::mcset th PM "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"
+ ::msgcat::mcset th BCE "ลที่"
+ ::msgcat::mcset th CE "ค.ศ."
+ ::msgcat::mcset th AM "ก่อนเที่ยง"
+ ::msgcat::mcset th PM "หลังเที่ยง"
::msgcat::mcset th DATE_FORMAT "%e/%m/%Y"
::msgcat::mcset th TIME_FORMAT "%k:%M:%S"
::msgcat::mcset th DATE_TIME_FORMAT "%e/%m/%Y %k:%M:%S %z"
diff --git a/library/msgs/tr.msg b/library/msgs/tr.msg
index 7b2ecf9..12869ee 100644
--- a/library/msgs/tr.msg
+++ b/library/msgs/tr.msg
@@ -4,27 +4,27 @@ namespace eval ::tcl::clock {
"Paz"\
"Pzt"\
"Sal"\
- "\u00c7ar"\
+ "Çar"\
"Per"\
"Cum"\
"Cmt"]
::msgcat::mcset tr DAYS_OF_WEEK_FULL [list \
"Pazar"\
"Pazartesi"\
- "Sal\u0131"\
- "\u00c7ar\u015famba"\
- "Per\u015fembe"\
+ "Salı"\
+ "Çarşamba"\
+ "Perşembe"\
"Cuma"\
"Cumartesi"]
::msgcat::mcset tr MONTHS_ABBREV [list \
"Oca"\
- "\u015eub"\
+ "Şub"\
"Mar"\
"Nis"\
"May"\
"Haz"\
"Tem"\
- "A\u011fu"\
+ "Ağu"\
"Eyl"\
"Eki"\
"Kas"\
@@ -32,17 +32,17 @@ namespace eval ::tcl::clock {
""]
::msgcat::mcset tr MONTHS_FULL [list \
"Ocak"\
- "\u015eubat"\
+ "Şubat"\
"Mart"\
"Nisan"\
- "May\u0131s"\
+ "Mayıs"\
"Haziran"\
"Temmuz"\
- "A\u011fustos"\
- "Eyl\u00fcl"\
+ "Ağustos"\
+ "Eylül"\
"Ekim"\
- "Kas\u0131m"\
- "Aral\u0131k"\
+ "Kasım"\
+ "Aralık"\
""]
::msgcat::mcset tr DATE_FORMAT "%d.%m.%Y"
::msgcat::mcset tr TIME_FORMAT "%H:%M:%S"
diff --git a/library/msgs/uk.msg b/library/msgs/uk.msg
index 7d4c64a..42eb095 100644
--- a/library/msgs/uk.msg
+++ b/library/msgs/uk.msg
@@ -1,51 +1,51 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset uk DAYS_OF_WEEK_ABBREV [list \
- "\u043d\u0434"\
- "\u043f\u043d"\
- "\u0432\u0442"\
- "\u0441\u0440"\
- "\u0447\u0442"\
- "\u043f\u0442"\
- "\u0441\u0431"]
+ "нд"\
+ "пн"\
+ "вт"\
+ "ср"\
+ "чт"\
+ "пт"\
+ "сб"]
::msgcat::mcset uk DAYS_OF_WEEK_FULL [list \
- "\u043d\u0435\u0434\u0456\u043b\u044f"\
- "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a"\
- "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a"\
- "\u0441\u0435\u0440\u0435\u0434\u0430"\
- "\u0447\u0435\u0442\u0432\u0435\u0440"\
- "\u043f'\u044f\u0442\u043d\u0438\u0446\u044f"\
- "\u0441\u0443\u0431\u043e\u0442\u0430"]
+ "неділя"\
+ "понеділок"\
+ "вівторок"\
+ "середа"\
+ "четвер"\
+ "п'ятниця"\
+ "субота"]
::msgcat::mcset uk MONTHS_ABBREV [list \
- "\u0441\u0456\u0447"\
- "\u043b\u044e\u0442"\
- "\u0431\u0435\u0440"\
- "\u043a\u0432\u0456\u0442"\
- "\u0442\u0440\u0430\u0432"\
- "\u0447\u0435\u0440\u0432"\
- "\u043b\u0438\u043f"\
- "\u0441\u0435\u0440\u043f"\
- "\u0432\u0435\u0440"\
- "\u0436\u043e\u0432\u0442"\
- "\u043b\u0438\u0441\u0442"\
- "\u0433\u0440\u0443\u0434"\
+ "січ"\
+ "лют"\
+ "бер"\
+ "квіт"\
+ "трав"\
+ "черв"\
+ "лип"\
+ "серп"\
+ "вер"\
+ "жовт"\
+ "лист"\
+ "груд"\
""]
::msgcat::mcset uk MONTHS_FULL [list \
- "\u0441\u0456\u0447\u043d\u044f"\
- "\u043b\u044e\u0442\u043e\u0433\u043e"\
- "\u0431\u0435\u0440\u0435\u0437\u043d\u044f"\
- "\u043a\u0432\u0456\u0442\u043d\u044f"\
- "\u0442\u0440\u0430\u0432\u043d\u044f"\
- "\u0447\u0435\u0440\u0432\u043d\u044f"\
- "\u043b\u0438\u043f\u043d\u044f"\
- "\u0441\u0435\u0440\u043f\u043d\u044f"\
- "\u0432\u0435\u0440\u0435\u0441\u043d\u044f"\
- "\u0436\u043e\u0432\u0442\u043d\u044f"\
- "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430"\
- "\u0433\u0440\u0443\u0434\u043d\u044f"\
+ "січня"\
+ "лютого"\
+ "березня"\
+ "квітня"\
+ "травня"\
+ "червня"\
+ "липня"\
+ "серпня"\
+ "вересня"\
+ "жовтня"\
+ "листопада"\
+ "грудня"\
""]
- ::msgcat::mcset uk BCE "\u0434\u043e \u043d.\u0435."
- ::msgcat::mcset uk CE "\u043f\u0456\u0441\u043b\u044f \u043d.\u0435."
+ ::msgcat::mcset uk BCE "до н.е."
+ ::msgcat::mcset uk CE "після н.е."
::msgcat::mcset uk DATE_FORMAT "%e/%m/%Y"
::msgcat::mcset uk TIME_FORMAT "%k:%M:%S"
::msgcat::mcset uk DATE_TIME_FORMAT "%e/%m/%Y %k:%M:%S %z"
diff --git a/library/msgs/vi.msg b/library/msgs/vi.msg
index c98b2a6..3437ebf 100644
--- a/library/msgs/vi.msg
+++ b/library/msgs/vi.msg
@@ -9,13 +9,13 @@ namespace eval ::tcl::clock {
"Th 7"\
"CN"]
::msgcat::mcset vi DAYS_OF_WEEK_FULL [list \
- "Th\u01b0\u0301 hai"\
- "Th\u01b0\u0301 ba"\
- "Th\u01b0\u0301 t\u01b0"\
- "Th\u01b0\u0301 n\u0103m"\
- "Th\u01b0\u0301 s\u00e1u"\
- "Th\u01b0\u0301 ba\u0309y"\
- "Chu\u0309 nh\u00e2\u0323t"]
+ "Thứ hai"\
+ "Thứ ba"\
+ "Thứ tư"\
+ "Thứ năm"\
+ "Thứ sáu"\
+ "Thứ bảy"\
+ "Chủ nhật"]
::msgcat::mcset vi MONTHS_ABBREV [list \
"Thg 1"\
"Thg 2"\
@@ -31,18 +31,18 @@ namespace eval ::tcl::clock {
"Thg 12"\
""]
::msgcat::mcset vi MONTHS_FULL [list \
- "Th\u00e1ng m\u00f4\u0323t"\
- "Th\u00e1ng hai"\
- "Th\u00e1ng ba"\
- "Th\u00e1ng t\u01b0"\
- "Th\u00e1ng n\u0103m"\
- "Th\u00e1ng s\u00e1u"\
- "Th\u00e1ng ba\u0309y"\
- "Th\u00e1ng t\u00e1m"\
- "Th\u00e1ng ch\u00edn"\
- "Th\u00e1ng m\u01b0\u01a1\u0300i"\
- "Th\u00e1ng m\u01b0\u01a1\u0300i m\u00f4\u0323t"\
- "Th\u00e1ng m\u01b0\u01a1\u0300i hai"\
+ "Tháng một"\
+ "Tháng hai"\
+ "Tháng ba"\
+ "Tháng tư"\
+ "Tháng năm"\
+ "Tháng sáu"\
+ "Tháng bảy"\
+ "Tháng tám"\
+ "Tháng chín"\
+ "Tháng mười"\
+ "Tháng mười một"\
+ "Tháng mười hai"\
""]
::msgcat::mcset vi DATE_FORMAT "%d %b %Y"
::msgcat::mcset vi TIME_FORMAT "%H:%M:%S"
diff --git a/library/msgs/zh.msg b/library/msgs/zh.msg
index b799a32..9c1d08b 100644
--- a/library/msgs/zh.msg
+++ b/library/msgs/zh.msg
@@ -1,55 +1,55 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset zh DAYS_OF_WEEK_ABBREV [list \
- "\u661f\u671f\u65e5"\
- "\u661f\u671f\u4e00"\
- "\u661f\u671f\u4e8c"\
- "\u661f\u671f\u4e09"\
- "\u661f\u671f\u56db"\
- "\u661f\u671f\u4e94"\
- "\u661f\u671f\u516d"]
+ "星期日"\
+ "星期一"\
+ "星期二"\
+ "星期三"\
+ "星期四"\
+ "星期五"\
+ "星期六"]
::msgcat::mcset zh DAYS_OF_WEEK_FULL [list \
- "\u661f\u671f\u65e5"\
- "\u661f\u671f\u4e00"\
- "\u661f\u671f\u4e8c"\
- "\u661f\u671f\u4e09"\
- "\u661f\u671f\u56db"\
- "\u661f\u671f\u4e94"\
- "\u661f\u671f\u516d"]
+ "星期日"\
+ "星期一"\
+ "星期二"\
+ "星期三"\
+ "星期四"\
+ "星期五"\
+ "星期六"]
::msgcat::mcset zh MONTHS_ABBREV [list \
- "\u4e00\u6708"\
- "\u4e8c\u6708"\
- "\u4e09\u6708"\
- "\u56db\u6708"\
- "\u4e94\u6708"\
- "\u516d\u6708"\
- "\u4e03\u6708"\
- "\u516b\u6708"\
- "\u4e5d\u6708"\
- "\u5341\u6708"\
- "\u5341\u4e00\u6708"\
- "\u5341\u4e8c\u6708"\
+ "一月"\
+ "二月"\
+ "三月"\
+ "四月"\
+ "五月"\
+ "六月"\
+ "七月"\
+ "八月"\
+ "九月"\
+ "十月"\
+ "十一月"\
+ "十二月"\
""]
::msgcat::mcset zh MONTHS_FULL [list \
- "\u4e00\u6708"\
- "\u4e8c\u6708"\
- "\u4e09\u6708"\
- "\u56db\u6708"\
- "\u4e94\u6708"\
- "\u516d\u6708"\
- "\u4e03\u6708"\
- "\u516b\u6708"\
- "\u4e5d\u6708"\
- "\u5341\u6708"\
- "\u5341\u4e00\u6708"\
- "\u5341\u4e8c\u6708"\
+ "一月"\
+ "二月"\
+ "三月"\
+ "四月"\
+ "五月"\
+ "六月"\
+ "七月"\
+ "八月"\
+ "九月"\
+ "十月"\
+ "十一月"\
+ "十二月"\
""]
- ::msgcat::mcset zh BCE "\u516c\u5143\u524d"
- ::msgcat::mcset zh CE "\u516c\u5143"
- ::msgcat::mcset zh AM "\u4e0a\u5348"
- ::msgcat::mcset zh PM "\u4e0b\u5348"
- ::msgcat::mcset zh LOCALE_NUMERALS "\u3007 \u4e00 \u4e8c \u4e09 \u56db \u4e94 \u516d \u4e03 \u516b \u4e5d \u5341 \u5341\u4e00 \u5341\u4e8c \u5341\u4e09 \u5341\u56db \u5341\u4e94 \u5341\u516d \u5341\u4e03 \u5341\u516b \u5341\u4e5d \u4e8c\u5341 \u5eff\u4e00 \u5eff\u4e8c \u5eff\u4e09 \u5eff\u56db \u5eff\u4e94 \u5eff\u516d \u5eff\u4e03 \u5eff\u516b \u5eff\u4e5d \u4e09\u5341 \u5345\u4e00 \u5345\u4e8c \u5345\u4e09 \u5345\u56db \u5345\u4e94 \u5345\u516d \u5345\u4e03 \u5345\u516b \u5345\u4e5d \u56db\u5341 \u56db\u5341\u4e00 \u56db\u5341\u4e8c \u56db\u5341\u4e09 \u56db\u5341\u56db \u56db\u5341\u4e94 \u56db\u5341\u516d \u56db\u5341\u4e03 \u56db\u5341\u516b \u56db\u5341\u4e5d \u4e94\u5341 \u4e94\u5341\u4e00 \u4e94\u5341\u4e8c \u4e94\u5341\u4e09 \u4e94\u5341\u56db \u4e94\u5341\u4e94 \u4e94\u5341\u516d \u4e94\u5341\u4e03 \u4e94\u5341\u516b \u4e94\u5341\u4e5d \u516d\u5341 \u516d\u5341\u4e00 \u516d\u5341\u4e8c \u516d\u5341\u4e09 \u516d\u5341\u56db \u516d\u5341\u4e94 \u516d\u5341\u516d \u516d\u5341\u4e03 \u516d\u5341\u516b \u516d\u5341\u4e5d \u4e03\u5341 \u4e03\u5341\u4e00 \u4e03\u5341\u4e8c \u4e03\u5341\u4e09 \u4e03\u5341\u56db \u4e03\u5341\u4e94 \u4e03\u5341\u516d \u4e03\u5341\u4e03 \u4e03\u5341\u516b \u4e03\u5341\u4e5d \u516b\u5341 \u516b\u5341\u4e00 \u516b\u5341\u4e8c \u516b\u5341\u4e09 \u516b\u5341\u56db \u516b\u5341\u4e94 \u516b\u5341\u516d \u516b\u5341\u4e03 \u516b\u5341\u516b \u516b\u5341\u4e5d \u4e5d\u5341 \u4e5d\u5341\u4e00 \u4e5d\u5341\u4e8c \u4e5d\u5341\u4e09 \u4e5d\u5341\u56db \u4e5d\u5341\u4e94 \u4e5d\u5341\u516d \u4e5d\u5341\u4e03 \u4e5d\u5341\u516b \u4e5d\u5341\u4e5d"
- ::msgcat::mcset zh LOCALE_DATE_FORMAT "\u516c\u5143%Y\u5e74%B%Od\u65e5"
- ::msgcat::mcset zh LOCALE_TIME_FORMAT "%OH\u65f6%OM\u5206%OS\u79d2"
- ::msgcat::mcset zh LOCALE_DATE_TIME_FORMAT "%A %Y\u5e74%B%Od\u65e5%OH\u65f6%OM\u5206%OS\u79d2 %z"
+ ::msgcat::mcset zh BCE "公元前"
+ ::msgcat::mcset zh CE "公元"
+ ::msgcat::mcset zh AM "上午"
+ ::msgcat::mcset zh PM "下午"
+ ::msgcat::mcset zh LOCALE_NUMERALS "〇 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 廿一 廿二 廿三 廿四 廿五 廿六 廿七 廿八 廿九 三十 卅一 卅二 卅三 卅四 卅五 卅六 卅七 卅八 卅九 四十 四十一 四十二 四十三 四十四 四十五 四十六 四十七 四十八 四十九 五十 五十一 五十二 五十三 五十四 五十五 五十六 五十七 五十八 五十九 六十 六十一 六十二 六十三 六十四 六十五 六十六 六十七 六十八 六十九 七十 七十一 七十二 七十三 七十四 七十五 七十六 七十七 七十八 七十九 八十 八十一 八十二 八十三 八十四 八十五 八十六 八十七 八十八 八十九 九十 九十一 九十二 九十三 九十四 九十五 九十六 九十七 九十八 九十九"
+ ::msgcat::mcset zh LOCALE_DATE_FORMAT "公元%Y年%B%Od日"
+ ::msgcat::mcset zh LOCALE_TIME_FORMAT "%OH时%OM分%OS秒"
+ ::msgcat::mcset zh LOCALE_DATE_TIME_FORMAT "%A %Y年%B%Od日%OH时%OM分%OS秒 %z"
}
diff --git a/library/msgs/zh_cn.msg b/library/msgs/zh_cn.msg
index d62ce77..da2869a 100644
--- a/library/msgs/zh_cn.msg
+++ b/library/msgs/zh_cn.msg
@@ -2,6 +2,6 @@
namespace eval ::tcl::clock {
::msgcat::mcset zh_CN DATE_FORMAT "%Y-%m-%e"
::msgcat::mcset zh_CN TIME_FORMAT "%k:%M:%S"
- ::msgcat::mcset zh_CN TIME_FORMAT_12 "%P%I\u65f6%M\u5206%S\u79d2"
+ ::msgcat::mcset zh_CN TIME_FORMAT_12 "%P%I时%M分%S秒"
::msgcat::mcset zh_CN DATE_TIME_FORMAT "%Y-%m-%e %k:%M:%S %z"
}
diff --git a/library/msgs/zh_hk.msg b/library/msgs/zh_hk.msg
index badb1dd..7f1b181 100644
--- a/library/msgs/zh_hk.msg
+++ b/library/msgs/zh_hk.msg
@@ -1,28 +1,28 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
::msgcat::mcset zh_HK DAYS_OF_WEEK_ABBREV [list \
- "\u65e5"\
- "\u4e00"\
- "\u4e8c"\
- "\u4e09"\
- "\u56db"\
- "\u4e94"\
- "\u516d"]
+ "日"\
+ "一"\
+ "二"\
+ "三"\
+ "四"\
+ "五"\
+ "六"]
::msgcat::mcset zh_HK MONTHS_ABBREV [list \
- "1\u6708"\
- "2\u6708"\
- "3\u6708"\
- "4\u6708"\
- "5\u6708"\
- "6\u6708"\
- "7\u6708"\
- "8\u6708"\
- "9\u6708"\
- "10\u6708"\
- "11\u6708"\
- "12\u6708"\
+ "1月"\
+ "2月"\
+ "3月"\
+ "4月"\
+ "5月"\
+ "6月"\
+ "7月"\
+ "8月"\
+ "9月"\
+ "10月"\
+ "11月"\
+ "12月"\
""]
- ::msgcat::mcset zh_HK DATE_FORMAT "%Y\u5e74%m\u6708%e\u65e5"
+ ::msgcat::mcset zh_HK DATE_FORMAT "%Y年%m月%e日"
::msgcat::mcset zh_HK TIME_FORMAT_12 "%P%I:%M:%S"
- ::msgcat::mcset zh_HK DATE_TIME_FORMAT "%Y\u5e74%m\u6708%e\u65e5 %P%I:%M:%S %z"
+ ::msgcat::mcset zh_HK DATE_TIME_FORMAT "%Y年%m月%e日 %P%I:%M:%S %z"
}
diff --git a/library/msgs/zh_sg.msg b/library/msgs/zh_sg.msg
index a2f3e39..690edf7 100644
--- a/library/msgs/zh_sg.msg
+++ b/library/msgs/zh_sg.msg
@@ -1,7 +1,7 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
- ::msgcat::mcset zh_SG AM "\u4e0a\u5348"
- ::msgcat::mcset zh_SG PM "\u4e2d\u5348"
+ ::msgcat::mcset zh_SG AM "上午"
+ ::msgcat::mcset zh_SG PM "中午"
::msgcat::mcset zh_SG DATE_FORMAT "%d %B %Y"
::msgcat::mcset zh_SG TIME_FORMAT_12 "%P %I:%M:%S"
::msgcat::mcset zh_SG DATE_TIME_FORMAT "%d %B %Y %P %I:%M:%S %z"
diff --git a/library/msgs/zh_tw.msg b/library/msgs/zh_tw.msg
index e0796b1..17a6dd7 100644
--- a/library/msgs/zh_tw.msg
+++ b/library/msgs/zh_tw.msg
@@ -1,7 +1,7 @@
# created by tools/loadICU.tcl -- do not edit
namespace eval ::tcl::clock {
- ::msgcat::mcset zh_TW BCE "\u6c11\u570b\u524d"
- ::msgcat::mcset zh_TW CE "\u6c11\u570b"
+ ::msgcat::mcset zh_TW BCE "民國前"
+ ::msgcat::mcset zh_TW CE "民國"
::msgcat::mcset zh_TW DATE_FORMAT "%Y/%m/%e"
::msgcat::mcset zh_TW TIME_FORMAT_12 "%P %I:%M:%S"
::msgcat::mcset zh_TW DATE_TIME_FORMAT "%Y/%m/%e %P %I:%M:%S %z"
diff --git a/library/opt/optparse.tcl b/library/opt/optparse.tcl
index c8946fd..7225edd 100644
--- a/library/opt/optparse.tcl
+++ b/library/opt/optparse.tcl
@@ -11,16 +11,16 @@
package require Tcl 8.5-
# When this version number changes, update the pkgIndex.tcl file
# and the install directory in the Makefiles.
-package provide opt 0.4.7
+package provide opt 0.4.9
namespace eval ::tcl {
# Exported APIs
namespace export OptKeyRegister OptKeyDelete OptKeyError OptKeyParse \
- OptProc OptProcArgGiven OptParse \
- Lempty Lget \
- Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \
- SetMax SetMin
+ OptProc OptProcArgGiven OptParse \
+ Lempty Lget \
+ Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \
+ SetMax SetMin
################# Example of use / 'user documentation' ###################
@@ -38,28 +38,28 @@ namespace eval ::tcl {
# ::tcl::OptParseTest save -4 -pr 23 -libsok SybTcl\
# -nostatics false ch1
OptProc OptParseTest {
- {subcommand -choice {save print} "sub command"}
- {arg1 3 "some number"}
- {-aflag}
- {-intflag 7}
- {-weirdflag "help string"}
- {-noStatics "Not ok to load static packages"}
- {-nestedloading1 true "OK to load into nested slaves"}
- {-nestedloading2 -boolean true "OK to load into nested slaves"}
- {-libsOK -choice {Tk SybTcl}
- "List of packages that can be loaded"}
- {-precision -int 12 "Number of digits of precision"}
- {-intval 7 "An integer"}
- {-scale -float 1.0 "Scale factor"}
- {-zoom 1.0 "Zoom factor"}
- {-arbitrary foobar "Arbitrary string"}
- {-random -string 12 "Random string"}
- {-listval -list {} "List value"}
- {-blahflag -blah abc "Funny type"}
+ {subcommand -choice {save print} "sub command"}
+ {arg1 3 "some number"}
+ {-aflag}
+ {-intflag 7}
+ {-weirdflag "help string"}
+ {-noStatics "Not ok to load static packages"}
+ {-nestedloading1 true "OK to load into nested children"}
+ {-nestedloading2 -boolean true "OK to load into nested children"}
+ {-libsOK -choice {Tk SybTcl}
+ "List of packages that can be loaded"}
+ {-precision -int 12 "Number of digits of precision"}
+ {-intval 7 "An integer"}
+ {-scale -float 1.0 "Scale factor"}
+ {-zoom 1.0 "Zoom factor"}
+ {-arbitrary foobar "Arbitrary string"}
+ {-random -string 12 "Random string"}
+ {-listval -list {} "List value"}
+ {-blahflag -blah abc "Funny type"}
{arg2 -boolean "a boolean"}
{arg3 -choice "ch1 ch2"}
{?optarg? -list {} "optional argument"}
- } {
+ } {
foreach v [info locals] {
puts stderr [format "%14s : %s" $v [set $v]]
}
@@ -75,7 +75,7 @@ namespace eval ::tcl {
variable OptDescN 0
# Inside algorithm/mechanism description:
-# (not for the faint hearted ;-)
+# (not for the faint-hearted ;-)
#
# The argument description is parsed into a "program tree"
# It is called a "program" because it is the program used by
@@ -134,9 +134,9 @@ namespace eval ::tcl {
# they should start to be much faster.
# But this code use a lot of helper procs (like Lvarset)
# which are quite slow and would be helpfully optimized
-# for instance by being written in C. Also our struture
+# for instance by being written in C. Also our structure
# is complex and there is maybe some places where the
-# string rep might be calculated at great exense. to be checked.
+# string rep might be calculated at great expense. to be checked.
#
# Parse a given description and saves it here under the given key
@@ -146,10 +146,10 @@ proc ::tcl::OptKeyRegister {desc {key ""}} {
variable OptDesc
variable OptDescN
if {[string equal $key ""]} {
- # in case a key given to us as a parameter was a number
- while {[info exists OptDesc($OptDescN)]} {incr OptDescN}
- set key $OptDescN
- incr OptDescN
+ # in case a key given to us as a parameter was a number
+ while {[info exists OptDesc($OptDescN)]} {incr OptDescN}
+ set key $OptDescN
+ incr OptDescN
}
# program counter
set program [list [list "P" 1]]
@@ -167,31 +167,31 @@ proc ::tcl::OptKeyRegister {desc {key ""}} {
# more items after 'args'...
return -code error "'args' special argument must be the last one"
}
- set res [OptNormalizeOne $item]
- set state [lindex $res 0]
- if {$inflags} {
- if {$state == "flags"} {
+ set res [OptNormalizeOne $item]
+ set state [lindex $res 0]
+ if {$inflags} {
+ if {$state == "flags"} {
# add to 'subprogram'
- lappend flagsprg $res
- } else {
- # put in the flags
- # structure for flag programs items is a list of
- # {subprgcounter {prg flag 1} {prg flag 2} {...}}
- lappend program $flagsprg
- # put the other regular stuff
- lappend program $res
+ lappend flagsprg $res
+ } else {
+ # put in the flags
+ # structure for flag programs items is a list of
+ # {subprgcounter {prg flag 1} {prg flag 2} {...}}
+ lappend program $flagsprg
+ # put the other regular stuff
+ lappend program $res
set inflags 0
set empty 0
- }
- } else {
- if {$state == "flags"} {
- set inflags 1
- # sub program counter + first sub program
- set flagsprg [list [list "P" 1] $res]
- } else {
- lappend program $res
- set empty 0
- }
+ }
+ } else {
+ if {$state == "flags"} {
+ set inflags 1
+ # sub program counter + first sub program
+ set flagsprg [list [list "P" 1] $res]
+ } else {
+ lappend program $res
+ set empty 0
+ }
}
}
if {$inflags} {
@@ -219,14 +219,14 @@ proc ::tcl::OptKeyDelete {key} {
# Get the parsed description stored under the given key.
proc OptKeyGetDesc {descKey} {
- variable OptDesc
- if {![info exists OptDesc($descKey)]} {
- return -code error "Unknown option description key \"$descKey\""
- }
- set OptDesc($descKey)
+ variable OptDesc
+ if {![info exists OptDesc($descKey)]} {
+ return -code error "Unknown option description key \"$descKey\""
+ }
+ set OptDesc($descKey)
}
-# Parse entry point for ppl who don't want to register with a key,
+# Parse entry point for people who don't want to register with a key,
# for instance because the description changes dynamically.
# (otherwise one should really use OptKeyRegister once + OptKeyParse
# as it is way faster or simply OptProc which does it all)
@@ -248,11 +248,11 @@ proc ::tcl::OptParse {desc arglist} {
proc ::tcl::OptProc {name desc body} {
set namespace [uplevel 1 [list ::namespace current]]
if {[string match "::*" $name] || [string equal $namespace "::"]} {
- # absolute name or global namespace, name is the key
- set key $name
+ # absolute name or global namespace, name is the key
+ set key $name
} else {
- # we are relative to some non top level namespace:
- set key "${namespace}::${name}"
+ # we are relative to some non top level namespace:
+ set key "${namespace}::${name}"
}
OptKeyRegister $desc $key
uplevel 1 [list ::proc $name args "set Args \[::tcl::OptKeyParse $key \$args\]\n$body"]
@@ -300,21 +300,21 @@ proc ::tcl::OptProcArgGiven {argname} {
# Advance to next description
proc OptNextDesc {descName} {
- uplevel 1 [list Lvarincr $descName {0 1}]
+ uplevel 1 [list Lvarincr $descName {0 1}]
}
# Get the current description, eventually descend
proc OptCurDesc {descriptions} {
- lindex $descriptions [OptGetPrgCounter $descriptions]
+ lindex $descriptions [OptGetPrgCounter $descriptions]
}
# get the current description, eventually descend
# through sub programs as needed.
proc OptCurDescFinal {descriptions} {
- set item [OptCurDesc $descriptions]
+ set item [OptCurDesc $descriptions]
# Descend untill we get the actual item and not a sub program
- while {[OptIsPrg $item]} {
- set item [OptCurDesc $item]
- }
+ while {[OptIsPrg $item]} {
+ set item [OptCurDesc $item]
+ }
return $item
}
# Current final instruction adress
@@ -328,37 +328,37 @@ proc ::tcl::OptProcArgGiven {argname} {
return $start
}
}
- # Set the value field of the current instruction
+ # Set the value field of the current instruction.
proc OptCurSetValue {descriptionsName value} {
upvar $descriptionsName descriptions
- # get the current item full adress
- set adress [OptCurAddr $descriptions]
- # use the 3th field of the item (see OptValue / OptNewInst)
+ # Get the current item full address.
+ set adress [OptCurAddr $descriptions]
+ # Use the 3rd field of the item (see OptValue / OptNewInst).
lappend adress 2
Lvarset descriptions $adress [list 1 $value]
# ^hasBeenSet flag
}
- # empty state means done/paste the end of the program
+ # Empty state means done/paste the end of the program.
proc OptState {item} {
- lindex $item 0
+ lindex $item 0
}
# current state
proc OptCurState {descriptions} {
- OptState [OptCurDesc $descriptions]
+ OptState [OptCurDesc $descriptions]
}
#######
# Arguments manipulation
- # Returns the argument that has to be processed now
+ # Returns the argument that has to be processed now.
proc OptCurrentArg {lst} {
- lindex $lst 0
+ lindex $lst 0
}
- # Advance to next argument
+ # Advance to next argument.
proc OptNextArg {argsName} {
- uplevel 1 [list Lvarpop1 $argsName]
+ uplevel 1 [list Lvarpop1 $argsName]
}
#######
@@ -377,7 +377,7 @@ proc ::tcl::OptProcArgGiven {argname} {
# when needed...
set state [OptCurState $descriptions]
# We'll exit the loop in "OptDoOne" or when state is empty.
- while 1 {
+ while 1 {
set curitem [OptCurDesc $descriptions]
# Do subprograms if needed, call ourselves on the sub branch
while {[OptIsPrg $curitem]} {
@@ -388,7 +388,7 @@ proc ::tcl::OptProcArgGiven {argname} {
$curitem
OptNextDesc descriptions
set curitem [OptCurDesc $descriptions]
- set state [OptCurState $descriptions]
+ set state [OptCurState $descriptions]
}
# puts "state = \"$state\" - arguments=($arguments)"
if {[Lempty $state]} {
@@ -398,20 +398,20 @@ proc ::tcl::OptProcArgGiven {argname} {
# The following statement can make us terminate/continue
# as it use return -code {break, continue, return and error}
# codes
- OptDoOne descriptions state arguments
+ OptDoOne descriptions state arguments
# If we are here, no special return code where issued,
# we'll step to next instruction :
# puts "new state = \"$state\""
OptNextDesc descriptions
set state [OptCurState $descriptions]
- }
+ }
}
# Process one step for the state machine,
# eventually consuming the current argument.
proc OptDoOne {descriptionsName stateName argumentsName} {
- upvar $argumentsName arguments
- upvar $descriptionsName descriptions
+ upvar $argumentsName arguments
+ upvar $descriptionsName descriptions
upvar $stateName state
# the special state/instruction "args" eats all
@@ -443,48 +443,48 @@ proc ::tcl::OptProcArgGiven {argname} {
set arg [OptCurrentArg $arguments]
}
- switch $state {
- flags {
- # A non-dash argument terminates the options, as does --
-
- # Still a flag ?
- if {![OptIsFlag $arg]} {
- # don't consume the argument, return to previous prg
- return -code return
- }
- # consume the flag
- OptNextArg arguments
- if {[string equal "--" $arg]} {
- # return from 'flags' state
- return -code return
- }
-
- set hits [OptHits descriptions $arg]
- if {$hits > 1} {
- return -code error [OptAmbigous $descriptions $arg]
- } elseif {$hits == 0} {
- return -code error [OptFlagUsage $descriptions $arg]
- }
+ switch $state {
+ flags {
+ # A non-dash argument terminates the options, as does --
+
+ # Still a flag ?
+ if {![OptIsFlag $arg]} {
+ # don't consume the argument, return to previous prg
+ return -code return
+ }
+ # consume the flag
+ OptNextArg arguments
+ if {[string equal "--" $arg]} {
+ # return from 'flags' state
+ return -code return
+ }
+
+ set hits [OptHits descriptions $arg]
+ if {$hits > 1} {
+ return -code error [OptAmbigous $descriptions $arg]
+ } elseif {$hits == 0} {
+ return -code error [OptFlagUsage $descriptions $arg]
+ }
set item [OptCurDesc $descriptions]
- if {[OptNeedValue $item]} {
+ if {[OptNeedValue $item]} {
# we need a value, next state is
set state flagValue
- } else {
- OptCurSetValue descriptions 1
- }
+ } else {
+ OptCurSetValue descriptions 1
+ }
# continue
return -code continue
- }
+ }
flagValue -
value {
set item [OptCurDesc $descriptions]
- # Test the values against their required type
+ # Test the values against their required type
if {[catch {OptCheckType $arg\
[OptType $item] [OptTypeArgs $item]} val]} {
return -code error [OptBadValue $item $arg $val]
}
- # consume the value
- OptNextArg arguments
+ # consume the value
+ OptNextArg arguments
# set the value
OptCurSetValue descriptions $val
# go to next state
@@ -498,7 +498,7 @@ proc ::tcl::OptProcArgGiven {argname} {
}
optValue {
set item [OptCurDesc $descriptions]
- # Test the values against their required type
+ # Test the values against their required type
if {![catch {OptCheckType $arg\
[OptType $item] [OptTypeArgs $item]} val]} {
# right type, so :
@@ -511,7 +511,7 @@ proc ::tcl::OptProcArgGiven {argname} {
set state next; # not used, for debug only
return ; # will go on next step
}
- }
+ }
# If we reach this point: an unknown
# state as been entered !
return -code error "Bug! unknown state in DoOne \"$state\"\
@@ -553,7 +553,7 @@ proc ::tcl::OptKeyParse {descKey arglist} {
if {[OptHasBeenSet $item]} {
# puts "adding $vname"
# lets use the input name for the returned list
- # it is more usefull, for instance you can check that
+ # it is more useful, for instance you can check that
# no flags at all was given with expr
# {![string match "*-*" $Args]}
lappend vnamesLst [OptName $item]
@@ -576,46 +576,46 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
# only types "any", "choice", and numbers can have leading "-"
switch -exact -- $type {
- int {
- if {![string is integer -strict $arg]} {
- error "not an integer"
- }
+ int {
+ if {![string is integer -strict $arg]} {
+ error "not an integer"
+ }
return $arg
- }
- float {
- return [expr {double($arg)}]
- }
+ }
+ float {
+ return [expr {double($arg)}]
+ }
script -
- list {
+ list {
# if llength fail : malformed list
- if {[llength $arg]==0 && [OptIsFlag $arg]} {
+ if {[llength $arg]==0 && [OptIsFlag $arg]} {
error "no values with leading -"
}
return $arg
- }
- boolean {
+ }
+ boolean {
if {![string is boolean -strict $arg]} {
error "non canonic boolean"
- }
+ }
# convert true/false because expr/if is broken with "!,...
return [expr {$arg ? 1 : 0}]
- }
- choice {
- if {[lsearch -exact $typeArgs $arg] < 0} {
- error "invalid choice"
- }
+ }
+ choice {
+ if {$arg ni $typeArgs} {
+ error "invalid choice"
+ }
return $arg
- }
+ }
any {
return $arg
}
string -
default {
- if {[OptIsFlag $arg]} {
- error "no values with leading -"
- }
+ if {[OptIsFlag $arg]} {
+ error "no values with leading -"
+ }
return $arg
- }
+ }
}
return neverReached
}
@@ -625,17 +625,17 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
# returns the number of flags matching the given arg
# sets the (local) prg counter to the list of matches
proc OptHits {descName arg} {
- upvar $descName desc
- set hits 0
- set hitems {}
+ upvar $descName desc
+ set hits 0
+ set hitems {}
set i 1
set larg [string tolower $arg]
set len [string length $larg]
set last [expr {$len-1}]
- foreach item [lrange $desc 1 end] {
- set flag [OptName $item]
+ foreach item [lrange $desc 1 end] {
+ set flag [OptName $item]
# lets try to match case insensitively
# (string length ought to be cheap)
set lflag [string tolower $flag]
@@ -648,19 +648,19 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
} elseif {[string equal $larg [string range $lflag 0 $last]]} {
lappend hitems $i
incr hits
- }
+ }
incr i
- }
+ }
if {$hits} {
OptSetPrgCounter desc $hitems
}
- return $hits
+ return $hits
}
# Extract fields from the list structure:
proc OptName {item} {
- lindex $item 1
+ lindex $item 1
}
proc OptHasBeenSet {item} {
Lget $item {2 0}
@@ -670,37 +670,37 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
}
proc OptIsFlag {name} {
- string match "-*" $name
+ string match "-*" $name
}
proc OptIsOpt {name} {
- string match {\?*} $name
+ string match {\?*} $name
}
proc OptVarName {item} {
- set name [OptName $item]
- if {[OptIsFlag $name]} {
- return [string range $name 1 end]
- } elseif {[OptIsOpt $name]} {
+ set name [OptName $item]
+ if {[OptIsFlag $name]} {
+ return [string range $name 1 end]
+ } elseif {[OptIsOpt $name]} {
return [string trim $name "?"]
} else {
- return $name
- }
+ return $name
+ }
}
proc OptType {item} {
- lindex $item 3
+ lindex $item 3
}
proc OptTypeArgs {item} {
- lindex $item 4
+ lindex $item 4
}
proc OptHelp {item} {
- lindex $item 5
+ lindex $item 5
}
proc OptNeedValue {item} {
- expr {![string equal [OptType $item] boolflag]}
+ expr {![string equal [OptType $item] boolflag]}
}
proc OptDefaultValue {item} {
- set val [OptTypeArgs $item]
- switch -exact -- [OptType $item] {
- choice {return [lindex $val 0]}
+ set val [OptTypeArgs $item]
+ switch -exact -- [OptType $item] {
+ choice {return [lindex $val 0]}
boolean -
boolflag {
# convert back false/true to 0/1 because expr !$bool
@@ -711,15 +711,15 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
return 0
}
}
- }
- return $val
+ }
+ return $val
}
# Description format error helper
proc OptOptUsage {item {what ""}} {
- return -code error "invalid description format$what: $item\n\
- should be a list of {varname|-flagname ?-type? ?defaultvalue?\
- ?helpstring?}"
+ return -code error "invalid description format$what: $item\n\
+ should be a list of {varname|-flagname ?-type? ?defaultvalue?\
+ ?helpstring?}"
}
@@ -733,13 +733,13 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
# Translate one item to canonical form
proc OptNormalizeOne {item} {
- set lg [Lassign $item varname arg1 arg2 arg3]
+ set lg [Lassign $item varname arg1 arg2 arg3]
# puts "called optnormalizeone '$item' v=($varname), lg=$lg"
- set isflag [OptIsFlag $varname]
+ set isflag [OptIsFlag $varname]
set isopt [OptIsOpt $varname]
- if {$isflag} {
- set state "flags"
- } elseif {$isopt} {
+ if {$isflag} {
+ set state "flags"
+ } elseif {$isopt} {
set state "optValue"
} elseif {![string equal $varname "args"]} {
set state "value"
@@ -751,20 +751,20 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
# description writer's life easy, and our's difficult :
# let's guess the missing arguments :-)
- switch $lg {
- 1 {
- if {$isflag} {
- return [OptNewInst $state $varname boolflag false ""]
- } else {
- return [OptNewInst $state $varname any "" ""]
- }
- }
- 2 {
- # varname default
- # varname help
- set type [OptGuessType $arg1]
- if {[string equal $type "string"]} {
- if {$isflag} {
+ switch $lg {
+ 1 {
+ if {$isflag} {
+ return [OptNewInst $state $varname boolflag false ""]
+ } else {
+ return [OptNewInst $state $varname any "" ""]
+ }
+ }
+ 2 {
+ # varname default
+ # varname help
+ set type [OptGuessType $arg1]
+ if {[string equal $type "string"]} {
+ if {$isflag} {
set type boolflag
set def false
} else {
@@ -772,67 +772,67 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
set def ""
}
set help $arg1
- } else {
- set help ""
- set def $arg1
- }
- return [OptNewInst $state $varname $type $def $help]
- }
- 3 {
- # varname type value
- # varname value comment
-
- if {[regexp {^-(.+)$} $arg1 x type]} {
+ } else {
+ set help ""
+ set def $arg1
+ }
+ return [OptNewInst $state $varname $type $def $help]
+ }
+ 3 {
+ # varname type value
+ # varname value comment
+
+ if {[regexp {^-(.+)$} $arg1 x type]} {
# flags/optValue as they are optional, need a "value",
# on the contrary, for a variable (non optional),
- # default value is pointless, 'cept for choices :
+ # default value is pointless, 'cept for choices :
if {$isflag || $isopt || ($type == "choice")} {
return [OptNewInst $state $varname $type $arg2 ""]
} else {
return [OptNewInst $state $varname $type "" $arg2]
}
- } else {
- return [OptNewInst $state $varname\
+ } else {
+ return [OptNewInst $state $varname\
[OptGuessType $arg1] $arg1 $arg2]
- }
- }
- 4 {
- if {[regexp {^-(.+)$} $arg1 x type]} {
+ }
+ }
+ 4 {
+ if {[regexp {^-(.+)$} $arg1 x type]} {
return [OptNewInst $state $varname $type $arg2 $arg3]
- } else {
- return -code error [OptOptUsage $item]
- }
- }
- default {
- return -code error [OptOptUsage $item]
- }
- }
+ } else {
+ return -code error [OptOptUsage $item]
+ }
+ }
+ default {
+ return -code error [OptOptUsage $item]
+ }
+ }
}
# Auto magic lazy type determination
proc OptGuessType {arg} {
- if { $arg == "true" || $arg == "false" } {
- return boolean
- }
- if {[string is integer -strict $arg]} {
- return int
- }
- if {[string is double -strict $arg]} {
- return float
- }
- return string
+ if { $arg == "true" || $arg == "false" } {
+ return boolean
+ }
+ if {[string is integer -strict $arg]} {
+ return int
+ }
+ if {[string is double -strict $arg]} {
+ return float
+ }
+ return string
}
# Error messages front ends
proc OptAmbigous {desc arg} {
- OptError "ambigous option \"$arg\", choose from:" [OptSelection $desc]
+ OptError "ambigous option \"$arg\", choose from:" [OptSelection $desc]
}
proc OptFlagUsage {desc arg} {
- OptError "bad flag \"$arg\", must be one of" $desc
+ OptError "bad flag \"$arg\", must be one of" $desc
}
proc OptTooManyArgs {desc arguments} {
- OptError "too many arguments (unexpected argument(s): $arguments),\
+ OptError "too many arguments (unexpected argument(s): $arguments),\
usage:"\
$desc 1
}
@@ -845,13 +845,13 @@ proc ::tcl::OptCheckType {arg type {typeArgs ""}} {
}
proc OptBadValue {item arg {err {}}} {
# puts "bad val err = \"$err\""
- OptError "bad value \"$arg\" for [OptParamType $item]"\
+ OptError "bad value \"$arg\" for [OptParamType $item]"\
[list $item]
}
proc OptMissingValue {descriptions} {
# set item [OptCurDescFinal $descriptions]
- set item [OptCurDesc $descriptions]
- OptError "no value given for [OptParamType $item] \"[OptName $item]\"\
+ set item [OptCurDesc $descriptions]
+ OptError "no value given for [OptParamType $item] \"[OptName $item]\"\
(use -help for full usage) :"\
[list $item]
}
@@ -943,7 +943,7 @@ proc ::tcl::Lempty {list} {
# Gets the value of one leaf of a lists tree
proc ::tcl::Lget {list indexLst} {
if {[llength $indexLst] <= 1} {
- return [lindex $list $indexLst]
+ return [lindex $list $indexLst]
}
Lget [lindex $list [lindex $indexLst 0]] [lrange $indexLst 1 end]
}
@@ -958,17 +958,17 @@ proc ::tcl::Lget {list indexLst} {
proc ::tcl::Lvarset {listName indexLst newValue} {
upvar $listName list
if {[llength $indexLst] <= 1} {
- Lvarset1nc list $indexLst $newValue
+ Lvarset1nc list $indexLst $newValue
} else {
- set idx [lindex $indexLst 0]
- set targetList [lindex $list $idx]
- # reduce refcount on targetList (not really usefull now,
+ set idx [lindex $indexLst 0]
+ set targetList [lindex $list $idx]
+ # reduce refcount on targetList (not really usefull now,
# could be with optimizing compiler)
# Lvarset1 list $idx {}
- # recursively replace in targetList
- Lvarset targetList [lrange $indexLst 1 end] $newValue
- # put updated sub list back in the tree
- Lvarset1nc list $idx $targetList
+ # recursively replace in targetList
+ Lvarset targetList [lrange $indexLst 1 end] $newValue
+ # put updated sub list back in the tree
+ Lvarset1nc list $idx $targetList
}
}
# Set one cell to a value, eventually create all the needed elements
@@ -979,13 +979,13 @@ proc ::tcl::Lvarset1 {listName index newValue} {
if {$index < 0} {return -code error "invalid negative index"}
set lg [llength $list]
if {$index >= $lg} {
- variable emptyList
- for {set i $lg} {$i<$index} {incr i} {
- lappend list $emptyList
- }
- lappend list $newValue
+ variable emptyList
+ for {set i $lg} {$i<$index} {incr i} {
+ lappend list $emptyList
+ }
+ lappend list $newValue
} else {
- set list [lreplace $list $index $index $newValue]
+ set list [lreplace $list $index $index $newValue]
}
}
# same as Lvarset1 but no bound checking / creation
@@ -998,16 +998,16 @@ proc ::tcl::Lvarset1nc {listName index newValue} {
proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} {
upvar $listName list
if {[llength $indexLst] <= 1} {
- Lvarincr1 list $indexLst $howMuch
+ Lvarincr1 list $indexLst $howMuch
} else {
- set idx [lindex $indexLst 0]
- set targetList [lindex $list $idx]
- # reduce refcount on targetList
- Lvarset1nc list $idx {}
- # recursively replace in targetList
- Lvarincr targetList [lrange $indexLst 1 end] $howMuch
- # put updated sub list back in the tree
- Lvarset1nc list $idx $targetList
+ set idx [lindex $indexLst 0]
+ set targetList [lindex $list $idx]
+ # reduce refcount on targetList
+ Lvarset1nc list $idx {}
+ # recursively replace in targetList
+ Lvarincr targetList [lrange $indexLst 1 end] $howMuch
+ # put updated sub list back in the tree
+ Lvarset1nc list $idx $targetList
}
}
# Increments the value of one cell of a list
@@ -1037,9 +1037,9 @@ proc ::tcl::Lassign {list args} {
set i 0
set lg [llength $list]
foreach vname $args {
- if {$i>=$lg} break
- uplevel 1 [list ::set $vname [lindex $list $i]]
- incr i
+ if {$i>=$lg} break
+ uplevel 1 [list ::set $vname [lindex $list $i]]
+ incr i
}
return $lg
}
@@ -1051,7 +1051,7 @@ proc ::tcl::Lassign {list args} {
proc ::tcl::SetMax {varname value} {
upvar 1 $varname var
if {![info exists var] || $value > $var} {
- set var $value
+ set var $value
}
}
@@ -1060,7 +1060,7 @@ proc ::tcl::SetMax {varname value} {
proc ::tcl::SetMin {varname value} {
upvar 1 $varname var
if {![info exists var] || $value < $var} {
- set var $value
+ set var $value
}
}
diff --git a/library/opt/pkgIndex.tcl b/library/opt/pkgIndex.tcl
index daf9aa9..aad00af 100644
--- a/library/opt/pkgIndex.tcl
+++ b/library/opt/pkgIndex.tcl
@@ -9,4 +9,4 @@
# full path name of this file's directory.
if {![package vsatisfies [package provide Tcl] 8.5-]} {return}
-package ifneeded opt 0.4.7 [list source [file join $dir optparse.tcl]]
+package ifneeded opt 0.4.9 [list source -encoding utf-8 [file join $dir optparse.tcl]]
diff --git a/library/package.tcl b/library/package.tcl
index 3783722..fd455fb 100644
--- a/library/package.tcl
+++ b/library/package.tcl
@@ -3,8 +3,8 @@
# utility procs formerly in init.tcl which can be loaded on demand
# for package management.
#
-# Copyright (c) 1991-1993 The Regents of the University of California.
-# Copyright (c) 1994-1998 Sun Microsystems, Inc.
+# Copyright © 1991-1993 The Regents of the University of California.
+# Copyright © 1994-1998 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
@@ -14,9 +14,9 @@ namespace eval tcl::Pkg {}
# ::tcl::Pkg::CompareExtension --
#
-# Used internally by pkg_mkIndex to compare the extension of a file to
-# a given extension. On Windows, it uses a case-insensitive comparison
-# because the file system can be file insensitive.
+# Used internally by pkg_mkIndex to compare the extension of a file to a given
+# extension. On Windows, it uses a case-insensitive comparison because the
+# file system can be file insensitive.
#
# Arguments:
# fileName name of a file whose extension is compared
@@ -27,20 +27,20 @@ namespace eval tcl::Pkg {}
# Results:
# Returns 1 if the extension matches, 0 otherwise
-proc tcl::Pkg::CompareExtension { fileName {ext {}} } {
+proc tcl::Pkg::CompareExtension {fileName {ext {}}} {
global tcl_platform
if {$ext eq ""} {set ext [info sharedlibextension]}
if {$tcl_platform(platform) eq "windows"} {
- return [string equal -nocase [file extension $fileName] $ext]
+ return [string equal -nocase [file extension $fileName] $ext]
} else {
- # Some unices add trailing numbers after the .so, so
- # we could have something like '.so.1.2'.
- set root $fileName
- while {1} {
- set currExt [file extension $root]
- if {$currExt eq $ext} {
- return 1
- }
+ # Some unices add trailing numbers after the .so, so
+ # we could have something like '.so.1.2'.
+ set root $fileName
+ while {1} {
+ set currExt [file extension $root]
+ if {$currExt eq $ext} {
+ return 1
+ }
# The current extension does not match; if it is not a numeric
# value, quit, as we are only looking to ignore version number
@@ -48,20 +48,19 @@ proc tcl::Pkg::CompareExtension { fileName {ext {}} } {
# tcl::Pkg::CompareExtension foo.so.bar .so
# which should not match.
- if { ![string is integer -strict [string range $currExt 1 end]] } {
+ if {![string is integer -strict [string range $currExt 1 end]]} {
return 0
}
- set root [file rootname $root]
+ set root [file rootname $root]
}
}
}
# pkg_mkIndex --
-# This procedure creates a package index in a given directory. The
-# package index consists of a "pkgIndex.tcl" file whose contents are
-# a Tcl script that sets up package information with "package require"
-# commands. The commands describe all of the packages defined by the
-# files given as arguments.
+# This procedure creates a package index in a given directory. The package
+# index consists of a "pkgIndex.tcl" file whose contents are a Tcl script that
+# sets up package information with "package require" commands. The commands
+# describe all of the packages defined by the files given as arguments.
#
# Arguments:
# -direct (optional) If this flag is present, the generated
@@ -70,7 +69,7 @@ proc tcl::Pkg::CompareExtension { fileName {ext {}} } {
# than lazily when the first reference to an exported
# procedure in the package is made.
# -verbose (optional) Verbose output; the name of each file that
-# was successfully rocessed is printed out. Additionally,
+# was successfully processed is printed out. Additionally,
# if processing of a file failed a message is printed.
# -load pat (optional) Preload any packages whose names match
# the pattern. Used to handle DLLs that depend on
@@ -82,7 +81,7 @@ proc tcl::Pkg::CompareExtension { fileName {ext {}} } {
# dir.
proc pkg_mkIndex {args} {
- set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--? dir ?pattern ...?"};
+ set usage {"pkg_mkIndex ?-direct? ?-lazy? ?-load pattern? ?-verbose? ?--? dir ?pattern ...?"}
set argCount [llength $args]
if {$argCount < 1} {
@@ -128,20 +127,24 @@ proc pkg_mkIndex {args} {
set dir [lindex $args $idx]
set patternList [lrange $args [expr {$idx + 1}] end]
- if {[llength $patternList] == 0} {
+ if {![llength $patternList]} {
set patternList [list "*.tcl" "*[info sharedlibextension]"]
}
- if {[catch {
- glob -directory $dir -tails -types {r f} -- {*}$patternList
- } fileList o]} {
- return -options $o $fileList
+ try {
+ set fileList [glob -directory $dir -tails -types {r f} -- \
+ {*}$patternList]
+ } on error {msg opt} {
+ return -options $opt $msg
+ }
+ if {[llength $fileList] == 0} {
+ return -code error "no files matched glob pattern \"$patternList\""
}
foreach file $fileList {
# For each file, figure out what commands and packages it provides.
# To do this, create a child interpreter, load the file into the
- # interpreter, and get a list of the new commands and packages
- # that are defined.
+ # interpreter, and get a list of the new commands and packages that
+ # are defined.
if {$file eq "pkgIndex.tcl"} {
continue
@@ -163,20 +166,23 @@ proc pkg_mkIndex {args} {
}
}
foreach pkg [info loaded] {
- if {! [string match -nocase $loadPat [lindex $pkg 1]]} {
+ if {![string match -nocase $loadPat [lindex $pkg 1]]} {
continue
}
if {$doVerbose} {
tclLog "package [lindex $pkg 1] matches '$loadPat'"
}
- if {[catch {
+ try {
load [lindex $pkg 0] [lindex $pkg 1] $c
- } err]} {
+ } on error err {
if {$doVerbose} {
- tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err"
+ tclLog "warning: load [lindex $pkg 0]\
+ [lindex $pkg 1]\nfailed with: $err"
+ }
+ } on ok {} {
+ if {$doVerbose} {
+ tclLog "loaded [lindex $pkg 0] [lindex $pkg 1]"
}
- } elseif {$doVerbose} {
- tclLog "loaded [lindex $pkg 0] [lindex $pkg 1]"
}
if {[lindex $pkg 1] eq "Tk"} {
# Withdraw . if Tk was loaded, to avoid showing a window.
@@ -185,21 +191,25 @@ proc pkg_mkIndex {args} {
}
$c eval {
- # Stub out the package command so packages can
- # require other packages.
+ # Stub out the package command so packages can require other
+ # packages.
rename package __package_orig
proc package {what args} {
switch -- $what {
- require { return ; # ignore transitive requires }
- default { __package_orig $what {*}$args }
+ require {
+ return; # Ignore transitive requires
+ }
+ default {
+ __package_orig $what {*}$args
+ }
}
}
proc tclPkgUnknown args {}
package unknown tclPkgUnknown
- # Stub out the unknown command so package can call
- # into each other during their initialilzation.
+ # Stub out the unknown command so package can call into each other
+ # during their initialization.
proc unknown {args} {}
@@ -207,9 +217,9 @@ proc pkg_mkIndex {args} {
proc auto_import {args} {}
- # reserve the ::tcl namespace for support procs
- # and temporary variables. This might make it awkward
- # to generate a pkgIndex.tcl file for the ::tcl namespace.
+ # reserve the ::tcl namespace for support procs and temporary
+ # variables. This might make it awkward to generate a
+ # pkgIndex.tcl file for the ::tcl namespace.
namespace eval ::tcl {
variable dir ;# Current directory being processed
@@ -230,22 +240,22 @@ proc pkg_mkIndex {args} {
$c eval [list set ::tcl::file $file]
$c eval [list set ::tcl::direct $direct]
- # Download needed procedures into the slave because we've
- # just deleted the unknown procedure. This doesn't handle
- # procedures with default arguments.
+ # Download needed procedures into the child because we've just deleted
+ # the unknown procedure. This doesn't handle procedures with default
+ # arguments.
foreach p {::tcl::Pkg::CompareExtension} {
$c eval [list namespace eval [namespace qualifiers $p] {}]
$c eval [list proc $p [info args $p] [info body $p]]
}
- if {[catch {
+ try {
$c eval {
set ::tcl::debug "loading or sourcing"
- # we need to track command defined by each package even in
- # the -direct case, because they are needed internally by
- # the "partial pkgIndex.tcl" step above.
+ # we need to track command defined by each package even in the
+ # -direct case, because they are needed internally by the
+ # "partial pkgIndex.tcl" step above.
proc ::tcl::GetAllNamespaces {{root ::}} {
set list $root
@@ -267,18 +277,17 @@ proc pkg_mkIndex {args} {
}
set ::tcl::origCmds [info commands]
- # Try to load the file if it has the shared library
- # extension, otherwise source it. It's important not to
- # try to load files that aren't shared libraries, because
- # on some systems (like SunOS) the loader will abort the
- # whole application when it gets an error.
+ # Try to load the file if it has the shared library extension,
+ # otherwise source it. It's important not to try to load
+ # files that aren't shared libraries, because on some systems
+ # (like SunOS) the loader will abort the whole application
+ # when it gets an error.
if {[::tcl::Pkg::CompareExtension $::tcl::file [info sharedlibextension]]} {
- # The "file join ." command below is necessary.
- # Without it, if the file name has no \'s and we're
- # on UNIX, the load command will invoke the
- # LD_LIBRARY_PATH search mechanism, which could cause
- # the wrong file to be used.
+ # The "file join ." command below is necessary. Without
+ # it, if the file name has no \'s and we're on UNIX, the
+ # load command will invoke the LD_LIBRARY_PATH search
+ # mechanism, which could cause the wrong file to be used.
set ::tcl::debug loading
load [file join $::tcl::dir $::tcl::file]
@@ -289,17 +298,16 @@ proc pkg_mkIndex {args} {
set ::tcl::type source
}
- # As a performance optimization, if we are creating
- # direct load packages, don't bother figuring out the
- # set of commands created by the new packages. We
- # only need that list for setting up the autoloading
- # used in the non-direct case.
- if { !$::tcl::direct } {
+ # As a performance optimization, if we are creating direct
+ # load packages, don't bother figuring out the set of commands
+ # created by the new packages. We only need that list for
+ # setting up the autoloading used in the non-direct case.
+ if {!$::tcl::direct} {
# See what new namespaces appeared, and import commands
# from them. Only exported commands go into the index.
foreach ::tcl::x [::tcl::GetAllNamespaces] {
- if {! [info exists ::tcl::namespaces($::tcl::x)]} {
+ if {![info exists ::tcl::namespaces($::tcl::x)]} {
namespace import -force ${::tcl::x}::*
}
@@ -316,8 +324,9 @@ proc pkg_mkIndex {args} {
set ::tcl::abs [namespace origin $::tcl::x]
- # special case so that global names have no leading
- # ::, this is required by the unknown command
+ # special case so that global names have no
+ # leading ::, this is required by the unknown
+ # command
set ::tcl::abs \
[lindex [auto_qualify $::tcl::abs ::] 0]
@@ -332,8 +341,8 @@ proc pkg_mkIndex {args} {
}
}
- # Look through the packages that appeared, and if there is
- # a version provided, then record it
+ # Look through the packages that appeared, and if there is a
+ # version provided, then record it
foreach ::tcl::x [package names] {
if {[package provide $::tcl::x] ne ""
@@ -343,12 +352,12 @@ proc pkg_mkIndex {args} {
}
}
}
- } msg] == 1} {
+ } on error msg {
set what [$c eval set ::tcl::debug]
if {$doVerbose} {
tclLog "warning: error while $what $file: $msg"
}
- } else {
+ } on ok {} {
set what [$c eval set ::tcl::debug]
if {$doVerbose} {
tclLog "successful $what of $file"
@@ -357,7 +366,7 @@ proc pkg_mkIndex {args} {
set cmds [lsort [$c eval array names ::tcl::newCmds]]
set pkgs [$c eval set ::tcl::newPkgs]
if {$doVerbose} {
- if { !$direct } {
+ if {!$direct} {
tclLog "commands provided were $cmds"
}
tclLog "packages provided were $pkgs"
@@ -393,7 +402,7 @@ proc pkg_mkIndex {args} {
lappend cmd ::tcl::Pkg::Create -name $name -version $version
foreach spec [lsort -index 0 $files($pkg)] {
foreach {file type procs} $spec {
- if { $direct } {
+ if {$direct} {
set procs {}
}
lappend cmd "-$type" [list $file $procs]
@@ -403,16 +412,16 @@ proc pkg_mkIndex {args} {
}
set f [open [file join $dir pkgIndex.tcl] w]
+ fconfigure $f -encoding utf-8 -translation lf
puts $f $index
close $f
}
# tclPkgSetup --
-# This is a utility procedure use by pkgIndex.tcl files. It is invoked
-# as part of a "package ifneeded" script. It calls "package provide"
-# to indicate that a package is available, then sets entries in the
-# auto_index array so that the package's files will be auto-loaded when
-# the commands are used.
+# This is a utility procedure use by pkgIndex.tcl files. It is invoked as
+# part of a "package ifneeded" script. It calls "package provide" to indicate
+# that a package is available, then sets entries in the auto_index array so
+# that the package's files will be auto-loaded when the commands are used.
#
# Arguments:
# dir - Directory containing all the files for this package.
@@ -443,12 +452,12 @@ proc tclPkgSetup {dir pkg version files} {
}
# tclPkgUnknown --
-# This procedure provides the default for the "package unknown" function.
-# It is invoked when a package that's needed can't be found. It scans
-# the auto_path directories and their immediate children looking for
-# pkgIndex.tcl files and sources any such files that are found to setup
-# the package database. As it searches, it will recognize changes
-# to the auto_path and scan any new directories.
+# This procedure provides the default for the "package unknown" function. It
+# is invoked when a package that's needed can't be found. It scans the
+# auto_path directories and their immediate children looking for pkgIndex.tcl
+# files and sources any such files that are found to setup the package
+# database. As it searches, it will recognize changes to the auto_path and
+# scan any new directories.
#
# Arguments:
# name - Name of desired package. Not used.
@@ -461,8 +470,8 @@ proc tclPkgUnknown {name args} {
if {![info exists auto_path]} {
return
}
- # Cache the auto_path, because it may change while we run through
- # the first set of pkgIndex.tcl files
+ # Cache the auto_path, because it may change while we run through the
+ # first set of pkgIndex.tcl files
set old_path [set use_path $auto_path]
while {[llength $use_path]} {
set dir [lindex $use_path end]
@@ -474,24 +483,29 @@ proc tclPkgUnknown {name args} {
}
set tclSeenPath($dir) 1
- # we can't use glob in safe interps, so enclose the following
- # in a catch statement, where we get the pkgIndex files out
- # of the subdirectories
+ # Get the pkgIndex.tcl files in subdirectories of auto_path directories.
+ # - Safe Base interpreters have a restricted "glob" command that
+ # works in this case.
+ # - The "catch" was essential when there was no safe glob and every
+ # call in a safe interp failed; it is retained only for corner
+ # cases in which the eventual call to glob returns an error.
catch {
foreach file [glob -directory $dir -join -nocomplain \
* pkgIndex.tcl] {
set dir [file dirname $file]
if {![info exists procdDirs($dir)]} {
- set code [catch {source $file} msg opt]
- if {$code == 1 &&
- [lindex [dict get $opt -errorcode] 0] eq "POSIX" &&
- [lindex [dict get $opt -errorcode] 1] eq "EACCES"} {
+ try {
+ ::tcl::Pkg::source $file
+ } trap {POSIX EACCES} {} {
# $file was not readable; silently ignore
continue
- }
- if {$code} {
+ } on error msg {
+ if {[regexp {version conflict for package} $msg]} {
+ # In case of version conflict, silently ignore
+ continue
+ }
tclLog "error reading package index file $file: $msg"
- } else {
+ } on ok {} {
set procdDirs($dir) 1
}
}
@@ -502,16 +516,18 @@ proc tclPkgUnknown {name args} {
set file [file join $dir pkgIndex.tcl]
# safe interps usually don't have "file exists",
if {([interp issafe] || [file exists $file])} {
- set code [catch {source $file} msg opt]
- if {$code == 1 &&
- [lindex [dict get $opt -errorcode] 0] eq "POSIX" &&
- [lindex [dict get $opt -errorcode] 1] eq "EACCES"} {
+ try {
+ ::tcl::Pkg::source $file
+ } trap {POSIX EACCES} {} {
# $file was not readable; silently ignore
continue
- }
- if {$code} {
+ } on error msg {
+ if {[regexp {version conflict for package} $msg]} {
+ # In case of version conflict, silently ignore
+ continue
+ }
tclLog "error reading package index file $file: $msg"
- } else {
+ } on ok {} {
set procdDirs($dir) 1
}
}
@@ -519,12 +535,11 @@ proc tclPkgUnknown {name args} {
set use_path [lrange $use_path 0 end-1]
- # Check whether any of the index scripts we [source]d above
- # set a new value for $::auto_path. If so, then find any
- # new directories on the $::auto_path, and lappend them to
- # the $use_path we are working from. This gives index scripts
- # the (arguably unwise) power to expand the index script search
- # path while the search is in progress.
+ # Check whether any of the index scripts we [source]d above set a new
+ # value for $::auto_path. If so, then find any new directories on the
+ # $::auto_path, and lappend them to the $use_path we are working from.
+ # This gives index scripts the (arguably unwise) power to expand the
+ # index script search path while the search is in progress.
set index 0
if {[llength $old_path] == [llength $auto_path]} {
foreach dir $auto_path old $old_path {
@@ -536,11 +551,11 @@ proc tclPkgUnknown {name args} {
}
}
- # $index now points to the first element of $auto_path that
- # has changed, or the beginning if $auto_path has changed length
- # Scan the new elements of $auto_path for directories to add to
- # $use_path. Don't add directories we've already seen, or ones
- # already on the $use_path.
+ # $index now points to the first element of $auto_path that has
+ # changed, or the beginning if $auto_path has changed length Scan the
+ # new elements of $auto_path for directories to add to $use_path.
+ # Don't add directories we've already seen, or ones already on the
+ # $use_path.
foreach dir [lrange $auto_path $index end] {
if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} {
lappend use_path $dir
@@ -551,9 +566,9 @@ proc tclPkgUnknown {name args} {
}
# tcl::MacOSXPkgUnknown --
-# This procedure extends the "package unknown" function for MacOSX.
-# It scans the Resources/Scripts directories of the immediate children
-# of the auto_path directories for pkgIndex files.
+# This procedure extends the "package unknown" function for MacOSX. It scans
+# the Resources/Scripts directories of the immediate children of the auto_path
+# directories for pkgIndex files.
#
# Arguments:
# original - original [package unknown] procedure
@@ -562,7 +577,6 @@ proc tclPkgUnknown {name args} {
# exact - Either "-exact" or omitted. Not used.
proc tcl::MacOSXPkgUnknown {original name args} {
-
# First do the cross-platform default search
uplevel 1 $original [linsert $args 0 $name]
@@ -572,8 +586,8 @@ proc tcl::MacOSXPkgUnknown {original name args} {
if {![info exists auto_path]} {
return
}
- # Cache the auto_path, because it may change while we run through
- # the first set of pkgIndex.tcl files
+ # Cache the auto_path, because it may change while we run through the
+ # first set of pkgIndex.tcl files
set old_path [set use_path $auto_path]
while {[llength $use_path]} {
set dir [lindex $use_path end]
@@ -586,32 +600,34 @@ proc tcl::MacOSXPkgUnknown {original name args} {
set tclSeenPath($dir) 1
# get the pkgIndex files out of the subdirectories
+ # Safe interpreters do not use tcl::MacOSXPkgUnknown - see init.tcl.
foreach file [glob -directory $dir -join -nocomplain \
* Resources Scripts pkgIndex.tcl] {
set dir [file dirname $file]
if {![info exists procdDirs($dir)]} {
- set code [catch {source $file} msg opt]
- if {$code == 1 &&
- [lindex [dict get $opt -errorcode] 0] eq "POSIX" &&
- [lindex [dict get $opt -errorcode] 1] eq "EACCES"} {
+ try {
+ ::tcl::Pkg::source $file
+ } trap {POSIX EACCES} {} {
# $file was not readable; silently ignore
continue
- }
- if {$code} {
+ } on error msg {
+ if {[regexp {version conflict for package} $msg]} {
+ # In case of version conflict, silently ignore
+ continue
+ }
tclLog "error reading package index file $file: $msg"
- } else {
+ } on ok {} {
set procdDirs($dir) 1
}
}
}
set use_path [lrange $use_path 0 end-1]
- # Check whether any of the index scripts we [source]d above
- # set a new value for $::auto_path. If so, then find any
- # new directories on the $::auto_path, and lappend them to
- # the $use_path we are working from. This gives index scripts
- # the (arguably unwise) power to expand the index script search
- # path while the search is in progress.
+ # Check whether any of the index scripts we [source]d above set a new
+ # value for $::auto_path. If so, then find any new directories on the
+ # $::auto_path, and lappend them to the $use_path we are working from.
+ # This gives index scripts the (arguably unwise) power to expand the
+ # index script search path while the search is in progress.
set index 0
if {[llength $old_path] == [llength $auto_path]} {
foreach dir $auto_path old $old_path {
@@ -623,11 +639,11 @@ proc tcl::MacOSXPkgUnknown {original name args} {
}
}
- # $index now points to the first element of $auto_path that
- # has changed, or the beginning if $auto_path has changed length
- # Scan the new elements of $auto_path for directories to add to
- # $use_path. Don't add directories we've already seen, or ones
- # already on the $use_path.
+ # $index now points to the first element of $auto_path that has
+ # changed, or the beginning if $auto_path has changed length Scan the
+ # new elements of $auto_path for directories to add to $use_path.
+ # Don't add directories we've already seen, or ones already on the
+ # $use_path.
foreach dir [lrange $auto_path $index end] {
if {![info exists tclSeenPath($dir)] && ($dir ni $use_path)} {
lappend use_path $dir
@@ -653,12 +669,12 @@ proc tcl::MacOSXPkgUnknown {original name args} {
#
# Any number of -load and -source parameters may be
# specified, so long as there is at least one -load or
-# -source parameter. If the procs component of a
-# module specifier is left off, that module will be
-# set up for direct loading; otherwise, it will be
-# set up for lazy loading. If both -source and -load
-# are specified, the -load'ed files will be loaded
-# first, followed by the -source'd files.
+# -source parameter. If the procs component of a module
+# specifier is left off, that module will be set up for
+# direct loading; otherwise, it will be set up for lazy
+# loading. If both -source and -load are specified, the
+# -load'ed files will be loaded first, followed by the
+# -source'd files.
#
# Results:
# An appropriate "package ifneeded" statement for the package.
@@ -676,7 +692,7 @@ proc ::tcl::Pkg::Create {args} {
# process arguments
set len [llength $args]
- if { $len < 6 } {
+ if {$len < 6} {
error $err(wrongNumArgs)
}
@@ -690,14 +706,14 @@ proc ::tcl::Pkg::Create {args} {
switch -glob -- $flag {
"-name" -
"-version" {
- if { $i >= $len } {
+ if {$i >= $len} {
error [format $err(valueMissing) $flag]
}
set opts($flag) [lindex $args $i]
}
"-source" -
"-load" {
- if { $i >= $len } {
+ if {$i >= $len} {
error [format $err(valueMissing) $flag]
}
lappend opts($flag) [lindex $args $i]
@@ -709,18 +725,18 @@ proc ::tcl::Pkg::Create {args} {
}
# Validate the parameters
- if { [llength $opts(-name)] == 0 } {
+ if {![llength $opts(-name)]} {
error [format $err(valueMissing) "-name"]
}
- if { [llength $opts(-version)] == 0 } {
+ if {![llength $opts(-version)]} {
error [format $err(valueMissing) "-version"]
}
- if { [llength $opts(-source)] == 0 && [llength $opts(-load)] == 0 } {
+ if {!([llength $opts(-source)] || [llength $opts(-load)])} {
error $err(noLoadOrSource)
}
- # OK, now everything is good. Generate the package ifneeded statment.
+ # OK, now everything is good. Generate the package ifneeded statement.
set cmdline "package ifneeded $opts(-name) $opts(-version) "
set cmdList {}
@@ -740,7 +756,7 @@ proc ::tcl::Pkg::Create {args} {
}
}
- if { [llength $lazyFileList] > 0 } {
+ if {[llength $lazyFileList]} {
lappend cmdList "\[list tclPkgSetup \$dir $opts(-name)\
$opts(-version) [list $lazyFileList]\]"
}
diff --git a/library/parray.tcl b/library/parray.tcl
index a9c2cb1..984bf47 100644
--- a/library/parray.tcl
+++ b/library/parray.tcl
@@ -1,8 +1,8 @@
# parray:
# Print the contents of a global array on stdout.
#
-# Copyright (c) 1991-1993 The Regents of the University of California.
-# Copyright (c) 1994 Sun Microsystems, Inc.
+# Copyright © 1991-1993 The Regents of the University of California.
+# Copyright © 1994 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/library/platform/pkgIndex.tcl b/library/platform/pkgIndex.tcl
index de28fd1..4526c7e 100644
--- a/library/platform/pkgIndex.tcl
+++ b/library/platform/pkgIndex.tcl
@@ -1,3 +1,3 @@
-package ifneeded platform 1.0.18 [list source [file join $dir platform.tcl]]
-package ifneeded platform::shell 1.1.4 [list source [file join $dir shell.tcl]]
+package ifneeded platform 1.0.19 [list source -encoding utf-8 [file join $dir platform.tcl]]
+package ifneeded platform::shell 1.1.4 [list source -encoding utf-8 [file join $dir shell.tcl]]
diff --git a/library/platform/platform.tcl b/library/platform/platform.tcl
index 752f069..63d4d76 100644
--- a/library/platform/platform.tcl
+++ b/library/platform/platform.tcl
@@ -265,7 +265,7 @@ proc ::platform::LibcVersion {base _->_ vv} {
set libc [lindex $libclist 0]
- # Try executing the library first. This should suceed
+ # Try executing the library first. This should succeed
# for a glibc library, and return the version
# information.
@@ -364,6 +364,17 @@ proc ::platform::patterns {id} {
foreach {major minor} [split $v .] break
set res {}
+ if {$major eq 13} {
+ # Add 13.0 to 13.minor to patterns.
+ for {set j $minor} {$j >= 0} {incr j -1} {
+ lappend res macosx${major}.${j}-${cpu}
+ foreach a $alt {
+ lappend res macosx${major}.${j}-$a
+ }
+ }
+ set major 12
+ set minor 5
+ }
if {$major eq 12} {
# Add 12.0 to 12.minor to patterns.
for {set j $minor} {$j >= 0} {incr j -1} {
@@ -420,7 +431,7 @@ proc ::platform::patterns {id} {
# ### ### ### ######### ######### #########
## Ready
-package provide platform 1.0.18
+package provide platform 1.0.19
# ### ### ### ######### ######### #########
## Demo application
diff --git a/library/platform/shell.tcl b/library/platform/shell.tcl
index 6eb9691..526a7b1 100644
--- a/library/platform/shell.tcl
+++ b/library/platform/shell.tcl
@@ -27,11 +27,11 @@ proc ::platform::shell::generic {shell} {
LOCATE base out
set code {}
- # Forget any pre-existing platform package, it might be in
+ # Forget any preexisting platform package, it might be in
# conflict with this one.
lappend code {package forget platform}
# Inject our platform package
- lappend code [list source $base]
+ lappend code [list source -encoding utf-8 $base]
# Query and print the architecture
lappend code {puts [platform::generic]}
# And done
@@ -52,11 +52,11 @@ proc ::platform::shell::identify {shell} {
LOCATE base out
set code {}
- # Forget any pre-existing platform package, it might be in
+ # Forget any preexisting platform package, it might be in
# conflict with this one.
lappend code {package forget platform}
# Inject our platform package
- lappend code [list source $base]
+ lappend code [list source -encoding utf-8 $base]
# Query and print the architecture
lappend code {puts [platform::identify]}
# And done
@@ -99,14 +99,14 @@ proc ::platform::shell::LOCATE {bv ov} {
upvar 1 $bv base $ov out
# Locate the platform package for injection into the specified
- # shell. We are using package management to find it, whereever it
+ # shell. We are using package management to find it, wherever it
# is, instead of using hardwired relative paths. This allows us to
# install the two packages as TMs without breaking the code
# here. If the found package is wrapped we copy the code somewhere
# where the spawned shell will be able to read it.
# This code is brittle, it needs has to adapt to whatever changes
- # are made to the TM code, i.e. the provide statement generated by
+ # are made to the TM code, i.e. the "provide" statement generated by
# tm.tcl
set pl [package ifneeded platform [package require platform]]
@@ -131,7 +131,7 @@ proc ::platform::shell::RUN {shell code} {
set e [TEMP]
set code [catch {
- exec $shell $c 2> $e
+ exec $shell $c 2> $e
} res]
file delete $c
@@ -163,34 +163,34 @@ proc ::platform::shell::TEMP {} {
set checked_dir_writable 0
set mypid [pid]
for {set i 0} {$i < $maxtries} {incr i} {
- set newname $prefix
- for {set j 0} {$j < $nrand_chars} {incr j} {
- append newname [string index $chars \
+ set newname $prefix
+ for {set j 0} {$j < $nrand_chars} {incr j} {
+ append newname [string index $chars \
[expr {int(rand()*62)}]]
- }
+ }
set newname [file join $tmpdir $newname]
- if {[file exists $newname]} {
- after 1
- } else {
- if {[catch {open $newname $access $permission} channel]} {
- if {!$checked_dir_writable} {
- set dirname [file dirname $newname]
- if {![file writable $dirname]} {
- return -code error "Directory $dirname is not writable"
- }
- set checked_dir_writable 1
- }
- } else {
- # Success
+ if {[file exists $newname]} {
+ after 1
+ } else {
+ if {[catch {open $newname $access $permission} channel]} {
+ if {!$checked_dir_writable} {
+ set dirname [file dirname $newname]
+ if {![file writable $dirname]} {
+ return -code error "Directory $dirname is not writable"
+ }
+ set checked_dir_writable 1
+ }
+ } else {
+ # Success
close $channel
- return [file normalize $newname]
- }
- }
+ return [file normalize $newname]
+ }
+ }
}
if {$channel ne ""} {
- return -code error "Failed to open a temporary file: $channel"
+ return -code error "Failed to open a temporary file: $channel"
} else {
- return -code error "Failed to find an unused temporary file name"
+ return -code error "Failed to find an unused temporary file name"
}
}
diff --git a/library/readfile.tcl b/library/readfile.tcl
new file mode 100644
index 0000000..c1d5b84
--- /dev/null
+++ b/library/readfile.tcl
@@ -0,0 +1,23 @@
+# readFile:
+# Read the contents of a file.
+#
+# Copyright © 2023 Donal K Fellows.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+
+proc readFile {filename {mode text}} {
+ # Parse the arguments
+ set MODES {binary text}
+ set ERR [list -level 1 -errorcode [list TCL LOOKUP MODE $mode]]
+ set mode [tcl::prefix match -message "mode" -error $ERR $MODES $mode]
+
+ # Read the file
+ set f [open $filename [dict get {text r binary rb} $mode]]
+ try {
+ return [read $f]
+ } finally {
+ close $f
+ }
+}
diff --git a/library/reg/pkgIndex.tcl b/library/reg/pkgIndex.tcl
deleted file mode 100644
index 6603e3e..0000000
--- a/library/reg/pkgIndex.tcl
+++ /dev/null
@@ -1,9 +0,0 @@
-if {![package vsatisfies [package provide Tcl] 8.5]} return
-if {[info sharedlibextension] != ".dll"} return
-if {[::tcl::pkgconfig get debug]} {
- package ifneeded registry 1.3.5 \
- [list load [file join $dir tclreg13g.dll] Registry]
-} else {
- package ifneeded registry 1.3.5 \
- [list load [file join $dir tclreg13.dll] Registry]
-}
diff --git a/library/registry/pkgIndex.tcl b/library/registry/pkgIndex.tcl
new file mode 100644
index 0000000..ee302ef
--- /dev/null
+++ b/library/registry/pkgIndex.tcl
@@ -0,0 +1,4 @@
+if {![package vsatisfies [package provide Tcl] 9.0-]} return
+if {[info sharedlibextension] != ".dll"} return
+package ifneeded registry 1.4a0 \
+ [list load [file join $dir tcl9registry14.dll] Registry]
diff --git a/library/safe.tcl b/library/safe.tcl
index bd51e18..a574a02 100644
--- a/library/safe.tcl
+++ b/library/safe.tcl
@@ -2,12 +2,12 @@
#
# This file provide a safe loading/sourcing mechanism for safe interpreters.
# It implements a virtual path mecanism to hide the real pathnames from the
-# slave. It runs in a master interpreter and sets up data structure and
-# aliases that will be invoked when used from a slave interpreter.
+# child. It runs in a parent interpreter and sets up data structure and
+# aliases that will be invoked when used from a child interpreter.
#
# See the safe.n man page for details.
#
-# Copyright (c) 1996-1997 Sun Microsystems, Inc.
+# Copyright © 1996-1997 Sun Microsystems, Inc.
#
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
@@ -20,7 +20,7 @@
#
# Needed utilities package
-package require opt 0.4.1
+package require opt 0.4.9
# Create the safe namespace
namespace eval ::safe {
@@ -78,26 +78,40 @@ proc ::safe::InterpNested {} {
# Interface/entry point function and front end for "Create"
proc ::safe::interpCreate {args} {
+ variable AutoPathSync
+ if {$AutoPathSync} {
+ set autoPath {}
+ }
set Args [::tcl::OptKeyParse ::safe::interpCreate $args]
- InterpCreate $slave $accessPath \
- [InterpStatics] [InterpNested] $deleteHook
+ RejectExcessColons $child
+
+ set withAutoPath [::tcl::OptProcArgGiven -autoPath]
+ InterpCreate $child $accessPath \
+ [InterpStatics] [InterpNested] $deleteHook $autoPath $withAutoPath
}
proc ::safe::interpInit {args} {
+ variable AutoPathSync
+ if {$AutoPathSync} {
+ set autoPath {}
+ }
set Args [::tcl::OptKeyParse ::safe::interpIC $args]
- if {![::interp exists $slave]} {
- return -code error "\"$slave\" is not an interpreter"
+ if {![::interp exists $child]} {
+ return -code error "\"$child\" is not an interpreter"
}
- InterpInit $slave $accessPath \
- [InterpStatics] [InterpNested] $deleteHook
+ RejectExcessColons $child
+
+ set withAutoPath [::tcl::OptProcArgGiven -autoPath]
+ InterpInit $child $accessPath \
+ [InterpStatics] [InterpNested] $deleteHook $autoPath $withAutoPath
}
-# Check that the given slave is "one of us"
-proc ::safe::CheckInterp {slave} {
- namespace upvar ::safe S$slave state
- if {![info exists state] || ![::interp exists $slave]} {
+# Check that the given child is "one of us"
+proc ::safe::CheckInterp {child} {
+ namespace upvar ::safe [VarName $child] state
+ if {![info exists state] || ![::interp exists $child]} {
return -code error \
- "\"$slave\" is not an interpreter managed by ::safe::"
+ "\"$child\" is not an interpreter managed by ::safe::"
}
}
@@ -113,28 +127,34 @@ proc ::safe::CheckInterp {slave} {
# we had the bad idea to support for the sake of user simplicity in
# create/init but which makes life hard in configure...
# So this will be hopefully written and some integrated with opt1.0
-# (hopefully for tcl8.1 ?)
+# (hopefully for tcl9.0 ?)
proc ::safe::interpConfigure {args} {
+ variable AutoPathSync
switch [llength $args] {
1 {
# If we have exactly 1 argument the semantic is to return all
# the current configuration. We still call OptKeyParse though
- # we know that "slave" is our given argument because it also
+ # we know that "child" is our given argument because it also
# checks for the "-help" option.
set Args [::tcl::OptKeyParse ::safe::interpIC $args]
- CheckInterp $slave
- namespace upvar ::safe S$slave state
+ CheckInterp $child
+ namespace upvar ::safe [VarName $child] state
- return [join [list \
+ set TMP [list \
[list -accessPath $state(access_path)] \
[list -statics $state(staticsok)] \
[list -nested $state(nestedok)] \
- [list -deleteHook $state(cleanupHook)]]]
+ [list -deleteHook $state(cleanupHook)] \
+ ]
+ if {!$AutoPathSync} {
+ lappend TMP [list -autoPath $state(auto_path)]
+ }
+ return [join $TMP]
}
2 {
# If we have exactly 2 arguments the semantic is a "configure
# get"
- lassign $args slave arg
+ lassign $args child arg
# get the flag sub program (we 'know' about Opt's internal
# representation of data)
@@ -145,21 +165,36 @@ proc ::safe::interpConfigure {args} {
} elseif {$hits == 0} {
return -code error [::tcl::OptFlagUsage $desc $arg]
}
- CheckInterp $slave
- namespace upvar ::safe S$slave state
+ CheckInterp $child
+ namespace upvar ::safe [VarName $child] state
set item [::tcl::OptCurDesc $desc]
set name [::tcl::OptName $item]
switch -exact -- $name {
- -accessPath {return [list -accessPath $state(access_path)]}
- -statics {return [list -statics $state(staticsok)]}
- -nested {return [list -nested $state(nestedok)]}
- -deleteHook {return [list -deleteHook $state(cleanupHook)]}
+ -accessPath {
+ return [list -accessPath $state(access_path)]
+ }
+ -autoPath {
+ if {$AutoPathSync} {
+ return -code error "unknown flag $name (bug)"
+ } else {
+ return [list -autoPath $state(auto_path)]
+ }
+ }
+ -statics {
+ return [list -statics $state(staticsok)]
+ }
+ -nested {
+ return [list -nested $state(nestedok)]
+ }
+ -deleteHook {
+ return [list -deleteHook $state(cleanupHook)]
+ }
-noStatics {
# it is most probably a set in fact but we would need
# then to jump to the set part and it is not *sure*
# that it is a set action that the user want, so force
- # it to use the unambigous -statics ?value? instead:
+ # it to use the unambiguous -statics ?value? instead:
return -code error\
"ambigous query (get or set -noStatics ?)\
use -statics instead"
@@ -178,21 +213,27 @@ proc ::safe::interpConfigure {args} {
# Otherwise we want to parse the arguments like init and
# create did
set Args [::tcl::OptKeyParse ::safe::interpIC $args]
- CheckInterp $slave
- namespace upvar ::safe S$slave state
+ CheckInterp $child
+ namespace upvar ::safe [VarName $child] state
# Get the current (and not the default) values of whatever has
# not been given:
if {![::tcl::OptProcArgGiven -accessPath]} {
- set doreset 1
+ set doreset 0
set accessPath $state(access_path)
} else {
- set doreset 0
+ set doreset 1
+ }
+ if {(!$AutoPathSync) && (![::tcl::OptProcArgGiven -autoPath])} {
+ set autoPath $state(auto_path)
+ } elseif {$AutoPathSync} {
+ set autoPath {}
+ } else {
}
if {
![::tcl::OptProcArgGiven -statics]
&& ![::tcl::OptProcArgGiven -noStatics]
- } {
+ } then {
set statics $state(staticsok)
} else {
set statics [InterpStatics]
@@ -200,7 +241,7 @@ proc ::safe::interpConfigure {args} {
if {
[::tcl::OptProcArgGiven -nested] ||
[::tcl::OptProcArgGiven -nestedLoadOk]
- } {
+ } then {
set nested [InterpNested]
} else {
set nested $state(nestedok)
@@ -208,16 +249,37 @@ proc ::safe::interpConfigure {args} {
if {![::tcl::OptProcArgGiven -deleteHook]} {
set deleteHook $state(cleanupHook)
}
- # we can now reconfigure :
- InterpSetConfig $slave $accessPath $statics $nested $deleteHook
- # auto_reset the slave (to completly synch the new access_path)
+ # Now reconfigure
+ set withAutoPath [::tcl::OptProcArgGiven -autoPath]
+ InterpSetConfig $child $accessPath $statics $nested $deleteHook $autoPath $withAutoPath
+
+ # auto_reset the child (to completely sync the new access_path) tests safe-9.8 safe-9.9
if {$doreset} {
- if {[catch {::interp eval $slave {auto_reset}} msg]} {
- Log $slave "auto_reset failed: $msg"
+ if {[catch {::interp eval $child {auto_reset}} msg]} {
+ Log $child "auto_reset failed: $msg"
} else {
- Log $slave "successful auto_reset" NOTICE
+ Log $child "successful auto_reset" NOTICE
+ }
+
+ # Sync the paths used to search for Tcl modules.
+ ::interp eval $child {tcl::tm::path remove {*}[tcl::tm::list]}
+ if {[llength $state(tm_path_child)] > 0} {
+ ::interp eval $child [list \
+ ::tcl::tm::add {*}[lreverse $state(tm_path_child)]]
+ }
+
+ # Remove stale "package ifneeded" data for non-loaded packages.
+ # - Not for loaded packages, because "package forget" erases
+ # data from "package provide" as well as "package ifneeded".
+ # - This is OK because the script cannot reload any version of
+ # the package unless it first does "package forget".
+ foreach pkg [::interp eval $child {package names}] {
+ if {[::interp eval $child [list package provide $pkg]] eq ""} {
+ ::interp eval $child [list package forget $pkg]
+ }
}
}
+ return
}
}
}
@@ -231,54 +293,64 @@ proc ::safe::interpConfigure {args} {
#
# safe::InterpCreate : doing the real job
#
-# This procedure creates a safe slave and initializes it with the safe
+# This procedure creates a safe interpreter and initializes it with the safe
# base aliases.
-# NB: slave name must be simple alphanumeric string, no spaces, no (), no
+# NB: child name must be simple alphanumeric string, no spaces, no (), no
# {},... {because the state array is stored as part of the name}
#
-# Returns the slave name.
+# Returns the child name.
#
# Optional Arguments :
-# + slave name : if empty, generated name will be used
+# + child name : if empty, generated name will be used
# + access_path: path list controlling where load/source can occur,
-# if empty: the master auto_path will be used.
+# if empty: the parent auto_path and its subdirectories will be
+# used.
# + staticsok : flag, if 0 :no static package can be loaded (load {} Xxx)
# if 1 :static packages are ok.
-# + nestedok: flag, if 0 :no loading to sub-sub interps (load xx xx sub)
+# + nestedok : flag, if 0 :no loading to sub-sub interps (load xx xx sub)
# if 1 : multiple levels are ok.
# use the full name and no indent so auto_mkIndex can find us
proc ::safe::InterpCreate {
- slave
+ child
access_path
staticsok
nestedok
deletehook
+ autoPath
+ withAutoPath
} {
- # Create the slave.
- if {$slave ne ""} {
- ::interp create -safe $slave
+ # Create the child.
+ # If evaluated in ::safe, the interpreter command for foo is ::foo;
+ # but for foo::bar is safe::foo::bar. So evaluate in :: instead.
+ if {$child ne ""} {
+ namespace eval :: [list ::interp create -safe $child]
} else {
- # empty argument: generate slave name
- set slave [::interp create -safe]
+ # empty argument: generate child name
+ set child [::interp create -safe]
}
- Log $slave "Created" NOTICE
+ Log $child "Created" NOTICE
- # Initialize it. (returns slave name)
- InterpInit $slave $access_path $staticsok $nestedok $deletehook
+ # Initialize it. (returns child name)
+ InterpInit $child $access_path $staticsok $nestedok $deletehook $autoPath $withAutoPath
}
#
# InterpSetConfig (was setAccessPath) :
-# Sets up slave virtual auto_path and corresponding structure within
-# the master. Also sets the tcl_library in the slave to be the first
+# Sets up child virtual access path and corresponding structure within
+# the parent. Also sets the tcl_library in the child to be the first
# directory in the path.
-# NB: If you change the path after the slave has been initialized you
-# probably need to call "auto_reset" in the slave in order that it gets
+# NB: If you change the path after the child has been initialized you
+# probably need to call "auto_reset" in the child in order that it gets
# the right auto_index() array values.
+#
+# It is the caller's responsibility, if it supplies a non-empty value for
+# access_path, to make the first directory in the path suitable for use as
+# tcl_library, and (if ![setSyncMode]), to set the child's ::auto_path.
-proc ::safe::InterpSetConfig {slave access_path staticsok nestedok deletehook} {
+proc ::safe::InterpSetConfig {child access_path staticsok nestedok deletehook autoPath withAutoPath} {
global auto_path
+ variable AutoPathSync
# determine and store the access path if empty
if {$access_path eq ""} {
@@ -287,55 +359,80 @@ proc ::safe::InterpSetConfig {slave access_path staticsok nestedok deletehook} {
# Make sure that tcl_library is in auto_path and at the first
# position (needed by setAccessPath)
set where [lsearch -exact $access_path [info library]]
- if {$where == -1} {
+ if {$where < 0} {
# not found, add it.
set access_path [linsert $access_path 0 [info library]]
- Log $slave "tcl_library was not in auto_path,\
- added it to slave's access_path" NOTICE
+ Log $child "tcl_library was not in auto_path,\
+ added it to child's access_path" NOTICE
} elseif {$where != 0} {
# not first, move it first
set access_path [linsert \
[lreplace $access_path $where $where] \
0 [info library]]
- Log $slave "tcl_libray was not in first in auto_path,\
- moved it to front of slave's access_path" NOTICE
+ Log $child "tcl_libray was not in first in auto_path,\
+ moved it to front of child's access_path" NOTICE
}
- # Add 1st level sub dirs (will searched by auto loading from tcl
- # code in the slave using glob and thus fail, so we add them here
+ set raw_auto_path $access_path
+
+ # Add 1st level subdirs (will searched by auto loading from tcl
+ # code in the child using glob and thus fail, so we add them here
# so by default it works the same).
set access_path [AddSubDirs $access_path]
+ } else {
+ set raw_auto_path $autoPath
}
- Log $slave "Setting accessPath=($access_path) staticsok=$staticsok\
+ if {$withAutoPath} {
+ set raw_auto_path $autoPath
+ }
+
+ Log $child "Setting accessPath=($access_path) staticsok=$staticsok\
nestedok=$nestedok deletehook=($deletehook)" NOTICE
+ if {!$AutoPathSync} {
+ Log $child "Setting auto_path=($raw_auto_path)" NOTICE
+ }
- namespace upvar ::safe S$slave state
+ namespace upvar ::safe [VarName $child] state
# clear old autopath if it existed
# build new one
# Extend the access list with the paths used to look for Tcl Modules.
# We save the virtual form separately as well, as syncing it with the
- # slave has to be defered until the necessary commands are present for
+ # child has to be defered until the necessary commands are present for
# setup.
-
set norm_access_path {}
- set slave_access_path {}
+ set child_access_path {}
set map_access_path {}
set remap_access_path {}
- set slave_tm_path {}
+ set child_tm_path {}
set i 0
foreach dir $access_path {
set token [PathToken $i]
- lappend slave_access_path $token
+ lappend child_access_path $token
lappend map_access_path $token $dir
lappend remap_access_path $dir $token
lappend norm_access_path [file normalize $dir]
incr i
}
+ # Set the child auto_path to a tokenized raw_auto_path.
+ # Silently ignore any directories that are not in the access path.
+ # If [setSyncMode], SyncAccessPath will overwrite this value with the
+ # full access path.
+ # If ![setSyncMode], Safe Base code will not change this value.
+ set tokens_auto_path {}
+ foreach dir $raw_auto_path {
+ if {[dict exists $remap_access_path $dir]} {
+ lappend tokens_auto_path [dict get $remap_access_path $dir]
+ }
+ }
+ ::interp eval $child [list set auto_path $tokens_auto_path]
+
+ # Add the tcl::tm directories to the access path.
set morepaths [::tcl::tm::list]
+ set firstpass 1
while {[llength $morepaths]} {
set addpaths $morepaths
set morepaths {}
@@ -344,16 +441,27 @@ proc ::safe::InterpSetConfig {slave access_path staticsok nestedok deletehook} {
# Prevent the addition of dirs on the tm list to the
# result if they are already known.
if {[dict exists $remap_access_path $dir]} {
+ if {$firstpass} {
+ # $dir is in [::tcl::tm::list] and belongs in the child_tm_path.
+ # Later passes handle subdirectories, which belong in the
+ # access path but not in the module path.
+ lappend child_tm_path [dict get $remap_access_path $dir]
+ }
continue
}
set token [PathToken $i]
lappend access_path $dir
- lappend slave_access_path $token
+ lappend child_access_path $token
lappend map_access_path $token $dir
lappend remap_access_path $dir $token
lappend norm_access_path [file normalize $dir]
- lappend slave_tm_path $token
+ if {$firstpass} {
+ # $dir is in [::tcl::tm::list] and belongs in the child_tm_path.
+ # Later passes handle subdirectories, which belong in the
+ # access path but not in the module path.
+ lappend child_tm_path $token
+ }
incr i
# [Bug 2854929]
@@ -364,44 +472,76 @@ proc ::safe::InterpSetConfig {slave access_path staticsok nestedok deletehook} {
# subdirectories.
lappend morepaths {*}[glob -nocomplain -directory $dir -type d *]
}
+ set firstpass 0
}
set state(access_path) $access_path
set state(access_path,map) $map_access_path
set state(access_path,remap) $remap_access_path
set state(access_path,norm) $norm_access_path
- set state(access_path,slave) $slave_access_path
- set state(tm_path_slave) $slave_tm_path
+ set state(access_path,child) $child_access_path
+ set state(tm_path_child) $child_tm_path
set state(staticsok) $staticsok
set state(nestedok) $nestedok
set state(cleanupHook) $deletehook
- SyncAccessPath $slave
+ if {!$AutoPathSync} {
+ set state(auto_path) $raw_auto_path
+ }
+
+ SyncAccessPath $child
+ return
+}
+
+
+#
+# DetokPath:
+# Convert tokens to directories where possible.
+# Leave undefined tokens unconverted. They are
+# nonsense in both the child and the parent.
+#
+proc ::safe::DetokPath {child tokenPath} {
+ namespace upvar ::safe [VarName $child] state
+
+ set childPath {}
+ foreach token $tokenPath {
+ if {[dict exists $state(access_path,map) $token]} {
+ lappend childPath [dict get $state(access_path,map) $token]
+ } else {
+ lappend childPath $token
+ }
+ }
+ return $childPath
}
#
#
-# FindInAccessPath:
+# interpFindInAccessPath:
# Search for a real directory and returns its virtual Id (including the
# "$")
-proc ::safe::interpFindInAccessPath {slave path} {
- namespace upvar ::safe S$slave state
+#
+# When debugging, use TranslatePath for the inverse operation.
+proc ::safe::interpFindInAccessPath {child path} {
+ CheckInterp $child
+ namespace upvar ::safe [VarName $child] state
if {![dict exists $state(access_path,remap) $path]} {
- return -code error "$path not found in access path $access_path"
+ return -code error "$path not found in access path"
}
return [dict get $state(access_path,remap) $path]
}
+
#
# addToAccessPath:
# add (if needed) a real directory to access path and return its
# virtual token (including the "$").
-proc ::safe::interpAddToAccessPath {slave path} {
+proc ::safe::interpAddToAccessPath {child path} {
# first check if the directory is already in there
# (inlined interpFindInAccessPath).
- namespace upvar ::safe S$slave state
+ CheckInterp $child
+ namespace upvar ::safe [VarName $child] state
if {[dict exists $state(access_path,remap) $path]} {
return [dict get $state(access_path,remap) $path]
@@ -411,12 +551,12 @@ proc ::safe::interpAddToAccessPath {slave path} {
set token [PathToken [llength $state(access_path)]]
lappend state(access_path) $path
- lappend state(access_path,slave) $token
+ lappend state(access_path,child) $token
lappend state(access_path,map) $token $path
lappend state(access_path,remap) $path $token
lappend state(access_path,norm) [file normalize $path]
- SyncAccessPath $slave
+ SyncAccessPath $child
return $token
}
@@ -424,77 +564,86 @@ proc ::safe::interpAddToAccessPath {slave path} {
# interpreter. It is useful when you want to install the safe base aliases
# into a preexisting safe interpreter.
proc ::safe::InterpInit {
- slave
+ child
access_path
staticsok
nestedok
deletehook
+ autoPath
+ withAutoPath
} {
# Configure will generate an access_path when access_path is empty.
- InterpSetConfig $slave $access_path $staticsok $nestedok $deletehook
+ InterpSetConfig $child $access_path $staticsok $nestedok $deletehook $autoPath $withAutoPath
# NB we need to add [namespace current], aliases are always absolute
# paths.
- # These aliases let the slave load files to define new commands
- # This alias lets the slave use the encoding names, convertfrom,
+ # These aliases let the child load files to define new commands
+ # This alias lets the child use the encoding names, convertfrom,
# convertto, and system, but not "encoding system <name>" to set the
# system encoding.
# Handling Tcl Modules, we need a restricted form of Glob.
# This alias interposes on the 'exit' command and cleanly terminates
- # the slave.
+ # the child.
foreach {command alias} {
source AliasSource
load AliasLoad
- encoding AliasEncoding
exit interpDelete
glob AliasGlob
} {
- ::interp alias $slave $command {} [namespace current]::$alias $slave
+ ::interp alias $child $command {} [namespace current]::$alias $child
}
- # This alias lets the slave have access to a subset of the 'file'
- # command functionality.
+ # UGLY POINT! These commands are safe (they're ensembles with unsafe
+ # subcommands), but is assumed to not be by existing policies so it is
+ # hidden by default. Hack it...
+ foreach command {encoding file} {
+ ::interp alias $child $command {} interp invokehidden $child $command
+ }
- AliasSubset $slave file \
- file dir.* join root.* ext.* tail path.* split
+ # This alias lets the child have access to a subset of the 'file'
+ # command functionality.
- # Subcommands of info
- foreach {subcommand alias} {
- nameofexecutable AliasExeName
- } {
- ::interp alias $slave ::tcl::info::$subcommand \
- {} [namespace current]::$alias $slave
+ foreach subcommand {dirname extension rootname tail} {
+ ::interp alias $child ::tcl::file::$subcommand {} \
+ ::safe::AliasFileSubcommand $child $subcommand
}
- # The allowed slave variables already have been set by Tcl_MakeSafe(3)
+ # Subcommand of 'encoding' that has special handling; [encoding system] is
+ # OK provided it has no other arguments passed to it.
+ ::interp alias $child ::tcl::encoding::system {} \
+ ::safe::AliasEncodingSystem $child
- # Source init.tcl and tm.tcl into the slave, to get auto_load and
+ # Subcommands of info
+ ::interp alias $child ::tcl::info::nameofexecutable {} \
+ ::safe::AliasExeName $child
+
+ # Source init.tcl and tm.tcl into the child, to get auto_load and
# other procedures defined:
- if {[catch {::interp eval $slave {
+ if {[catch {::interp eval $child {
source [file join $tcl_library init.tcl]
- }} msg]} {
- Log $slave "can't source init.tcl ($msg)"
- return -code error "can't source init.tcl into slave $slave ($msg)"
+ }} msg opt]} {
+ Log $child "can't source init.tcl ($msg)"
+ return -options $opt "can't source init.tcl into child $child ($msg)"
}
- if {[catch {::interp eval $slave {
+ if {[catch {::interp eval $child {
source [file join $tcl_library tm.tcl]
- }} msg]} {
- Log $slave "can't source tm.tcl ($msg)"
- return -code error "can't source tm.tcl into slave $slave ($msg)"
+ }} msg opt]} {
+ Log $child "can't source tm.tcl ($msg)"
+ return -options $opt "can't source tm.tcl into child $child ($msg)"
}
# Sync the paths used to search for Tcl modules. This can be done only
# now, after tm.tcl was loaded.
- namespace upvar ::safe S$slave state
- if {[llength $state(tm_path_slave)] > 0} {
- ::interp eval $slave [list \
- ::tcl::tm::add {*}[lreverse $state(tm_path_slave)]]
+ namespace upvar ::safe [VarName $child] state
+ if {[llength $state(tm_path_child)] > 0} {
+ ::interp eval $child [list \
+ ::tcl::tm::add {*}[lreverse $state(tm_path_child)]]
}
- return $slave
+ return $child
}
# Add (only if needed, avoid duplicates) 1 level of sub directories to an
@@ -520,16 +669,31 @@ proc ::safe::AddSubDirs {pathList} {
return $res
}
-# This procedure deletes a safe slave managed by Safe Tcl and cleans up
-# associated state:
-
-proc ::safe::interpDelete {slave} {
- Log $slave "About to delete" NOTICE
-
- namespace upvar ::safe S$slave state
+# This procedure deletes a safe interpreter managed by Safe Tcl and cleans up
+# associated state.
+# - The command will also delete non-Safe-Base interpreters.
+# - This is regrettable, but to avoid breaking existing code this should be
+# amended at the next major revision by uncommenting "CheckInterp".
+
+proc ::safe::interpDelete {child} {
+ Log $child "About to delete" NOTICE
+
+ # CheckInterp $child
+ namespace upvar ::safe [VarName $child] state
+
+ # When an interpreter is deleted with [interp delete], any sub-interpreters
+ # are deleted automatically, but this leaves behind their data in the Safe
+ # Base. To clean up properly, we call safe::interpDelete recursively on each
+ # Safe Base sub-interpreter, so each one is deleted cleanly and not by
+ # the automatic mechanism built into [interp delete].
+ foreach sub [interp children $child] {
+ if {[info exists ::safe::[VarName [list $child $sub]]]} {
+ ::safe::interpDelete [list $child $sub]
+ }
+ }
- # If the slave has a cleanup hook registered, call it. Check the
- # existance because we might be called to delete an interp which has
+ # If the child has a cleanup hook registered, call it. Check the
+ # existence because we might be called to delete an interp which has
# not been registered with us at all
if {[info exists state(cleanupHook)]} {
@@ -538,15 +702,15 @@ proc ::safe::interpDelete {slave} {
# remove the hook now, otherwise if the hook calls us somehow,
# we'll loop
unset state(cleanupHook)
- if {[catch {
- {*}$hook $slave
- } err]} {
- Log $slave "Delete hook error ($err)"
+ try {
+ {*}$hook $child
+ } on error err {
+ Log $child "Delete hook error ($err)"
}
}
}
- # Discard the global array of state associated with the slave, and
+ # Discard the global array of state associated with the child, and
# delete the interpreter.
if {[info exists state]} {
@@ -555,15 +719,15 @@ proc ::safe::interpDelete {slave} {
# if we have been called twice, the interp might have been deleted
# already
- if {[::interp exists $slave]} {
- ::interp delete $slave
- Log $slave "Deleted" NOTICE
+ if {[::interp exists $child]} {
+ ::interp delete $child
+ Log $child "Deleted" NOTICE
}
return
}
-# Set (or get) the logging mecanism
+# Set (or get) the logging mechanism
proc ::safe::setLogCmd {args} {
variable Log
@@ -583,9 +747,9 @@ proc ::safe::setLogCmd {args} {
} else {
# Activate logging, define proper command.
- proc ::safe::Log {slave msg {type ERROR}} {
+ proc ::safe::Log {child msg {type ERROR}} {
variable Log
- {*}$Log "$type for slave $slave : $msg"
+ {*}$Log "$type for child $child : $msg"
return
}
}
@@ -594,24 +758,28 @@ proc ::safe::setLogCmd {args} {
# ------------------- END OF PUBLIC METHODS ------------
#
-# Sets the slave auto_path to the master recorded value. Also sets
-# tcl_library to the first token of the virtual path.
+# Sets the child auto_path to its recorded access path. Also sets
+# tcl_library to the first token of the access path.
#
-proc ::safe::SyncAccessPath {slave} {
- namespace upvar ::safe S$slave state
+proc ::safe::SyncAccessPath {child} {
+ variable AutoPathSync
+ namespace upvar ::safe [VarName $child] state
- set slave_access_path $state(access_path,slave)
- ::interp eval $slave [list set auto_path $slave_access_path]
+ set child_access_path $state(access_path,child)
+ if {$AutoPathSync} {
+ ::interp eval $child [list set auto_path $child_access_path]
- Log $slave "auto_path in $slave has been set to $slave_access_path"\
- NOTICE
+ Log $child "auto_path in $child has been set to $child_access_path"\
+ NOTICE
+ }
# This code assumes that info library is the first element in the
- # list of auto_path's. See -> InterpSetConfig for the code which
+ # list of access path's. See -> InterpSetConfig for the code which
# ensures this condition.
- ::interp eval $slave [list \
- set tcl_library [lindex $slave_access_path 0]]
+ ::interp eval $child [list \
+ set tcl_library [lindex $child_access_path 0]]
+ return
}
# Returns the virtual token for directory number N.
@@ -624,8 +792,8 @@ proc ::safe::PathToken {n} {
#
# translate virtual path into real path
#
-proc ::safe::TranslatePath {slave path} {
- namespace upvar ::safe S$slave state
+proc ::safe::TranslatePath {child path} {
+ namespace upvar ::safe [VarName $child] state
# somehow strip the namespaces 'functionality' out (the danger is that
# we would strip valid macintosh "../" queries... :
@@ -640,7 +808,7 @@ proc ::safe::TranslatePath {slave path} {
# file name control (limit access to files/resources that should be a
# valid tcl source file)
-proc ::safe::CheckFileName {slave file} {
+proc ::safe::CheckFileName {child file} {
# This used to limit what can be sourced to ".tcl" and forbid files
# with more than 1 dot and longer than 14 chars, but I changed that
# for 8.4 as a safe interp has enough internal protection already to
@@ -657,9 +825,19 @@ proc ::safe::CheckFileName {slave file} {
}
}
+# AliasFileSubcommand handles selected subcommands of [file] in safe
+# interpreters that are *almost* safe. In particular, it just acts to
+# prevent discovery of what home directories exist.
+
+proc ::safe::AliasFileSubcommand {child subcommand name} {
+ tailcall ::interp invokehidden $child tcl:file:$subcommand $name
+}
+
# AliasGlob is the target of the "glob" alias in safe interpreters.
-proc ::safe::AliasGlob {slave args} {
- Log $slave "GLOB ! $args" NOTICE
+
+proc ::safe::AliasGlob {child args} {
+ variable AutoPathSync
+ Log $child "GLOB ! $args" NOTICE
set cmd {}
set at 0
array set got {
@@ -681,11 +859,15 @@ proc ::safe::AliasGlob {slave args} {
while {$at < [llength $args]} {
switch -glob -- [set opt [lindex $args $at]] {
- -nocomplain - -- - -join - -tails {
+ -nocomplain - -- - -tails {
lappend cmd $opt
set got($opt) 1
incr at
}
+ -join {
+ set got($opt) 1
+ incr at
+ }
-types - -type {
lappend cmd -types [lindex $args [incr at]]
incr at
@@ -699,16 +881,10 @@ proc ::safe::AliasGlob {slave args} {
set virtualdir [lindex $args [incr at]]
incr at
}
- pkgIndex.tcl {
- # Oops, this is globbing a subdirectory in regular package
- # search. That is not wanted. Abort, handler does catch
- # already (because glob was not defined before). See
- # package.tcl, lines 484ff in tclPkgUnknown.
- return -code error "unknown command glob"
- }
-* {
- Log $slave "Safe base rejecting glob option '$opt'"
+ Log $child "Safe base rejecting glob option '$opt'"
return -code error "Safe base rejecting glob option '$opt'"
+ # unsafe/unnecessary options rejected: -path
}
default {
break
@@ -718,90 +894,132 @@ proc ::safe::AliasGlob {slave args} {
}
# Get the real path from the virtual one and check that the path is in the
- # access path of that slave. Done after basic argument processing so that
+ # access path of that child. Done after basic argument processing so that
# we know if -nocomplain is set.
if {$got(-directory)} {
- if {[catch {
- set dir [TranslatePath $slave $virtualdir]
- DirInAccessPath $slave $dir
- } msg]} {
- Log $slave $msg
- if {$got(-nocomplain)} {
- return
- }
+ try {
+ set dir [TranslatePath $child $virtualdir]
+ DirInAccessPath $child $dir
+ } on error msg {
+ Log $child $msg
+ if {$got(-nocomplain)} return
return -code error "permission denied"
}
- lappend cmd -directory $dir
+ if {$got(--)} {
+ set cmd [linsert $cmd end-1 -directory $dir]
+ } else {
+ lappend cmd -directory $dir
+ }
+ } else {
+ # The code after this "if ... else" block would conspire to return with
+ # no results in this case, if it were allowed to proceed. Instead,
+ # return now and reduce the number of cases to be considered later.
+ Log $child {option -directory must be supplied}
+ if {$got(-nocomplain)} return
+ return -code error "permission denied"
}
- # Apply the -join semantics ourselves
+ # Apply the -join semantics ourselves (hence -join not copied to $cmd)
if {$got(-join)} {
set args [lreplace $args $at end [join [lrange $args $at end] "/"]]
}
- # Process remaining pattern arguments
+ # Process the pattern arguments. If we've done a join there is only one
+ # pattern argument.
+
set firstPattern [llength $cmd]
foreach opt [lrange $args $at end] {
if {![regexp $dirPartRE $opt -> thedir thefile]} {
set thedir .
+ # The *.tm search comes here.
}
- if {$thedir eq "*"} {
+ # "Special" treatment for (joined) argument {*/pkgIndex.tcl}.
+ # Do the expansion of "*" here, and filter out any directories that are
+ # not in the access path. The outcome is to lappend to cmd a path of
+ # the form $virtualdir/subdir/pkgIndex.tcl for each subdirectory subdir,
+ # after removing any subdir that are not in the access path.
+ if {($thedir eq "*") && ($thefile eq "pkgIndex.tcl")} {
set mapped 0
- foreach d [glob -directory [TranslatePath $slave $virtualdir] \
+ foreach d [glob -directory [TranslatePath $child $virtualdir] \
-types d -tails *] {
catch {
- DirInAccessPath $slave \
- [TranslatePath $slave [file join $virtualdir $d]]
- if {$thefile eq "pkgIndex.tcl" || $thefile eq "*.tm"} {
- lappend cmd [file join $d $thefile]
- set mapped 1
- }
+ DirInAccessPath $child \
+ [TranslatePath $child [file join $virtualdir $d]]
+ lappend cmd [file join $d $thefile]
+ set mapped 1
}
}
if {$mapped} continue
+ # Don't [continue] if */pkgIndex.tcl has no matches in the access
+ # path. The pattern will now receive the same treatment as a
+ # "non-special" pattern (and will fail because it includes a "*" in
+ # the directory name).
}
- if {[catch {
- set thedir [file join $virtualdir $thedir]
- DirInAccessPath $slave [TranslatePath $slave $thedir]
- } msg]} {
- Log $slave $msg
+ # Any directory pattern that is not an exact (i.e. non-glob) match to a
+ # directory in the access path will be rejected here.
+ # - Rejections include any directory pattern that has glob matching
+ # patterns "*", "?", backslashes, braces or square brackets, (UNLESS
+ # it corresponds to a genuine directory name AND that directory is in
+ # the access path).
+ # - The only "special matching characters" that remain in patterns for
+ # processing by glob are in the filename tail.
+ # - [file join $anything ~${foo}] is ~${foo}, which is not an exact
+ # match to any directory in the access path. Hence directory patterns
+ # that begin with "~" are rejected here. Tests safe-16.[5-8] check
+ # that "file join" remains as required and does not expand ~${foo}.
+ # - Bug [3529949] relates to unwanted expansion of ~${foo} and this is
+ # how the present code avoids the bug. All tests safe-16.* relate.
+ try {
+ DirInAccessPath $child [TranslatePath $child \
+ [file join $virtualdir $thedir]]
+ } on error msg {
+ Log $child $msg
if {$got(-nocomplain)} continue
return -code error "permission denied"
}
lappend cmd $opt
}
- Log $slave "GLOB = $cmd" NOTICE
+ Log $child "GLOB = $cmd" NOTICE
if {$got(-nocomplain) && [llength $cmd] eq $firstPattern} {
return
}
- if {[catch {
- ::interp invokehidden $slave glob {*}$cmd
- } msg]} {
- Log $slave $msg
+ try {
+ # >>>>>>>>>> HERE'S THE CALL TO SAFE INTERP GLOB <<<<<<<<<<
+ # - Pattern arguments added to cmd have NOT been translated from tokens.
+ # Only the virtualdir is translated (to dir).
+ # - In the pkgIndex.tcl case, there is no "*" in the pattern arguments,
+ # which are a list of names each with tail pkgIndex.tcl. The purpose
+ # of the call to glob is to remove the names for which the file does
+ # not exist.
+ set entries [::interp invokehidden $child glob {*}$cmd]
+ } on error msg {
+ # This is the only place that a call with -nocomplain and no invalid
+ # "dash-options" can return an error.
+ Log $child $msg
return -code error "script error"
}
- Log $slave "GLOB < $msg" NOTICE
+ Log $child "GLOB < $entries" NOTICE
- # Translate path back to what the slave should see.
+ # Translate path back to what the child should see.
set res {}
set l [string length $dir]
- foreach p $msg {
+ foreach p $entries {
if {[string equal -length $l $dir $p]} {
set p [string replace $p 0 [expr {$l-1}] $virtualdir]
}
lappend res $p
}
- Log $slave "GLOB > $res" NOTICE
+ Log $child "GLOB > $res" NOTICE
return $res
}
# AliasSource is the target of the "source" alias in safe interpreters.
-proc ::safe::AliasSource {slave args} {
+proc ::safe::AliasSource {child args} {
set argc [llength $args]
# Extended for handling of Tcl Modules to allow not only "source
# filename", but "source -encoding E filename" as well.
@@ -810,83 +1028,91 @@ proc ::safe::AliasSource {slave args} {
set encoding [lindex $args 1]
set at 2
if {$encoding eq "identity"} {
- Log $slave "attempt to use the identity encoding"
+ Log $child "attempt to use the identity encoding"
return -code error "permission denied"
}
} else {
set at 0
- set encoding {}
+ set encoding utf-8
}
if {$argc != 1} {
set msg "wrong # args: should be \"source ?-encoding E? fileName\""
- Log $slave "$msg ($args)"
+ Log $child "$msg ($args)"
return -code error $msg
}
set file [lindex $args $at]
# get the real path from the virtual one.
if {[catch {
- set realfile [TranslatePath $slave $file]
+ set realfile [TranslatePath $child $file]
} msg]} {
- Log $slave $msg
+ Log $child $msg
return -code error "permission denied"
}
- # check that the path is in the access path of that slave
+ # check that the path is in the access path of that child
if {[catch {
- FileInAccessPath $slave $realfile
+ FileInAccessPath $child $realfile
} msg]} {
- Log $slave $msg
+ Log $child $msg
return -code error "permission denied"
}
- # do the checks on the filename :
+ # Check that the filename exists and is readable. If it is not, deliver
+ # this -errorcode so that caller in tclPkgUnknown does not write a message
+ # to tclLog. Has no effect on other callers of ::source, which are in
+ # "package ifneeded" scripts.
if {[catch {
- CheckFileName $slave $realfile
+ CheckFileName $child $realfile
} msg]} {
- Log $slave "$realfile:$msg"
- return -code error $msg
+ Log $child "$realfile:$msg"
+ return -code error -errorcode {POSIX EACCES} $msg
}
# Passed all the tests, lets source it. Note that we do this all manually
- # because we want to control [info script] in the slave so information
+ # because we want to control [info script] in the child so information
# doesn't leak so much. [Bug 2913625]
- set old [::interp eval $slave {info script}]
+ set old [::interp eval $child {info script}]
+ set replacementMsg "script error"
set code [catch {
set f [open $realfile]
- fconfigure $f -eofchar "\032 {}"
- if {$encoding ne ""} {
- fconfigure $f -encoding $encoding
- }
+ fconfigure $f -encoding $encoding -eofchar \x1A
set contents [read $f]
close $f
- ::interp eval $slave [list info script $file]
- ::interp eval $slave $contents
+ ::interp eval $child [list info script $file]
} msg opt]
- catch {interp eval $slave [list info script $old]}
+ if {$code == 0} {
+ # See [Bug 1d26e580cf]
+ if {[string index $contents 0] eq "\uFEFF"} {
+ set contents [string range $contents 1 end]
+ }
+ set code [catch {::interp eval $child $contents} msg opt]
+ set replacementMsg $msg
+ }
+ catch {interp eval $child [list info script $old]}
# Note that all non-errors are fine result codes from [source], so we must
# take a little care to do it properly. [Bug 2923613]
if {$code == 1} {
- Log $slave $msg
- return -code error "script error"
+ Log $child $msg
+ return -code error $replacementMsg
}
return -code $code -options $opt $msg
}
# AliasLoad is the target of the "load" alias in safe interpreters.
-proc ::safe::AliasLoad {slave file args} {
+proc ::safe::AliasLoad {child file args} {
set argc [llength $args]
if {$argc > 2} {
set msg "load error: too many arguments"
- Log $slave "$msg ($argc) {$file $args}"
+ Log $child "$msg ($argc) {$file $args}"
return -code error $msg
}
- # package name (can be empty if file is not).
- set package [lindex $args 0]
+ # prefix (can be empty if file is not).
+ set prefix [lindex $args 0]
- namespace upvar ::safe S$slave state
+ namespace upvar ::safe [VarName $child] state
# Determine where to load. load use a relative interp path and {}
# means self, so we can directly and safely use passed arg.
@@ -895,62 +1121,67 @@ proc ::safe::AliasLoad {slave file args} {
# we will try to load into a sub sub interp; check that we want to
# authorize that.
if {!$state(nestedok)} {
- Log $slave "loading to a sub interp (nestedok)\
- disabled (trying to load $package to $target)"
+ Log $child "loading to a sub interp (nestedok)\
+ disabled (trying to load $prefix to $target)"
return -code error "permission denied (nested load)"
}
}
# Determine what kind of load is requested
if {$file eq ""} {
- # static package loading
- if {$package eq ""} {
- set msg "load error: empty filename and no package name"
- Log $slave $msg
+ # static loading
+ if {$prefix eq ""} {
+ set msg "load error: empty filename and no prefix"
+ Log $child $msg
return -code error $msg
}
if {!$state(staticsok)} {
- Log $slave "static packages loading disabled\
- (trying to load $package to $target)"
- return -code error "permission denied (static package)"
+ Log $child "static loading disabled\
+ (trying to load $prefix to $target)"
+ return -code error "permission denied (static library)"
}
} else {
# file loading
# get the real path from the virtual one.
- if {[catch {
- set file [TranslatePath $slave $file]
- } msg]} {
- Log $slave $msg
+ try {
+ set file [TranslatePath $child $file]
+ } on error msg {
+ Log $child $msg
return -code error "permission denied"
}
# check the translated path
- if {[catch {
- FileInAccessPath $slave $file
- } msg]} {
- Log $slave $msg
+ try {
+ FileInAccessPath $child $file
+ } on error msg {
+ Log $child $msg
return -code error "permission denied (path)"
}
}
- if {[catch {
- ::interp invokehidden $slave load $file $package $target
- } msg]} {
- Log $slave $msg
+ try {
+ return [::interp invokehidden $child load $file $prefix $target]
+ } on error msg {
+ # Some libraries return no error message.
+ set msg0 "load of library for prefix $prefix failed"
+ if {$msg eq {}} {
+ set msg $msg0
+ } else {
+ set msg "$msg0: $msg"
+ }
+ Log $child $msg
return -code error $msg
}
-
- return $msg
}
# FileInAccessPath raises an error if the file is not found in the list of
-# directories contained in the (master side recorded) slave's access path.
+# directories contained in the (parent side recorded) child's access path.
# the security here relies on "file dirname" answering the proper
# result... needs checking ?
-proc ::safe::FileInAccessPath {slave file} {
- namespace upvar ::safe S$slave state
+proc ::safe::FileInAccessPath {child file} {
+ namespace upvar ::safe [VarName $child] state
set access_path $state(access_path)
if {[file isdirectory $file]} {
@@ -962,14 +1193,14 @@ proc ::safe::FileInAccessPath {slave file} {
# potential pathname anomalies.
set norm_parent [file normalize $parent]
- namespace upvar ::safe S$slave state
+ namespace upvar ::safe [VarName $child] state
if {$norm_parent ni $state(access_path,norm)} {
return -code error "\"$file\": not in access_path"
}
}
-proc ::safe::DirInAccessPath {slave dir} {
- namespace upvar ::safe S$slave state
+proc ::safe::DirInAccessPath {child dir} {
+ namespace upvar ::safe [VarName $child] state
set access_path $state(access_path)
if {[file isfile $dir]} {
@@ -980,102 +1211,130 @@ proc ::safe::DirInAccessPath {slave dir} {
# potential pathname anomalies.
set norm_dir [file normalize $dir]
- namespace upvar ::safe S$slave state
+ namespace upvar ::safe [VarName $child] state
if {$norm_dir ni $state(access_path,norm)} {
return -code error "\"$dir\": not in access_path"
}
}
-# This procedure enables access from a safe interpreter to only a subset
-# of the subcommands of a command:
+# This procedure is used to report an attempt to use an unsafe member of an
+# ensemble command.
-proc ::safe::Subset {slave command okpat args} {
- set subcommand [lindex $args 0]
- if {[regexp $okpat $subcommand]} {
- return [$command {*}$args]
- }
+proc ::safe::BadSubcommand {child command subcommand args} {
set msg "not allowed to invoke subcommand $subcommand of $command"
- Log $slave $msg
- return -code error $msg
+ Log $child $msg
+ return -code error -errorcode {TCL SAFE SUBCOMMAND} $msg
}
-# This procedure installs an alias in a slave that invokes "safesubset" in
-# the master to execute allowed subcommands. It precomputes the pattern of
-# allowed subcommands; you can use wildcards in the pattern if you wish to
-# allow subcommand abbreviation.
-#
-# Syntax is: AliasSubset slave alias target subcommand1 subcommand2...
-
-proc ::safe::AliasSubset {slave alias target args} {
- set pat "^([join $args |])\$"
- ::interp alias $slave $alias {}\
- [namespace current]::Subset $slave $target $pat
-}
-
-# AliasEncoding is the target of the "encoding" alias in safe interpreters.
-
-proc ::safe::AliasEncoding {slave option args} {
- # Careful; do not want empty option to get through to the [string equal]
- if {[regexp {^(name.*|convert.*|)$} $option]} {
- return [::interp invokehidden $slave encoding $option {*}$args]
- }
-
- if {[string equal -length [string length $option] $option "system"]} {
- if {[llength $args] == 0} {
- # passed all the tests , lets source it:
- if {[catch {
- set sysenc [::interp invokehidden $slave encoding system]
- } msg]} {
- Log $slave $msg
- return -code error "script error"
- }
- return $sysenc
+# AliasEncodingSystem is the target of the "encoding system" alias in safe
+# interpreters.
+proc ::safe::AliasEncodingSystem {child args} {
+ try {
+ # Must not pass extra arguments; safe interpreters may not set the
+ # system encoding but they may read it.
+ if {[llength $args]} {
+ return -code error -errorcode {TCL WRONGARGS} \
+ "wrong # args: should be \"encoding system\""
}
- set msg "wrong # args: should be \"encoding system\""
- set code {TCL WRONGARGS}
- } else {
- set msg "bad option \"$option\": must be convertfrom, convertto, names, or system"
- set code [list TCL LOOKUP INDEX option $option]
+ } on error {msg options} {
+ Log $child $msg
+ return -options $options $msg
}
- Log $slave $msg
- return -code error -errorcode $code $msg
+ tailcall ::interp invokehidden $child tcl:encoding:system
}
# Various minor hiding of platform features. [Bug 2913625]
-proc ::safe::AliasExeName {slave} {
+proc ::safe::AliasExeName {child} {
return ""
}
+# ------------------------------------------------------------------------------
+# Using Interpreter Names with Namespace Qualifiers
+# ------------------------------------------------------------------------------
+# (1) We wish to preserve compatibility with existing code, in which Safe Base
+# interpreter names have no namespace qualifiers.
+# (2) safe::interpCreate and the rest of the Safe Base previously could not
+# accept namespace qualifiers in an interpreter name.
+# (3) The interp command will accept namespace qualifiers in an interpreter
+# name, but accepts distinct interpreters that will have the same command
+# name (e.g. foo, ::foo, and :::foo) (bug 66c2e8c974).
+# (4) To satisfy these constraints, Safe Base interpreter names will be fully
+# qualified namespace names with no excess colons and with the leading "::"
+# omitted.
+# (5) Trailing "::" implies a namespace tail {}, which interp reads as {{}}.
+# Reject such names.
+# (6) We could:
+# (a) EITHER reject usable but non-compliant names (e.g. excess colons) in
+# interpCreate, interpInit;
+# (b) OR accept such names and then translate to a compliant name in every
+# command.
+# The problem with (b) is that the user will expect to use the name with the
+# interp command and will find that it is not recognised.
+# E.g "interpCreate ::foo" creates interpreter "foo", and the user's name
+# "::foo" works with all the Safe Base commands, but "interp eval ::foo"
+# fails.
+# So we choose (a).
+# (7) The command
+# namespace upvar ::safe S$child state
+# becomes
+# namespace upvar ::safe [VarName $child] state
+# ------------------------------------------------------------------------------
+
+proc ::safe::RejectExcessColons {child} {
+ set stripped [regsub -all -- {:::*} $child ::]
+ if {[string range $stripped end-1 end] eq {::}} {
+ return -code error {interpreter name must not end in "::"}
+ }
+ if {$stripped ne $child} {
+ set msg {interpreter name has excess colons in namespace separators}
+ return -code error $msg
+ }
+ if {[string range $stripped 0 1] eq {::}} {
+ return -code error {interpreter name must not begin "::"}
+ }
+ return
+}
+
+proc ::safe::VarName {child} {
+ # return S$child
+ return S[string map {:: @N @ @A} $child]
+}
+
proc ::safe::Setup {} {
####
#
# Setup the arguments parsing
#
####
+ variable AutoPathSync
# Share the descriptions
- set temp [::tcl::OptKeyRegister {
- {-accessPath -list {} "access path for the slave"}
+ set OptList {
+ {-accessPath -list {} "access path for the child"}
{-noStatics "prevent loading of statically linked pkgs"}
{-statics true "loading of statically linked pkgs"}
{-nestedLoadOk "allow nested loading"}
{-nested false "nested loading"}
{-deleteHook -script {} "delete hook"}
- }]
+ }
+ if {!$AutoPathSync} {
+ lappend OptList {-autoPath -list {} "::auto_path for the child"}
+ }
+ set temp [::tcl::OptKeyRegister $OptList]
- # create case (slave is optional)
+ # create case (child is optional)
::tcl::OptKeyRegister {
- {?slave? -name {} "name of the slave (optional)"}
+ {?child? -name {} "name of the child (optional)"}
} ::safe::interpCreate
# adding the flags sub programs to the command program (relying on Opt's
# internal implementation details)
lappend ::tcl::OptDesc(::safe::interpCreate) $::tcl::OptDesc($temp)
- # init and configure (slave is needed)
+ # init and configure (child is needed)
::tcl::OptKeyRegister {
- {slave -name {} "name of the slave"}
+ {child -name {} "name of the child"}
} ::safe::interpIC
# adding the flags sub programs to the command program (relying on Opt's
@@ -1099,29 +1358,104 @@ proc ::safe::Setup {} {
return
}
+# Accessor method for ::safe::AutoPathSync
+# Usage: ::safe::setSyncMode ?newValue?
+# Respond to changes by calling Setup again, preserving any
+# caller-defined logging. This allows complete equivalence with
+# prior Safe Base behavior if AutoPathSync is true.
+#
+# >>> WARNING <<<
+#
+# DO NOT CHANGE AutoPathSync EXCEPT BY THIS COMMAND - IT IS VITAL THAT WHENEVER
+# THE VALUE CHANGES, THE EXISTING PARSE TOKENS ARE DELETED AND Setup IS CALLED
+# AGAIN.
+# (The initialization of AutoPathSync at the end of this file is acceptable
+# because Setup has not yet been called.)
+
+proc ::safe::setSyncMode {args} {
+ variable AutoPathSync
+
+ if {[llength $args] == 0} {
+ } elseif {[llength $args] == 1} {
+ set newValue [lindex $args 0]
+ if {![string is boolean -strict $newValue]} {
+ return -code error "new value must be a valid boolean"
+ }
+ set args [expr {$newValue && $newValue}]
+ if {([info vars ::safe::S*] ne {}) && ($args != $AutoPathSync)} {
+ return -code error \
+ "cannot set new value while Safe Base child interpreters exist"
+ }
+ if {($args != $AutoPathSync)} {
+ set AutoPathSync {*}$args
+ ::tcl::OptKeyDelete ::safe::interpCreate
+ ::tcl::OptKeyDelete ::safe::interpIC
+ set TmpLog [setLogCmd]
+ Setup
+ setLogCmd $TmpLog
+ }
+ } else {
+ set msg {wrong # args: should be "safe::setSyncMode ?newValue?"}
+ return -code error $msg
+ }
+
+ return $AutoPathSync
+}
+
namespace eval ::safe {
- # internal variables
+ # internal variables (must not begin with "S")
+
+ # AutoPathSync
+ #
+ # Set AutoPathSync to 0 to give a child's ::auto_path the same meaning as
+ # for an unsafe interpreter: the package command will search its directories
+ # and first-level subdirectories for pkgIndex.tcl files; the auto-loader
+ # will search its directories for tclIndex files. The access path and
+ # module path will be maintained as separate values, and ::auto_path will
+ # not be updated when the user calls ::safe::interpAddToAccessPath to add to
+ # the access path. If the user specifies an access path when calling
+ # interpCreate, interpInit or interpConfigure, it is the user's
+ # responsibility to define the child's auto_path. If these commands are
+ # called with no (or empty) access path, the child's auto_path will be set
+ # to a tokenized form of the parent's auto_path, and these directories and
+ # their first-level subdirectories will be added to the access path.
+ #
+ # Set to 1 for "traditional" behavior: a child's entire access path and
+ # module path are copied to its ::auto_path, which is updated whenever
+ # the user calls ::safe::interpAddToAccessPath to add to the access path.
+ variable AutoPathSync 0
# Log command, set via 'setLogCmd'. Logging is disabled when empty.
variable Log {}
- # The package maintains a state array per slave interp under its
+ # The package maintains a state array per child interp under its
# control. The name of this array is S<interp-name>. This array is
# brought into scope where needed, using 'namespace upvar'. The S
- # prefix is used to avoid that a slave interp called "Log" smashes
+ # prefix is used to avoid that a child interp called "Log" smashes
# the "Log" variable.
#
# The array's elements are:
#
- # access_path : List of paths accessible to the slave.
+ # access_path : List of paths accessible to the child.
# access_path,norm : Ditto, in normalized form.
- # access_path,slave : Ditto, as the path tokens as seen by the slave.
+ # access_path,child : Ditto, as the path tokens as seen by the child.
# access_path,map : dict ( token -> path )
# access_path,remap : dict ( path -> token )
- # tm_path_slave : List of TM root directories, as tokens seen by the slave.
+ # auto_path : List of paths requested by the caller as child's ::auto_path.
+ # tm_path_child : List of TM root directories, as tokens seen by the child.
# staticsok : Value of option -statics
# nestedok : Value of option -nested
# cleanupHook : Value of option -deleteHook
+ #
+ # In principle, the child can change its value of ::auto_path -
+ # - a package might add a path (that is already in the access path) for
+ # access to tclIndex files;
+ # - the script might remove some elements of the auto_path.
+ # However, this is really the business of the parent, and the auto_path will
+ # be reset whenever the token mapping changes (i.e. when option -accessPath is
+ # used to change the access path).
+ # -autoPath is now stored in the array and is no longer obtained from
+ # the child.
}
::safe::Setup
diff --git a/library/tclIndex b/library/tclIndex
index c1ccb16..2b5619f 100644
--- a/library/tclIndex
+++ b/library/tclIndex
@@ -6,85 +6,107 @@
# element name is the name of a command and the value is
# a script that loads the command.
-set auto_index(auto_reset) [list source [file join $dir auto.tcl]]
-set auto_index(tcl_findLibrary) [list source [file join $dir auto.tcl]]
-set auto_index(auto_mkindex) [list source [file join $dir auto.tcl]]
-set auto_index(auto_mkindex_old) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::init) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::cleanup) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::mkindex) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::hook) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::slavehook) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::command) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::commandInit) [list source [file join $dir auto.tcl]]
-set auto_index(::auto_mkindex_parser::fullname) [list source [file join $dir auto.tcl]]
-set auto_index(history) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistAdd) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistKeep) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistClear) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistInfo) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistRedo) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistIndex) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistEvent) [list source [file join $dir history.tcl]]
-set auto_index(::tcl::HistChange) [list source [file join $dir history.tcl]]
-set auto_index(pkg_mkIndex) [list source [file join $dir package.tcl]]
-set auto_index(tclPkgSetup) [list source [file join $dir package.tcl]]
-set auto_index(tclPkgUnknown) [list source [file join $dir package.tcl]]
-set auto_index(::tcl::MacOSXPkgUnknown) [list source [file join $dir package.tcl]]
-set auto_index(::pkg::create) [list source [file join $dir package.tcl]]
-set auto_index(parray) [list source [file join $dir parray.tcl]]
-set auto_index(::safe::InterpStatics) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::InterpNested) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::interpCreate) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::interpInit) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::CheckInterp) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::interpConfigure) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::InterpCreate) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::InterpSetConfig) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::interpFindInAccessPath) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::interpAddToAccessPath) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::InterpInit) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::AddSubDirs) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::interpDelete) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::setLogCmd) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::SyncAccessPath) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::InterpStateName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::IsInterp) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::PathToken) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::PathListName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::VirtualPathListName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::PathNumberName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::StaticsOkName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::NestedOkName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Toplevel) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Set) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Lappend) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Unset) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Exists) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::GetAccessPath) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::StaticsOk) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::NestedOk) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::DeleteHookName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::TranslatePath) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Log) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::CheckFileName) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::AliasSource) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::AliasLoad) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::FileInAccessPath) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::Subset) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::AliasSubset) [list source [file join $dir safe.tcl]]
-set auto_index(::safe::AliasEncoding) [list source [file join $dir safe.tcl]]
-set auto_index(tcl_wordBreakAfter) [list source [file join $dir word.tcl]]
-set auto_index(tcl_wordBreakBefore) [list source [file join $dir word.tcl]]
-set auto_index(tcl_endOfWord) [list source [file join $dir word.tcl]]
-set auto_index(tcl_startOfNextWord) [list source [file join $dir word.tcl]]
-set auto_index(tcl_startOfPreviousWord) [list source [file join $dir word.tcl]]
-set auto_index(::tcl::tm::add) [list source [file join $dir tm.tcl]]
-set auto_index(::tcl::tm::remove) [list source [file join $dir tm.tcl]]
-set auto_index(::tcl::tm::list) [list source [file join $dir tm.tcl]]
-set auto_index(::tcl::tm::UnknownHandler) [list source [file join $dir tm.tcl]]
-set auto_index(::tcl::tm::roots) [list source [file join $dir tm.tcl]]
-set auto_index(::tcl::tm::path) [list source [file join $dir tm.tcl]]
-if {[namespace exists ::tcl::unsupported]} {
- set auto_index(timerate) {namespace import ::tcl::unsupported::timerate}
-}
+set auto_index(auto_reset) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(tcl_findLibrary) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(auto_mkindex) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(auto_mkindex_old) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::init) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::cleanup) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::mkindex) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::hook) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::childhook) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::command) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::commandInit) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::fullname) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::auto_mkindex_parser::indexEntry) [list ::tcl::Pkg::source [file join $dir auto.tcl]]
+set auto_index(::tcl::clock::Initialize) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::mcget) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::mcMerge) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::GetSystemLocale) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::EnterLocale) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::_hasRegistry) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::LoadWindowsDateTimeFormats) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::LocalizeFormat) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::GetSystemTimeZone) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::SetupTimeZone) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::GuessWindowsTimeZone) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::LoadTimeZoneFile) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::LoadZoneinfoFile) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::ReadZoneinfoFile) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::ParsePosixTimeZone) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::ProcessPosixTimeZone) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::DeterminePosixDSTTime) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::GetJulianDayFromEraYearDay) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::GetJulianDayFromEraYearMonthWeekDay) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::IsGregorianLeapYear) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::WeekdayOnOrBefore) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::ChangeCurrentLocale) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(::tcl::clock::ClearCaches) [list ::tcl::Pkg::source [file join $dir clock.tcl]]
+set auto_index(foreachLine) [list ::tcl::Pkg::source [file join $dir foreachline.tcl]]
+set auto_index(::tcl::history) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(history) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistAdd) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistKeep) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistClear) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistInfo) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistRedo) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistIndex) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistEvent) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistChange) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::HistNextID) [list ::tcl::Pkg::source [file join $dir history.tcl]]
+set auto_index(::tcl::Pkg::CompareExtension) [list ::tcl::Pkg::source [file join $dir package.tcl]]
+set auto_index(pkg_mkIndex) [list ::tcl::Pkg::source [file join $dir package.tcl]]
+set auto_index(tclPkgSetup) [list ::tcl::Pkg::source [file join $dir package.tcl]]
+set auto_index(tclPkgUnknown) [list ::tcl::Pkg::source [file join $dir package.tcl]]
+set auto_index(::tcl::MacOSXPkgUnknown) [list ::tcl::Pkg::source [file join $dir package.tcl]]
+set auto_index(::pkg::create) [list ::tcl::Pkg::source [file join $dir package.tcl]]
+set auto_index(parray) [list ::tcl::Pkg::source [file join $dir parray.tcl]]
+set auto_index(readFile) [list ::tcl::Pkg::source [file join $dir readfile.tcl]]
+set auto_index(::safe::InterpStatics) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::InterpNested) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::interpCreate) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::interpInit) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::CheckInterp) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::interpConfigure) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::InterpCreate) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::InterpSetConfig) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::DetokPath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::interpFindInAccessPath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::interpAddToAccessPath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::InterpInit) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AddSubDirs) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::interpDelete) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::setLogCmd) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::SyncAccessPath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::PathToken) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::TranslatePath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::Log) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::CheckFileName) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AliasFileSubcommand) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AliasGlob) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AliasSource) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AliasLoad) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::FileInAccessPath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::DirInAccessPath) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::BadSubcommand) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AliasEncodingSystem) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::AliasExeName) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::RejectExcessColons) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::VarName) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::Setup) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::safe::setSyncMode) [list ::tcl::Pkg::source [file join $dir safe.tcl]]
+set auto_index(::tcl::tm::path) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::tm::add) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::tm::remove) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::tm::list) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::tm::UnknownHandler) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::tm::Defaults) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::tm::roots) [list ::tcl::Pkg::source [file join $dir tm.tcl]]
+set auto_index(::tcl::UpdateWordBreakREs) [list ::tcl::Pkg::source [file join $dir word.tcl]]
+set auto_index(tcl_wordBreakAfter) [list ::tcl::Pkg::source [file join $dir word.tcl]]
+set auto_index(tcl_wordBreakBefore) [list ::tcl::Pkg::source [file join $dir word.tcl]]
+set auto_index(tcl_endOfWord) [list ::tcl::Pkg::source [file join $dir word.tcl]]
+set auto_index(tcl_startOfNextWord) [list ::tcl::Pkg::source [file join $dir word.tcl]]
+set auto_index(tcl_startOfPreviousWord) [list ::tcl::Pkg::source [file join $dir word.tcl]]
+set auto_index(writeFile) [list ::tcl::Pkg::source [file join $dir writefile.tcl]]
+set auto_index(::tcl::unsupported::icu) [list ::tcl::Pkg::source [file join $dir icu.tcl]] \ No newline at end of file
diff --git a/library/tcltest/pkgIndex.tcl b/library/tcltest/pkgIndex.tcl
index a56a0d6..7f7968e 100644
--- a/library/tcltest/pkgIndex.tcl
+++ b/library/tcltest/pkgIndex.tcl
@@ -9,4 +9,4 @@
# full path name of this file's directory.
if {![package vsatisfies [package provide Tcl] 8.5-]} {return}
-package ifneeded tcltest 2.5.3 [list source [file join $dir tcltest.tcl]]
+package ifneeded tcltest 2.5.9 [list source -encoding utf-8 [file join $dir tcltest.tcl]]
diff --git a/library/tcltest/tcltest.tcl b/library/tcltest/tcltest.tcl
index 7dc75d7..302ffee 100644
--- a/library/tcltest/tcltest.tcl
+++ b/library/tcltest/tcltest.tcl
@@ -10,26 +10,28 @@
# initially implemented by Mary Ann May-Pumphrey of Sun
# Microsystems.
#
-# Copyright (c) 1994-1997 Sun Microsystems, Inc.
-# Copyright (c) 1998-1999 Scriptics Corporation.
-# Copyright (c) 2000 Ajuba Solutions
+# Copyright © 1994-1997 Sun Microsystems, Inc.
+# Copyright © 1998-1999 Scriptics Corporation.
+# Copyright © 2000 Ajuba Solutions
# Contributions from Don Porter, NIST, 2002. (not subject to US copyright)
# All rights reserved.
-package require Tcl 8.5- ;# -verbose line uses [info frame]
namespace eval tcltest {
# When the version number changes, be sure to update the pkgIndex.tcl file,
# and the install directory in the Makefiles. When the minor version
# changes (new feature) be sure to update the man page as well.
- variable Version 2.5.3
+ variable Version 2.5.9
# Compatibility support for dumb variables defined in tcltest 1
- # Do not use these. Call [package provide Tcl] and [info patchlevel]
+ # Do not use these. Call [package require] and [info patchlevel]
# yourself. You don't need tcltest to wrap it for you.
- variable version [package provide Tcl]
+ variable version [package require Tcl 8.5-]
variable patchLevel [info patchlevel]
+ # Detect if we can use code points >= \U10000
+ variable fullutf [package vsatisfies $version 8.7-]
+
##### Export the public tcltest procs; several categories
#
# Export the main functional commands that do useful things
@@ -41,7 +43,7 @@ namespace eval tcltest {
outputChannel testConstraint
# Export commands that are duplication (candidates for deprecation)
- if {![package vsatisfies [package provide Tcl] 8.7-]} {
+ if {![package vsatisfies [package provide Tcl] 9.0-]} {
namespace export bytestring ;# dups [encoding convertfrom identity]
}
namespace export debug ;# [configure -debug]
@@ -153,7 +155,7 @@ namespace eval tcltest {
}
##### Initialize internal arrays of tcltest, but only if the caller
- # has not already pre-initialized them. This is done to support
+ # has not already preinitialized them. This is done to support
# compatibility with older tests that directly access internals
# rather than go through command interfaces.
#
@@ -163,7 +165,7 @@ namespace eval tcltest {
return
}
if {[info exists $varName]} {
- # Pre-initialized value is a scalar: destroy it!
+ # Preinitialized value is a scalar: Destroy it!
unset $varName
}
array set $varName $value
@@ -196,7 +198,7 @@ namespace eval tcltest {
ArrayDefault testConstraints {}
##### Initialize internal variables of tcltest, but only if the caller
- # has not already pre-initialized them. This is done to support
+ # has not already preinitialized them. This is done to support
# compatibility with older tests that directly access internals
# rather than go through command interfaces.
#
@@ -229,7 +231,7 @@ namespace eval tcltest {
# check the current working dir for files created by the tests.
# filesMade keeps track of such files created using the makeFile and
# makeDirectory procedures. filesExisted stores the names of
- # pre-existing files.
+ # preexisting files.
#
# Note that $filesExisted lists only those files that exist in
# the original [temporaryDirectory].
@@ -298,7 +300,7 @@ namespace eval tcltest {
# keep track of test level for nested test commands
variable testLevel 0
- # the variables and procs that existed when saveState was called are
+ # the variables and procedures that existed when saveState was called are
# stored in a variable of the same name
Default saveState {}
@@ -345,6 +347,7 @@ namespace eval tcltest {
proc outputChannel { {filename ""} } {
variable outputChannel
variable ChannelsWeOpened
+ variable fullutf
# This is very subtle and tricky, so let me try to explain.
# (Hopefully this longer comment will be clear when I come
@@ -354,12 +357,12 @@ namespace eval tcltest {
# be kept in sync with the [configure -outfile] configuration
# option ( and underlying variable Option(-outfile) ). This is
# accomplished with a write trace on Option(-outfile) that will
- # update [outputChannel] whenver a new value is written. That
+ # update [outputChannel] whenever a new value is written. That
# much is easy.
#
# The trick is that in order to maintain compatibility with
# version 1 of tcltest, we must allow every configuration option
- # to get its inital value from command line arguments. This is
+ # to get its initial value from command line arguments. This is
# accomplished by setting initial read traces on all the
# configuration options to parse the command line option the first
# time they are read. These traces are cancelled whenever the
@@ -399,6 +402,9 @@ namespace eval tcltest {
}
default {
set outputChannel [open $filename a]
+ if {$fullutf} {
+ fconfigure $outputChannel -profile tcl8 -encoding utf-8
+ }
set ChannelsWeOpened($outputChannel) 1
# If we created the file in [temporaryDirectory], then
@@ -424,6 +430,7 @@ namespace eval tcltest {
proc errorChannel { {filename ""} } {
variable errorChannel
variable ChannelsWeOpened
+ variable fullutf
# This is subtle and tricky. See the comment above in
# [outputChannel] for a detailed explanation.
@@ -443,6 +450,9 @@ namespace eval tcltest {
}
default {
set errorChannel [open $filename a]
+ if {$fullutf} {
+ fconfigure $errorChannel -profile tcl8 -encoding utf-8
+ }
set ChannelsWeOpened($errorChannel) 1
# If we created the file in [temporaryDirectory], then
@@ -476,7 +486,7 @@ namespace eval tcltest {
# Initialize the default values of the configurable options that are
# historically associated with an exported variable. If that variable
- # is already set, support compatibility by accepting its pre-set value.
+ # is already set, support compatibility by accepting its preset value.
# Use [trace] to establish ongoing connection between the deprecated
# exported variable and the modern option kept as a true internal var.
# Also set up usage string and value testing for the option.
@@ -505,7 +515,7 @@ namespace eval tcltest {
unset $varName
}
namespace eval [namespace current] \
- [list upvar 0 Option($option) $varName]
+ [list upvar 0 Option($option) $varName]
# Workaround for Bug (now Feature Request) 572889. Grrrr....
# Track all the variables tied to options
lappend OptionControlledVariables $varName
@@ -642,7 +652,7 @@ namespace eval tcltest {
proc IsVerbose {level} {
variable Option
- return [expr {[lsearch -exact $Option(-verbose) $level] >= 0}]
+ return [expr {$level in $Option(-verbose)}]
}
# Default verbosity is to show bodies of failed tests
@@ -755,7 +765,7 @@ namespace eval tcltest {
# even if the directory is not writable
return $directory
}
- return -code error "\"$directory\" is not writeable"
+ return -code error "\"$directory\" is not writable"
}
return $directory
}
@@ -783,8 +793,13 @@ namespace eval tcltest {
}
proc ReadLoadScript {args} {
variable Option
+ variable fullutf
+
if {$Option(-loadfile) eq {}} {return}
set tmp [open $Option(-loadfile) r]
+ if {$fullutf} {
+ fconfigure $tmp -profile tcl8 -encoding utf-8
+ }
loadScript [read $tmp]
close $tmp
}
@@ -843,7 +858,7 @@ namespace eval tcltest {
# tcltest::Debug* --
#
# Internal helper procedures to write out debug information
-# dependent on the chosen level. A test shell may overide
+# dependent on the chosen level. A test shell may override
# them, f.e. to redirect the output into a different
# channel, or even into a GUI.
@@ -1125,6 +1140,37 @@ proc tcltest::SafeFetch {n1 n2 op} {
}
}
+# tcltest::Asciify --
+#
+# Transforms the passed string to contain only printable ascii characters.
+# Useful for printing to terminals. Non-printables are mapped to
+# \x, \u or \U sequences, except \n.
+#
+# Arguments:
+# s - string to transform
+#
+# Results:
+# The transformed strings
+#
+# Side effects:
+# None.
+
+proc tcltest::Asciify {s} {
+ set print ""
+ foreach c [split $s ""] {
+ if {(($c < "\x7F") && [string is print $c]) || ($c eq "\n")} {
+ append print $c
+ } elseif {$c < "\u0100"} {
+ append print \\x[format %02X [scan $c %c]]
+ } elseif {$c > "\uFFFF"} {
+ append print \\U[format %08X [scan $c %c]]
+ } else {
+ append print \\u[format %04X [scan $c %c]]
+ }
+ }
+ return $print
+}
+
# tcltest::ConstraintInitializer --
#
# Get or set a script that when evaluated in the tcltest namespace
@@ -1236,19 +1282,23 @@ proc tcltest::DefineConstraintInitializers {} {
# Skip empty tests
- ConstraintInitializer emptyTest {format 0}
+ ConstraintInitializer emptyTest {expr 0}
# By default, tests that expose known bugs are skipped.
- ConstraintInitializer knownBug {format 0}
+ ConstraintInitializer knownBug {expr 0}
# By default, non-portable tests are skipped.
- ConstraintInitializer nonPortable {format 0}
+ ConstraintInitializer nonPortable {expr 0}
+
+ # By default, extremely slow, extensive or IO-aggressive tests are skipped.
+
+ ConstraintInitializer extensive {expr 0}
# Some tests require user interaction.
- ConstraintInitializer userInteraction {format 0}
+ ConstraintInitializer userInteraction {expr 0}
# Some tests must be skipped if the interpreter is not in
# interactive mode
@@ -1297,39 +1347,44 @@ proc tcltest::DefineConstraintInitializers {} {
ConstraintInitializer unixExecs {
set code 1
- if {$::tcl_platform(platform) eq "macintosh"} {
+ if {$::tcl_platform(platform) eq "macintosh"} {
set code 0
- }
- if {$::tcl_platform(platform) eq "windows"} {
+ }
+ if {$::tcl_platform(platform) eq "windows"} {
if {[catch {
- set file _tcl_test_remove_me.txt
- makeFile {hello} $file
+ set file _tcl_test_remove_me.txt
+ makeFile {hello} $file
}]} {
- set code 0
+ set code 0
} elseif {
- [catch {exec cat $file}] ||
- [catch {exec echo hello}] ||
- [catch {exec sh -c echo hello}] ||
- [catch {exec wc $file}] ||
- [catch {exec sleep 1}] ||
- [catch {exec echo abc > $file}] ||
- [catch {exec chmod 644 $file}] ||
- [catch {exec rm $file}] ||
- [llength [auto_execok mkdir]] == 0 ||
- [llength [auto_execok fgrep]] == 0 ||
- [llength [auto_execok grep]] == 0 ||
- [llength [auto_execok ps]] == 0
+ [catch {exec cat $file}] ||
+ [catch {exec echo hello}] ||
+ [catch {exec sh -c echo hello}] ||
+ [catch {exec wc $file}] ||
+ [catch {exec sleep 1}] ||
+ [catch {exec echo abc > $file}] ||
+ [catch {exec chmod 644 $file}] ||
+ [catch {exec rm $file}] ||
+ [llength [auto_execok mkdir]] == 0 ||
+ [llength [auto_execok fgrep]] == 0 ||
+ [llength [auto_execok grep]] == 0 ||
+ [llength [auto_execok ps]] == 0
} {
- set code 0
+ set code 0
}
removeFile $file
- }
+ }
set code
}
ConstraintInitializer stdio {
+ variable fullutf
+
set code 0
if {![catch {set f [open "|[list [interpreter]]" w]}]} {
+ if {$fullutf} {
+ fconfigure $f -profile tcl8 -encoding utf-8
+ }
if {![catch {puts $f exit}]} {
if {![catch {close $f}]} {
set code 1
@@ -1493,8 +1548,8 @@ proc tcltest::ProcessFlags {flagArray} {
# Call the hook
catch {
- array set flag $flagArray
- processCmdLineArgsHook [array get flag]
+ array set flag $flagArray
+ processCmdLineArgsHook [array get flag]
}
return
}
@@ -1584,7 +1639,7 @@ proc tcltest::Replace::puts {args} {
# return [Puts [lindex $args 0]]
}
2 {
- # Either -nonewline or channelId has been specified
+ # Either -nonewline or channel has been specified
if {[lindex $args 0] eq "-nonewline"} {
append outData [lindex $args end]
return
@@ -1596,7 +1651,7 @@ proc tcltest::Replace::puts {args} {
}
3 {
if {[lindex $args 0] eq "-nonewline"} {
- # Both -nonewline and channelId are specified, unless
+ # Both -nonewline and channel are specified, unless
# it's an error. -nonewline is supposed to be argv[0].
set channel [lindex $args 1]
set newline ""
@@ -1677,7 +1732,7 @@ proc tcltest::Eval {script {ignoreOutput 1}} {
proc tcltest::CompareStrings {actual expected mode} {
variable CustomMatch
if {![info exists CustomMatch($mode)]} {
- return -code error "No matching command registered for `-match $mode'"
+ return -code error "No matching command registered for `-match $mode'"
}
set match [namespace eval :: $CustomMatch($mode) [list $expected $actual]]
if {[catch {expr {$match && $match}} result]} {
@@ -1746,7 +1801,7 @@ proc tcltest::SubstArguments {argList} {
# We need to split the argList up into tokens but cannot use list
# operations as they throw away some significant quoting, and
# [split] ignores braces as it should. Therefore what we do is
- # gradually build up a string out of whitespace seperated strings.
+ # gradually build up a string out of whitespace-separated strings.
# We cannot use [split] to split the argList into whitespace
# separated strings as it throws away the whitespace which maybe
# important so we have to do it all by hand.
@@ -1755,55 +1810,55 @@ proc tcltest::SubstArguments {argList} {
set token ""
while {[string length $argList]} {
- # Look for the next word containing a quote: " { }
- if {[regexp -indices {[^ \t\n]*[\"\{\}]+[^ \t\n]*} \
+ # Look for the next word containing a quote: " { }
+ if {[regexp -indices {[^ \t\n]*[\"\{\}]+[^ \t\n]*} \
$argList all]} {
- # Get the text leading up to this word, but not including
+ # Get the text leading up to this word, but not including
# this word, from the argList.
- set text [string range $argList 0 \
+ set text [string range $argList 0 \
[expr {[lindex $all 0] - 1}]]
- # Get the word with the quote
- set word [string range $argList \
- [lindex $all 0] [lindex $all 1]]
-
- # Remove all text up to and including the word from the
- # argList.
- set argList [string range $argList \
- [expr {[lindex $all 1] + 1}] end]
- } else {
- # Take everything up to the end of the argList.
- set text $argList
- set word {}
- set argList {}
- }
-
- if {$token ne {}} {
- # If we saw a word with quote before, then there is a
- # multi-word token starting with that word. In this case,
- # add the text and the current word to this token.
- append token $text $word
- } else {
- # Add the text to the result. There is no need to parse
- # the text because it couldn't be a part of any multi-word
- # token. Then start a new multi-word token with the word
- # because we need to pass this token to the Tcl parser to
- # check for balancing quotes
- append result $text
- set token $word
- }
-
- if { [catch {llength $token} length] == 0 && $length == 1} {
- # The token is a valid list so add it to the result.
- # lappend result [string trim $token]
- append result \{$token\}
- set token {}
- }
+ # Get the word with the quote
+ set word [string range $argList \
+ [lindex $all 0] [lindex $all 1]]
+
+ # Remove all text up to and including the word from the
+ # argList.
+ set argList [string range $argList \
+ [expr {[lindex $all 1] + 1}] end]
+ } else {
+ # Take everything up to the end of the argList.
+ set text $argList
+ set word {}
+ set argList {}
+ }
+
+ if {$token ne {}} {
+ # If we saw a word with quote before, then there is a
+ # multi-word token starting with that word. In this case,
+ # add the text and the current word to this token.
+ append token $text $word
+ } else {
+ # Add the text to the result. There is no need to parse
+ # the text because it couldn't be a part of any multi-word
+ # token. Then start a new multi-word token with the word
+ # because we need to pass this token to the Tcl parser to
+ # check for balancing quotes
+ append result $text
+ set token $word
+ }
+
+ if { [catch {llength $token} length] == 0 && $length == 1} {
+ # The token is a valid list so add it to the result.
+ # lappend result [string trim $token]
+ append result \{$token\}
+ set token {}
+ }
}
# If the last token has not been added to the list then there
# is a problem.
if { [string length $token] } {
- error "incomplete token \"$token\""
+ error "incomplete token \"$token\""
}
return $result
@@ -1853,13 +1908,13 @@ proc tcltest::SubstArguments {argList} {
# match - specifies type of matching to do on result,
# output, errorOutput; this must be a string
# previously registered by a call to [customMatch].
-# The strings exact, glob, and regexp are pre-registered
+# The strings exact, glob, and regexp are preregistered
# by the tcltest package. Default value is exact.
#
# Arguments:
# name - Name of test, in the form foo-1.2.
# description - Short textual description of the test, to
-# help humans understand what it does.
+# help humans understand what it does.
#
# Results:
# None.
@@ -1872,6 +1927,8 @@ proc tcltest::test {name description args} {
global tcl_platform
variable testLevel
variable coreModTime
+ variable fullutf
+
DebugPuts 3 "test $name $args"
DebugDo 1 {
variable TestNames
@@ -1884,7 +1941,7 @@ proc tcltest::test {name description args} {
FillFilesExisted
incr testLevel
- # Pre-define everything to null except output and errorOutput. We
+ # Predefine everything to null except output and errorOutput. We
# determine whether or not to trap output based on whether or not
# these variables (output & errorOutput) are defined.
lassign {} constraints setup cleanup body result returnCodes errorCode match
@@ -1952,10 +2009,10 @@ proc tcltest::test {name description args} {
foreach {strcode numcode} {ok 0 normal 0 error 1 return 2 break 3 continue 4} {
set returnCodes [string map -nocase [list $strcode $numcode] $returnCodes]
}
- # errorCode without returnCode 1 is meaningless
- if {$errorCode ne "*" && 1 ni $returnCodes} {
- set returnCodes 1
- }
+ # errorCode without returnCode 1 is meaningless
+ if {$errorCode ne "*" && 1 ni $returnCodes} {
+ set returnCodes 1
+ }
} else {
# This is parsing for the old test command format; it is here
# for backward compatibility.
@@ -2038,7 +2095,7 @@ proc tcltest::test {name description args} {
}
set errorCodeFailure 0
if {$processTest && !$setupFailure && !$codeFailure && $returnCode == 1 && \
- ![string match $errorCode $errorCodeRes(body)]} {
+ ![string match $errorCode $errorCodeRes(body)]} {
set errorCodeFailure 1
}
@@ -2071,7 +2128,7 @@ proc tcltest::test {name description args} {
# check if the answer matched the expected answer
# Only check if we ran the body of the test (no setup failure)
if {!$processTest} {
- set scriptFailure 0
+ set scriptFailure 0
} elseif {$setupFailure || $codeFailure} {
set scriptFailure 0
} elseif {[set scriptCompare [catch {
@@ -2129,7 +2186,7 @@ proc tcltest::test {name description args} {
if {[IsVerbose msec] || [IsVerbose usec]} {
set t [expr {[clock microseconds] - $timeStart}]
if {[IsVerbose usec]} {
- puts [outputChannel] "++++ $name took $t μs"
+ puts [outputChannel] "++++ $name took $t \xB5s"
}
if {[IsVerbose msec]} {
puts [outputChannel] "++++ $name took [expr {round($t/1000.)}] ms"
@@ -2177,6 +2234,9 @@ proc tcltest::test {name description args} {
set testFile [file normalize [uplevel 1 {info script}]]
if {[file readable $testFile]} {
set testFd [open $testFile r]
+ if {$fullutf} {
+ fconfigure $testFd -profile tcl8 -encoding utf-8
+ }
set testLine [expr {[lsearch -regexp \
[split [read $testFd] "\n"] \
"^\[ \t\]*test [string map {. \\.} $name] "] + 1}]
@@ -2206,9 +2266,13 @@ proc tcltest::test {name description args} {
if {$scriptCompare} {
puts [outputChannel] "---- Error testing result: $scriptMatch"
} else {
- puts [outputChannel] "---- Result was:\n$actualAnswer"
+ if {[catch {
+ puts [outputChannel] "---- Result was:\n[Asciify $actualAnswer]"
+ } errMsg]} {
+ puts [outputChannel] "\n---- Result was:\n<error printing result: $errMsg>"
+ }
puts [outputChannel] "---- Result should have been\
- ($match matching):\n$result"
+ ($match matching):\n[Asciify $result]"
}
}
if {$errorCodeFailure} {
@@ -2350,6 +2414,7 @@ proc tcltest::Skipped {name constraints} {
# make sure that the constraints are satisfied.
set doTest 0
+ set constraints [string trim $constraints]
if {[string match {*[$\[]*} $constraints] != 0} {
# full expression, e.g. {$foo > [info tclversion]}
catch {set doTest [uplevel #0 [list expr $constraints]]}
@@ -2476,7 +2541,7 @@ proc tcltest::cleanupTests {{calledFromAllFile 0}} {
# Remove files and directories created by the makeFile and
# makeDirectory procedures. Record the names of files in
- # workingDirectory that were not pre-existing, and associate them
+ # workingDirectory that were not preexisting, and associate them
# with the test file that created them.
if {!$calledFromAllFile} {
@@ -2567,7 +2632,7 @@ proc tcltest::cleanupTests {{calledFromAllFile 0}} {
# loop is running, which is the real issue.
# Actually, this doesn't belong here at all. A package
# really has no business [exit]-ing an application.
- if {![catch {package present Tk}] && ![testConstraint interactive]} {
+ if {[info exists ::tk_version] && ![testConstraint interactive]} {
exit
}
} else {
@@ -2763,7 +2828,7 @@ proc tcltest::GetMatchingDirectories {rootdir} {
foreach pattern [matchDirectories] {
foreach path [glob -directory $rootdir -types d -nocomplain -- \
$pattern] {
- if {$path ni $skipDirs} {
+ if {$path ni $skipDirs && [file readable $path]} {
set matchDirs [concat $matchDirs [GetMatchingDirectories $path]]
if {[file exists [file join $path all.tcl]]} {
lappend matchDirs $path
@@ -2800,6 +2865,7 @@ proc tcltest::runAllTests { {shell ""} } {
variable numTests
variable failFiles
variable DefaultValue
+ variable fullutf
FillFilesExisted
if {[llength [info level 0]] == 1} {
@@ -2857,7 +2923,7 @@ proc tcltest::runAllTests { {shell ""} } {
if {[singleProcess]} {
if {[catch {
incr numTestFiles
- uplevel 1 [list ::source $file]
+ uplevel 1 [list ::source -encoding utf-8 $file]
} msg]} {
puts [outputChannel] "Test file error: $msg"
# append the name of the test to a list to be reported
@@ -2885,6 +2951,9 @@ proc tcltest::runAllTests { {shell ""} } {
if {[catch {
incr numTestFiles
set pipeFd [open $cmd "r"]
+ if {$fullutf} {
+ fconfigure $pipeFd -profile tcl8 -encoding utf-8
+ }
while {[gets $pipeFd line] >= 0} {
if {[regexp [join {
{^([^:]+):\t}
@@ -2939,7 +3008,7 @@ proc tcltest::runAllTests { {shell ""} } {
puts [outputChannel] [string repeat ~ 44]
puts [outputChannel] "$dir test began at [eval $timeCmd]\n"
- uplevel 1 [list ::source [file join $directory all.tcl]]
+ uplevel 1 [list ::source -encoding utf-8 [file join $directory all.tcl]]
set endTime [eval $timeCmd]
puts [outputChannel] "\n$dir test ended at $endTime"
@@ -3069,6 +3138,8 @@ proc tcltest::normalizeMsg {msg} {
proc tcltest::makeFile {contents name {directory ""}} {
variable filesMade
+ variable fullutf
+
FillFilesExisted
if {[llength [info level 0]] == 3} {
@@ -3082,8 +3153,8 @@ proc tcltest::makeFile {contents name {directory ""}} {
set fd [open $fullName w]
fconfigure $fd -translation lf
- if {[package vsatisfies [package provide Tcl] 8.7-]} {
- fconfigure $fd -encoding utf-8
+ if {$fullutf} {
+ fconfigure $fd -profile tcl8 -encoding utf-8
}
if {[string index $contents end] eq "\n"} {
puts -nonewline $fd $contents
@@ -3227,14 +3298,16 @@ proc tcltest::removeDirectory {name {directory ""}} {
# None.
proc tcltest::viewFile {name {directory ""}} {
+ variable fullutf
+
FillFilesExisted
if {[llength [info level 0]] == 2} {
set directory [temporaryDirectory]
}
set fullName [file join $directory $name]
set f [open $fullName]
- if {[package vsatisfies [package provide Tcl] 8.7-]} {
- fconfigure $f -encoding utf-8
+ if {$fullutf} {
+ fconfigure $f -profile tcl8 -encoding utf-8
}
set data [read -nonewline $f]
close $f
@@ -3269,7 +3342,7 @@ proc tcltest::viewFile {name {directory ""}} {
# Side effects:
# None
-if {![package vsatisfies [package provide Tcl] 8.7-]} {
+if {![package vsatisfies [package provide Tcl] 9.0-]} {
proc tcltest::bytestring {string} {
return [encoding convertfrom identity $string]
}
@@ -3431,7 +3504,7 @@ proc tcltest::threadReap {} {
# Initialize the constraints and set up command line arguments
namespace eval tcltest {
- # Define initializers for all the built-in contraint definitions
+ # Define initializers for all the built-in constraint definitions
DefineConstraintInitializers
# Set up the constraints in the testConstraints array to be lazily
@@ -3440,7 +3513,7 @@ namespace eval tcltest {
trace add variable testConstraints read [namespace code SafeFetch]
# Only initialize constraints at package load time if an
- # [initConstraintsHook] has been pre-defined. This is only
+ # [initConstraintsHook] has been predefined. This is only
# for compatibility support. The modern way to add a custom
# test constraint is to just call the [testConstraint] command
# straight away, without all this "hook" nonsense.
diff --git a/library/tm.tcl b/library/tm.tcl
index bab5485..ae3c6f4 100644
--- a/library/tm.tcl
+++ b/library/tm.tcl
@@ -22,10 +22,10 @@
#
# This covers the possibility that the application asked for a package
# late, and the package was actually added to the installation after the
-# application was started. It shoukld still be able to find it.
+# application was started. It should still be able to find it.
#
# 2) It still is not there: Either way, you don't get it, but the rescan
-# takes time. This is however an error case and we dont't care that much
+# takes time. This is however an error case and we don't care that much
# about it
#
# 3) It was there the first time; but for some reason a "package forget" has
@@ -70,9 +70,9 @@ namespace eval ::tcl::tm {
# No result for subcommands 'add' and 'remove'. A list of paths for
# 'list'.
#
-# Sideeffects
+# Side effects
# The subcommands 'add' and 'remove' manipulate the list of paths to
-# search for Tcl Modules. The subcommand 'list' has no sideeffects.
+# search for Tcl Modules. The subcommand 'list' has no side effects.
proc ::tcl::tm::add {args} {
# PART OF THE ::tcl::tm::path ENSEMBLE
@@ -81,7 +81,7 @@ proc ::tcl::tm::add {args} {
#
# The command enforces the restriction that no path may be an ancestor
# directory of any other path on the list. If the new path violates this
- # restriction an error wil be raised.
+ # restriction an error will be raised.
#
# If the path is already present as is no error will be raised and no
# action will be taken.
@@ -97,8 +97,8 @@ proc ::tcl::tm::add {args} {
set newpaths $paths
foreach p $args {
- if {$p in $newpaths} {
- # Ignore a path already on the list.
+ if {($p eq "") || ($p in $newpaths)} {
+ # Ignore any path which is empty or already on the list.
continue
}
@@ -166,7 +166,7 @@ proc ::tcl::tm::list {} {
# name - Name of desired package.
# version - Version of desired package. Can be the
# empty string.
-# exact - Either -exact or ommitted.
+# exact - Either -exact or omitted.
#
# Name, version, and exact are used to determine satisfaction. The
# original is called iff no satisfaction was achieved. The name is also
@@ -175,7 +175,7 @@ proc ::tcl::tm::list {} {
# Results
# None.
#
-# Sideeffects
+# Side effects
# May populate the package ifneeded database with additional provide
# scripts.
@@ -212,11 +212,12 @@ proc ::tcl::tm::UnknownHandler {original name args} {
}
set strip [llength [file split $path]]
- # We can't use glob in safe interps, so enclose the following in a
- # catch statement, where we get the module files out of the
- # subdirectories. In other words, Tcl Modules are not-functional
- # in such an interpreter. This is the same as for the command
- # "tclPkgUnknown", i.e. the search for regular packages.
+ # Get the module files out of the subdirectories.
+ # - Safe Base interpreters have a restricted "glob" command that
+ # works in this case.
+ # - The "catch" was essential when there was no safe glob and every
+ # call in a safe interp failed; it is retained only for corner
+ # cases in which the eventual call to glob returns an error.
catch {
# We always look for _all_ possible modules in the current
@@ -230,18 +231,24 @@ proc ::tcl::tm::UnknownHandler {original name args} {
# package names.
continue
}
- if {[catch {package vcompare $pkgversion 0}]} {
+ try {
+ package vcompare $pkgversion 0
+ } on error {} {
# Ignore everything where the version part is not
# acceptable to "package vcompare".
continue
}
- if {[package ifneeded $pkgname $pkgversion] ne {}} {
+ if {([package ifneeded $pkgname $pkgversion] ne {})
+ && (![interp issafe])
+ } {
# There's already a provide script registered for
# this version of this package. Since all units of
# code claiming to be the same version of the same
# package ought to be identical, just stick with
# the one we already have.
+ # This does not apply to Safe Base interpreters because
+ # the token-to-directory mapping may have changed.
continue
}
@@ -260,7 +267,7 @@ proc ::tcl::tm::UnknownHandler {original name args} {
# of the package file is the last element in the list.
package ifneeded $pkgname $pkgversion \
- "[::list package provide $pkgname $pkgversion];[::list source -encoding utf-8 $file]"
+ "[::list package provide $pkgname $pkgversion];[::list source $file]"
# We abort in this unknown handler only if we got a
# satisfying candidate for the requested package.
@@ -303,13 +310,13 @@ proc ::tcl::tm::UnknownHandler {original name args} {
# Results
# None.
#
-# Sideeffects
+# Side effects
# May add paths to the list of defaults.
proc ::tcl::tm::Defaults {} {
global env tcl_platform
- regexp {^(\d+)\.(\d+)} [package provide Tcl] - major minor
+ regexp {^(\d+)\.(\d+)} [package provide tcl] - major minor
set exe [file normalize [info nameofexecutable]]
# Note that we're using [::list], not [list] because [list] means
@@ -319,19 +326,17 @@ proc ::tcl::tm::Defaults {} {
[file join [file dirname [file dirname $exe]] lib] \
]
- if {$tcl_platform(platform) eq "windows"} {
- set sep ";"
- } else {
- set sep ":"
- }
for {set n $minor} {$n >= 0} {incr n -1} {
foreach ev [::list \
TCL${major}.${n}_TM_PATH \
TCL${major}_${n}_TM_PATH \
- ] {
+ ] {
if {![info exists env($ev)]} continue
- foreach p [split $env($ev) $sep] {
- path add $p
+ foreach p [split $env($ev) $::tcl_platform(pathSeparator)] {
+ # Paths relative to unresolvable home dirs are ignored
+ if {![catch {file tildeexpand $p} expanded_path]} {
+ path add $expanded_path
+ }
}
}
}
@@ -348,11 +353,11 @@ proc ::tcl::tm::Defaults {} {
# Results
# No result.
#
-# Sideeffects
+# Side effects
# Calls 'path add' to paths to the list of module search paths.
proc ::tcl::tm::roots {paths} {
- regexp {^(\d+)\.(\d+)} [package provide Tcl] - major minor
+ regexp {^(\d+)\.(\d+)} [package provide tcl] - major minor
foreach pa $paths {
set p [file join $pa tcl$major]
for {set n $minor} {$n >= 0} {incr n -1} {
diff --git a/library/tzdata/Africa/Bissau b/library/tzdata/Africa/Bissau
index e0568fb..03df54e 100644
--- a/library/tzdata/Africa/Bissau
+++ b/library/tzdata/Africa/Bissau
@@ -2,6 +2,6 @@
set TZData(:Africa/Bissau) {
{-9223372036854775808 -3740 0 LMT}
- {-1830380400 -3600 0 -01}
+ {-1830380400 -3600 0 -0100}
{157770000 0 0 GMT}
}
diff --git a/library/tzdata/Africa/Cairo b/library/tzdata/Africa/Cairo
index aaeec54..3acbd5e 100644
--- a/library/tzdata/Africa/Cairo
+++ b/library/tzdata/Africa/Cairo
@@ -129,4 +129,158 @@ set TZData(:Africa/Cairo) {
{1403816400 7200 0 EET}
{1406844000 10800 1 EEST}
{1411678800 7200 0 EET}
+ {1682632800 10800 1 EEST}
+ {1698354000 7200 0 EET}
+ {1714082400 10800 1 EEST}
+ {1730408400 7200 0 EET}
+ {1745532000 10800 1 EEST}
+ {1761858000 7200 0 EET}
+ {1776981600 10800 1 EEST}
+ {1793307600 7200 0 EET}
+ {1809036000 10800 1 EEST}
+ {1824757200 7200 0 EET}
+ {1840485600 10800 1 EEST}
+ {1856206800 7200 0 EET}
+ {1871935200 10800 1 EEST}
+ {1887656400 7200 0 EET}
+ {1903384800 10800 1 EEST}
+ {1919710800 7200 0 EET}
+ {1934834400 10800 1 EEST}
+ {1951160400 7200 0 EET}
+ {1966888800 10800 1 EEST}
+ {1982610000 7200 0 EET}
+ {1998338400 10800 1 EEST}
+ {2014059600 7200 0 EET}
+ {2029788000 10800 1 EEST}
+ {2045509200 7200 0 EET}
+ {2061237600 10800 1 EEST}
+ {2076958800 7200 0 EET}
+ {2092687200 10800 1 EEST}
+ {2109013200 7200 0 EET}
+ {2124136800 10800 1 EEST}
+ {2140462800 7200 0 EET}
+ {2156191200 10800 1 EEST}
+ {2171912400 7200 0 EET}
+ {2187640800 10800 1 EEST}
+ {2203362000 7200 0 EET}
+ {2219090400 10800 1 EEST}
+ {2234811600 7200 0 EET}
+ {2250540000 10800 1 EEST}
+ {2266866000 7200 0 EET}
+ {2281989600 10800 1 EEST}
+ {2298315600 7200 0 EET}
+ {2313439200 10800 1 EEST}
+ {2329765200 7200 0 EET}
+ {2345493600 10800 1 EEST}
+ {2361214800 7200 0 EET}
+ {2376943200 10800 1 EEST}
+ {2392664400 7200 0 EET}
+ {2408392800 10800 1 EEST}
+ {2424114000 7200 0 EET}
+ {2439842400 10800 1 EEST}
+ {2456168400 7200 0 EET}
+ {2471292000 10800 1 EEST}
+ {2487618000 7200 0 EET}
+ {2503346400 10800 1 EEST}
+ {2519067600 7200 0 EET}
+ {2534796000 10800 1 EEST}
+ {2550517200 7200 0 EET}
+ {2566245600 10800 1 EEST}
+ {2581966800 7200 0 EET}
+ {2597695200 10800 1 EEST}
+ {2614021200 7200 0 EET}
+ {2629144800 10800 1 EEST}
+ {2645470800 7200 0 EET}
+ {2660594400 10800 1 EEST}
+ {2676920400 7200 0 EET}
+ {2692648800 10800 1 EEST}
+ {2708370000 7200 0 EET}
+ {2724098400 10800 1 EEST}
+ {2739819600 7200 0 EET}
+ {2755548000 10800 1 EEST}
+ {2771269200 7200 0 EET}
+ {2786997600 10800 1 EEST}
+ {2803323600 7200 0 EET}
+ {2818447200 10800 1 EEST}
+ {2834773200 7200 0 EET}
+ {2850501600 10800 1 EEST}
+ {2866222800 7200 0 EET}
+ {2881951200 10800 1 EEST}
+ {2897672400 7200 0 EET}
+ {2913400800 10800 1 EEST}
+ {2929122000 7200 0 EET}
+ {2944850400 10800 1 EEST}
+ {2960571600 7200 0 EET}
+ {2976300000 10800 1 EEST}
+ {2992626000 7200 0 EET}
+ {3007749600 10800 1 EEST}
+ {3024075600 7200 0 EET}
+ {3039804000 10800 1 EEST}
+ {3055525200 7200 0 EET}
+ {3071253600 10800 1 EEST}
+ {3086974800 7200 0 EET}
+ {3102703200 10800 1 EEST}
+ {3118424400 7200 0 EET}
+ {3134152800 10800 1 EEST}
+ {3150478800 7200 0 EET}
+ {3165602400 10800 1 EEST}
+ {3181928400 7200 0 EET}
+ {3197052000 10800 1 EEST}
+ {3213378000 7200 0 EET}
+ {3229106400 10800 1 EEST}
+ {3244827600 7200 0 EET}
+ {3260556000 10800 1 EEST}
+ {3276277200 7200 0 EET}
+ {3292005600 10800 1 EEST}
+ {3307726800 7200 0 EET}
+ {3323455200 10800 1 EEST}
+ {3339781200 7200 0 EET}
+ {3354904800 10800 1 EEST}
+ {3371230800 7200 0 EET}
+ {3386959200 10800 1 EEST}
+ {3402680400 7200 0 EET}
+ {3418408800 10800 1 EEST}
+ {3434130000 7200 0 EET}
+ {3449858400 10800 1 EEST}
+ {3465579600 7200 0 EET}
+ {3481308000 10800 1 EEST}
+ {3497634000 7200 0 EET}
+ {3512757600 10800 1 EEST}
+ {3529083600 7200 0 EET}
+ {3544207200 10800 1 EEST}
+ {3560533200 7200 0 EET}
+ {3576261600 10800 1 EEST}
+ {3591982800 7200 0 EET}
+ {3607711200 10800 1 EEST}
+ {3623432400 7200 0 EET}
+ {3639160800 10800 1 EEST}
+ {3654882000 7200 0 EET}
+ {3670610400 10800 1 EEST}
+ {3686936400 7200 0 EET}
+ {3702060000 10800 1 EEST}
+ {3718386000 7200 0 EET}
+ {3734114400 10800 1 EEST}
+ {3749835600 7200 0 EET}
+ {3765564000 10800 1 EEST}
+ {3781285200 7200 0 EET}
+ {3797013600 10800 1 EEST}
+ {3812734800 7200 0 EET}
+ {3828463200 10800 1 EEST}
+ {3844184400 7200 0 EET}
+ {3859912800 10800 1 EEST}
+ {3876238800 7200 0 EET}
+ {3891362400 10800 1 EEST}
+ {3907688400 7200 0 EET}
+ {3923416800 10800 1 EEST}
+ {3939138000 7200 0 EET}
+ {3954866400 10800 1 EEST}
+ {3970587600 7200 0 EET}
+ {3986316000 10800 1 EEST}
+ {4002037200 7200 0 EET}
+ {4017765600 10800 1 EEST}
+ {4034091600 7200 0 EET}
+ {4049215200 10800 1 EEST}
+ {4065541200 7200 0 EET}
+ {4080664800 10800 1 EEST}
+ {4096990800 7200 0 EET}
}
diff --git a/library/tzdata/Africa/Casablanca b/library/tzdata/Africa/Casablanca
index cb60740..b070a62 100644
--- a/library/tzdata/Africa/Casablanca
+++ b/library/tzdata/Africa/Casablanca
@@ -2,201 +2,201 @@
set TZData(:Africa/Casablanca) {
{-9223372036854775808 -1820 0 LMT}
- {-1773012580 0 0 +00}
- {-956361600 3600 1 +00}
- {-950490000 0 0 +00}
- {-942019200 3600 1 +00}
- {-761187600 0 0 +00}
- {-617241600 3600 1 +00}
- {-605149200 0 0 +00}
- {-81432000 3600 1 +00}
- {-71110800 0 0 +00}
- {141264000 3600 1 +00}
- {147222000 0 0 +00}
- {199756800 3600 1 +00}
- {207702000 0 0 +00}
- {231292800 3600 1 +00}
- {244249200 0 0 +00}
- {265507200 3600 1 +00}
- {271033200 0 0 +00}
- {448243200 3600 0 +01}
- {504918000 0 0 +00}
- {1212278400 3600 1 +00}
- {1220223600 0 0 +00}
- {1243814400 3600 1 +00}
- {1250809200 0 0 +00}
- {1272758400 3600 1 +00}
- {1281222000 0 0 +00}
- {1301788800 3600 1 +00}
- {1312066800 0 0 +00}
- {1335664800 3600 1 +00}
- {1342749600 0 0 +00}
- {1345428000 3600 1 +00}
- {1348970400 0 0 +00}
- {1367114400 3600 1 +00}
- {1373162400 0 0 +00}
- {1376100000 3600 1 +00}
- {1382839200 0 0 +00}
- {1396144800 3600 1 +00}
- {1403920800 0 0 +00}
- {1406944800 3600 1 +00}
- {1414288800 0 0 +00}
- {1427594400 3600 1 +00}
- {1434247200 0 0 +00}
- {1437271200 3600 1 +00}
- {1445738400 0 0 +00}
- {1459044000 3600 1 +00}
- {1465092000 0 0 +00}
- {1468116000 3600 1 +00}
- {1477792800 0 0 +00}
- {1490493600 3600 1 +00}
- {1495332000 0 0 +00}
- {1498960800 3600 1 +00}
- {1509242400 0 0 +00}
- {1521943200 3600 1 +00}
- {1526176800 0 0 +00}
- {1529200800 3600 1 +00}
- {1540695600 3600 0 +01}
- {1557021600 0 1 +01}
- {1560045600 3600 0 +01}
- {1587261600 0 1 +01}
- {1590890400 3600 0 +01}
- {1618106400 0 1 +01}
- {1621130400 3600 0 +01}
- {1648346400 0 1 +01}
- {1651975200 3600 0 +01}
- {1679191200 0 1 +01}
- {1682820000 3600 0 +01}
- {1710036000 0 1 +01}
- {1713060000 3600 0 +01}
- {1740276000 0 1 +01}
- {1743904800 3600 0 +01}
- {1771120800 0 1 +01}
- {1774144800 3600 0 +01}
- {1801965600 0 1 +01}
- {1804989600 3600 0 +01}
- {1832205600 0 1 +01}
- {1835834400 3600 0 +01}
- {1863050400 0 1 +01}
- {1866074400 3600 0 +01}
- {1893290400 0 1 +01}
- {1896919200 3600 0 +01}
- {1924135200 0 1 +01}
- {1927764000 3600 0 +01}
- {1954980000 0 1 +01}
- {1958004000 3600 0 +01}
- {1985220000 0 1 +01}
- {1988848800 3600 0 +01}
- {2016064800 0 1 +01}
- {2019088800 3600 0 +01}
- {2046304800 0 1 +01}
- {2049933600 3600 0 +01}
- {2077149600 0 1 +01}
- {2080778400 3600 0 +01}
- {2107994400 0 1 +01}
- {2111018400 3600 0 +01}
- {2138234400 0 1 +01}
- {2141863200 3600 0 +01}
- {2169079200 0 1 +01}
- {2172708000 3600 0 +01}
- {2199924000 0 1 +01}
- {2202948000 3600 0 +01}
- {2230164000 0 1 +01}
- {2233792800 3600 0 +01}
- {2261008800 0 1 +01}
- {2264032800 3600 0 +01}
- {2291248800 0 1 +01}
- {2294877600 3600 0 +01}
- {2322093600 0 1 +01}
- {2325722400 3600 0 +01}
- {2352938400 0 1 +01}
- {2355962400 3600 0 +01}
- {2383178400 0 1 +01}
- {2386807200 3600 0 +01}
- {2414023200 0 1 +01}
- {2417652000 3600 0 +01}
- {2444868000 0 1 +01}
- {2447892000 3600 0 +01}
- {2475108000 0 1 +01}
- {2478736800 3600 0 +01}
- {2505952800 0 1 +01}
- {2508976800 3600 0 +01}
- {2536192800 0 1 +01}
- {2539821600 3600 0 +01}
- {2567037600 0 1 +01}
- {2570666400 3600 0 +01}
- {2597882400 0 1 +01}
- {2600906400 3600 0 +01}
- {2628122400 0 1 +01}
- {2631751200 3600 0 +01}
- {2658967200 0 1 +01}
- {2662596000 3600 0 +01}
- {2689812000 0 1 +01}
- {2692836000 3600 0 +01}
- {2720052000 0 1 +01}
- {2723680800 3600 0 +01}
- {2750896800 0 1 +01}
- {2753920800 3600 0 +01}
- {2781136800 0 1 +01}
- {2784765600 3600 0 +01}
- {2811981600 0 1 +01}
- {2815610400 3600 0 +01}
- {2842826400 0 1 +01}
- {2845850400 3600 0 +01}
- {2873066400 0 1 +01}
- {2876695200 3600 0 +01}
- {2903911200 0 1 +01}
- {2907540000 3600 0 +01}
- {2934756000 0 1 +01}
- {2937780000 3600 0 +01}
- {2964996000 0 1 +01}
- {2968624800 3600 0 +01}
- {2995840800 0 1 +01}
- {2998864800 3600 0 +01}
- {3026080800 0 1 +01}
- {3029709600 3600 0 +01}
- {3056925600 0 1 +01}
- {3060554400 3600 0 +01}
- {3087770400 0 1 +01}
- {3090794400 3600 0 +01}
- {3118010400 0 1 +01}
- {3121639200 3600 0 +01}
- {3148855200 0 1 +01}
- {3152484000 3600 0 +01}
- {3179700000 0 1 +01}
- {3182724000 3600 0 +01}
- {3209940000 0 1 +01}
- {3213568800 3600 0 +01}
- {3240784800 0 1 +01}
- {3243808800 3600 0 +01}
- {3271024800 0 1 +01}
- {3274653600 3600 0 +01}
- {3301869600 0 1 +01}
- {3305498400 3600 0 +01}
- {3332714400 0 1 +01}
- {3335738400 3600 0 +01}
- {3362954400 0 1 +01}
- {3366583200 3600 0 +01}
- {3393799200 0 1 +01}
- {3397428000 3600 0 +01}
- {3424644000 0 1 +01}
- {3427668000 3600 0 +01}
- {3454884000 0 1 +01}
- {3458512800 3600 0 +01}
- {3485728800 0 1 +01}
- {3488752800 3600 0 +01}
- {3515968800 0 1 +01}
- {3519597600 3600 0 +01}
- {3546813600 0 1 +01}
- {3550442400 3600 0 +01}
- {3577658400 0 1 +01}
- {3580682400 3600 0 +01}
- {3607898400 0 1 +01}
- {3611527200 3600 0 +01}
- {3638743200 0 1 +01}
- {3642372000 3600 0 +01}
- {3669588000 0 1 +01}
- {3672612000 3600 0 +01}
- {3699828000 0 1 +01}
- {3703456800 3600 0 +01}
+ {-1773012580 0 0 +0000}
+ {-956361600 3600 1 +0100}
+ {-950490000 0 0 +0000}
+ {-942019200 3600 1 +0100}
+ {-761187600 0 0 +0000}
+ {-617241600 3600 1 +0100}
+ {-605149200 0 0 +0000}
+ {-81432000 3600 1 +0100}
+ {-71110800 0 0 +0000}
+ {141264000 3600 1 +0100}
+ {147222000 0 0 +0000}
+ {199756800 3600 1 +0100}
+ {207702000 0 0 +0000}
+ {231292800 3600 1 +0100}
+ {244249200 0 0 +0000}
+ {265507200 3600 1 +0100}
+ {271033200 0 0 +0000}
+ {448243200 3600 0 +0100}
+ {504918000 0 0 +0000}
+ {1212278400 3600 1 +0100}
+ {1220223600 0 0 +0000}
+ {1243814400 3600 1 +0100}
+ {1250809200 0 0 +0000}
+ {1272758400 3600 1 +0100}
+ {1281222000 0 0 +0000}
+ {1301788800 3600 1 +0100}
+ {1312066800 0 0 +0000}
+ {1335664800 3600 1 +0100}
+ {1342749600 0 0 +0000}
+ {1345428000 3600 1 +0100}
+ {1348970400 0 0 +0000}
+ {1367114400 3600 1 +0100}
+ {1373162400 0 0 +0000}
+ {1376100000 3600 1 +0100}
+ {1382839200 0 0 +0000}
+ {1396144800 3600 1 +0100}
+ {1403920800 0 0 +0000}
+ {1406944800 3600 1 +0100}
+ {1414288800 0 0 +0000}
+ {1427594400 3600 1 +0100}
+ {1434247200 0 0 +0000}
+ {1437271200 3600 1 +0100}
+ {1445738400 0 0 +0000}
+ {1459044000 3600 1 +0100}
+ {1465092000 0 0 +0000}
+ {1468116000 3600 1 +0100}
+ {1477792800 0 0 +0000}
+ {1490493600 3600 1 +0100}
+ {1495332000 0 0 +0000}
+ {1498960800 3600 1 +0100}
+ {1509242400 0 0 +0000}
+ {1521943200 3600 1 +0100}
+ {1526176800 0 0 +0000}
+ {1529200800 3600 1 +0100}
+ {1540695600 3600 0 +0100}
+ {1557021600 0 1 +0000}
+ {1560045600 3600 0 +0100}
+ {1587261600 0 1 +0000}
+ {1590890400 3600 0 +0100}
+ {1618106400 0 1 +0000}
+ {1621130400 3600 0 +0100}
+ {1648346400 0 1 +0000}
+ {1651975200 3600 0 +0100}
+ {1679191200 0 1 +0000}
+ {1682215200 3600 0 +0100}
+ {1710036000 0 1 +0000}
+ {1713060000 3600 0 +0100}
+ {1740276000 0 1 +0000}
+ {1743904800 3600 0 +0100}
+ {1771120800 0 1 +0000}
+ {1774144800 3600 0 +0100}
+ {1801965600 0 1 +0000}
+ {1804989600 3600 0 +0100}
+ {1832205600 0 1 +0000}
+ {1835834400 3600 0 +0100}
+ {1863050400 0 1 +0000}
+ {1866074400 3600 0 +0100}
+ {1893290400 0 1 +0000}
+ {1896919200 3600 0 +0100}
+ {1924135200 0 1 +0000}
+ {1927159200 3600 0 +0100}
+ {1954980000 0 1 +0000}
+ {1958004000 3600 0 +0100}
+ {1985220000 0 1 +0000}
+ {1988848800 3600 0 +0100}
+ {2016064800 0 1 +0000}
+ {2019088800 3600 0 +0100}
+ {2046304800 0 1 +0000}
+ {2049933600 3600 0 +0100}
+ {2077149600 0 1 +0000}
+ {2080778400 3600 0 +0100}
+ {2107994400 0 1 +0000}
+ {2111018400 3600 0 +0100}
+ {2138234400 0 1 +0000}
+ {2141863200 3600 0 +0100}
+ {2169079200 0 1 +0000}
+ {2172103200 3600 0 +0100}
+ {2199924000 0 1 +0000}
+ {2202948000 3600 0 +0100}
+ {2230164000 0 1 +0000}
+ {2233792800 3600 0 +0100}
+ {2261008800 0 1 +0000}
+ {2264032800 3600 0 +0100}
+ {2291248800 0 1 +0000}
+ {2294877600 3600 0 +0100}
+ {2322093600 0 1 +0000}
+ {2325722400 3600 0 +0100}
+ {2352938400 0 1 +0000}
+ {2355962400 3600 0 +0100}
+ {2383178400 0 1 +0000}
+ {2386807200 3600 0 +0100}
+ {2414023200 0 1 +0000}
+ {2417047200 3600 0 +0100}
+ {2444868000 0 1 +0000}
+ {2447892000 3600 0 +0100}
+ {2475108000 0 1 +0000}
+ {2478736800 3600 0 +0100}
+ {2505952800 0 1 +0000}
+ {2508976800 3600 0 +0100}
+ {2536192800 0 1 +0000}
+ {2539821600 3600 0 +0100}
+ {2567037600 0 1 +0000}
+ {2570666400 3600 0 +0100}
+ {2597882400 0 1 +0000}
+ {2600906400 3600 0 +0100}
+ {2628122400 0 1 +0000}
+ {2631751200 3600 0 +0100}
+ {2658967200 0 1 +0000}
+ {2661991200 3600 0 +0100}
+ {2689812000 0 1 +0000}
+ {2692836000 3600 0 +0100}
+ {2720052000 0 1 +0000}
+ {2723680800 3600 0 +0100}
+ {2750896800 0 1 +0000}
+ {2753920800 3600 0 +0100}
+ {2781136800 0 1 +0000}
+ {2784765600 3600 0 +0100}
+ {2811981600 0 1 +0000}
+ {2815610400 3600 0 +0100}
+ {2842826400 0 1 +0000}
+ {2845850400 3600 0 +0100}
+ {2873066400 0 1 +0000}
+ {2876695200 3600 0 +0100}
+ {2903911200 0 1 +0000}
+ {2906935200 3600 0 +0100}
+ {2934756000 0 1 +0000}
+ {2937780000 3600 0 +0100}
+ {2964996000 0 1 +0000}
+ {2968624800 3600 0 +0100}
+ {2995840800 0 1 +0000}
+ {2998864800 3600 0 +0100}
+ {3026080800 0 1 +0000}
+ {3029709600 3600 0 +0100}
+ {3056925600 0 1 +0000}
+ {3060554400 3600 0 +0100}
+ {3087770400 0 1 +0000}
+ {3090794400 3600 0 +0100}
+ {3118010400 0 1 +0000}
+ {3121639200 3600 0 +0100}
+ {3148855200 0 1 +0000}
+ {3151879200 3600 0 +0100}
+ {3179700000 0 1 +0000}
+ {3182724000 3600 0 +0100}
+ {3209940000 0 1 +0000}
+ {3213568800 3600 0 +0100}
+ {3240784800 0 1 +0000}
+ {3243808800 3600 0 +0100}
+ {3271024800 0 1 +0000}
+ {3274653600 3600 0 +0100}
+ {3301869600 0 1 +0000}
+ {3305498400 3600 0 +0100}
+ {3332714400 0 1 +0000}
+ {3335738400 3600 0 +0100}
+ {3362954400 0 1 +0000}
+ {3366583200 3600 0 +0100}
+ {3393799200 0 1 +0000}
+ {3396823200 3600 0 +0100}
+ {3424644000 0 1 +0000}
+ {3427668000 3600 0 +0100}
+ {3454884000 0 1 +0000}
+ {3458512800 3600 0 +0100}
+ {3485728800 0 1 +0000}
+ {3488752800 3600 0 +0100}
+ {3515968800 0 1 +0000}
+ {3519597600 3600 0 +0100}
+ {3546813600 0 1 +0000}
+ {3549837600 3600 0 +0100}
+ {3577658400 0 1 +0000}
+ {3580682400 3600 0 +0100}
+ {3607898400 0 1 +0000}
+ {3611527200 3600 0 +0100}
+ {3638743200 0 1 +0000}
+ {3641767200 3600 0 +0100}
+ {3669588000 0 1 +0000}
+ {3672612000 3600 0 +0100}
+ {3699828000 0 1 +0000}
+ {3703456800 3600 0 +0100}
}
diff --git a/library/tzdata/Africa/El_Aaiun b/library/tzdata/Africa/El_Aaiun
index fd3e88f..f3d1bb3 100644
--- a/library/tzdata/Africa/El_Aaiun
+++ b/library/tzdata/Africa/El_Aaiun
@@ -2,190 +2,190 @@
set TZData(:Africa/El_Aaiun) {
{-9223372036854775808 -3168 0 LMT}
- {-1136070432 -3600 0 -01}
- {198291600 0 0 +00}
- {199756800 3600 1 +00}
- {207702000 0 0 +00}
- {231292800 3600 1 +00}
- {244249200 0 0 +00}
- {265507200 3600 1 +00}
- {271033200 0 0 +00}
- {1212278400 3600 1 +00}
- {1220223600 0 0 +00}
- {1243814400 3600 1 +00}
- {1250809200 0 0 +00}
- {1272758400 3600 1 +00}
- {1281222000 0 0 +00}
- {1301788800 3600 1 +00}
- {1312066800 0 0 +00}
- {1335664800 3600 1 +00}
- {1342749600 0 0 +00}
- {1345428000 3600 1 +00}
- {1348970400 0 0 +00}
- {1367114400 3600 1 +00}
- {1373162400 0 0 +00}
- {1376100000 3600 1 +00}
- {1382839200 0 0 +00}
- {1396144800 3600 1 +00}
- {1403920800 0 0 +00}
- {1406944800 3600 1 +00}
- {1414288800 0 0 +00}
- {1427594400 3600 1 +00}
- {1434247200 0 0 +00}
- {1437271200 3600 1 +00}
- {1445738400 0 0 +00}
- {1459044000 3600 1 +00}
- {1465092000 0 0 +00}
- {1468116000 3600 1 +00}
- {1477792800 0 0 +00}
- {1490493600 3600 1 +00}
- {1495332000 0 0 +00}
- {1498960800 3600 1 +00}
- {1509242400 0 0 +00}
- {1521943200 3600 1 +00}
- {1526176800 0 0 +00}
- {1529200800 3600 1 +00}
- {1540695600 3600 0 +01}
- {1557021600 0 1 +01}
- {1560045600 3600 0 +01}
- {1587261600 0 1 +01}
- {1590890400 3600 0 +01}
- {1618106400 0 1 +01}
- {1621130400 3600 0 +01}
- {1648346400 0 1 +01}
- {1651975200 3600 0 +01}
- {1679191200 0 1 +01}
- {1682820000 3600 0 +01}
- {1710036000 0 1 +01}
- {1713060000 3600 0 +01}
- {1740276000 0 1 +01}
- {1743904800 3600 0 +01}
- {1771120800 0 1 +01}
- {1774144800 3600 0 +01}
- {1801965600 0 1 +01}
- {1804989600 3600 0 +01}
- {1832205600 0 1 +01}
- {1835834400 3600 0 +01}
- {1863050400 0 1 +01}
- {1866074400 3600 0 +01}
- {1893290400 0 1 +01}
- {1896919200 3600 0 +01}
- {1924135200 0 1 +01}
- {1927764000 3600 0 +01}
- {1954980000 0 1 +01}
- {1958004000 3600 0 +01}
- {1985220000 0 1 +01}
- {1988848800 3600 0 +01}
- {2016064800 0 1 +01}
- {2019088800 3600 0 +01}
- {2046304800 0 1 +01}
- {2049933600 3600 0 +01}
- {2077149600 0 1 +01}
- {2080778400 3600 0 +01}
- {2107994400 0 1 +01}
- {2111018400 3600 0 +01}
- {2138234400 0 1 +01}
- {2141863200 3600 0 +01}
- {2169079200 0 1 +01}
- {2172708000 3600 0 +01}
- {2199924000 0 1 +01}
- {2202948000 3600 0 +01}
- {2230164000 0 1 +01}
- {2233792800 3600 0 +01}
- {2261008800 0 1 +01}
- {2264032800 3600 0 +01}
- {2291248800 0 1 +01}
- {2294877600 3600 0 +01}
- {2322093600 0 1 +01}
- {2325722400 3600 0 +01}
- {2352938400 0 1 +01}
- {2355962400 3600 0 +01}
- {2383178400 0 1 +01}
- {2386807200 3600 0 +01}
- {2414023200 0 1 +01}
- {2417652000 3600 0 +01}
- {2444868000 0 1 +01}
- {2447892000 3600 0 +01}
- {2475108000 0 1 +01}
- {2478736800 3600 0 +01}
- {2505952800 0 1 +01}
- {2508976800 3600 0 +01}
- {2536192800 0 1 +01}
- {2539821600 3600 0 +01}
- {2567037600 0 1 +01}
- {2570666400 3600 0 +01}
- {2597882400 0 1 +01}
- {2600906400 3600 0 +01}
- {2628122400 0 1 +01}
- {2631751200 3600 0 +01}
- {2658967200 0 1 +01}
- {2662596000 3600 0 +01}
- {2689812000 0 1 +01}
- {2692836000 3600 0 +01}
- {2720052000 0 1 +01}
- {2723680800 3600 0 +01}
- {2750896800 0 1 +01}
- {2753920800 3600 0 +01}
- {2781136800 0 1 +01}
- {2784765600 3600 0 +01}
- {2811981600 0 1 +01}
- {2815610400 3600 0 +01}
- {2842826400 0 1 +01}
- {2845850400 3600 0 +01}
- {2873066400 0 1 +01}
- {2876695200 3600 0 +01}
- {2903911200 0 1 +01}
- {2907540000 3600 0 +01}
- {2934756000 0 1 +01}
- {2937780000 3600 0 +01}
- {2964996000 0 1 +01}
- {2968624800 3600 0 +01}
- {2995840800 0 1 +01}
- {2998864800 3600 0 +01}
- {3026080800 0 1 +01}
- {3029709600 3600 0 +01}
- {3056925600 0 1 +01}
- {3060554400 3600 0 +01}
- {3087770400 0 1 +01}
- {3090794400 3600 0 +01}
- {3118010400 0 1 +01}
- {3121639200 3600 0 +01}
- {3148855200 0 1 +01}
- {3152484000 3600 0 +01}
- {3179700000 0 1 +01}
- {3182724000 3600 0 +01}
- {3209940000 0 1 +01}
- {3213568800 3600 0 +01}
- {3240784800 0 1 +01}
- {3243808800 3600 0 +01}
- {3271024800 0 1 +01}
- {3274653600 3600 0 +01}
- {3301869600 0 1 +01}
- {3305498400 3600 0 +01}
- {3332714400 0 1 +01}
- {3335738400 3600 0 +01}
- {3362954400 0 1 +01}
- {3366583200 3600 0 +01}
- {3393799200 0 1 +01}
- {3397428000 3600 0 +01}
- {3424644000 0 1 +01}
- {3427668000 3600 0 +01}
- {3454884000 0 1 +01}
- {3458512800 3600 0 +01}
- {3485728800 0 1 +01}
- {3488752800 3600 0 +01}
- {3515968800 0 1 +01}
- {3519597600 3600 0 +01}
- {3546813600 0 1 +01}
- {3550442400 3600 0 +01}
- {3577658400 0 1 +01}
- {3580682400 3600 0 +01}
- {3607898400 0 1 +01}
- {3611527200 3600 0 +01}
- {3638743200 0 1 +01}
- {3642372000 3600 0 +01}
- {3669588000 0 1 +01}
- {3672612000 3600 0 +01}
- {3699828000 0 1 +01}
- {3703456800 3600 0 +01}
+ {-1136070432 -3600 0 -0100}
+ {198291600 0 0 +0000}
+ {199756800 3600 1 +0100}
+ {207702000 0 0 +0000}
+ {231292800 3600 1 +0100}
+ {244249200 0 0 +0000}
+ {265507200 3600 1 +0100}
+ {271033200 0 0 +0000}
+ {1212278400 3600 1 +0100}
+ {1220223600 0 0 +0000}
+ {1243814400 3600 1 +0100}
+ {1250809200 0 0 +0000}
+ {1272758400 3600 1 +0100}
+ {1281222000 0 0 +0000}
+ {1301788800 3600 1 +0100}
+ {1312066800 0 0 +0000}
+ {1335664800 3600 1 +0100}
+ {1342749600 0 0 +0000}
+ {1345428000 3600 1 +0100}
+ {1348970400 0 0 +0000}
+ {1367114400 3600 1 +0100}
+ {1373162400 0 0 +0000}
+ {1376100000 3600 1 +0100}
+ {1382839200 0 0 +0000}
+ {1396144800 3600 1 +0100}
+ {1403920800 0 0 +0000}
+ {1406944800 3600 1 +0100}
+ {1414288800 0 0 +0000}
+ {1427594400 3600 1 +0100}
+ {1434247200 0 0 +0000}
+ {1437271200 3600 1 +0100}
+ {1445738400 0 0 +0000}
+ {1459044000 3600 1 +0100}
+ {1465092000 0 0 +0000}
+ {1468116000 3600 1 +0100}
+ {1477792800 0 0 +0000}
+ {1490493600 3600 1 +0100}
+ {1495332000 0 0 +0000}
+ {1498960800 3600 1 +0100}
+ {1509242400 0 0 +0000}
+ {1521943200 3600 1 +0100}
+ {1526176800 0 0 +0000}
+ {1529200800 3600 1 +0100}
+ {1540695600 3600 0 +0100}
+ {1557021600 0 1 +0000}
+ {1560045600 3600 0 +0100}
+ {1587261600 0 1 +0000}
+ {1590890400 3600 0 +0100}
+ {1618106400 0 1 +0000}
+ {1621130400 3600 0 +0100}
+ {1648346400 0 1 +0000}
+ {1651975200 3600 0 +0100}
+ {1679191200 0 1 +0000}
+ {1682215200 3600 0 +0100}
+ {1710036000 0 1 +0000}
+ {1713060000 3600 0 +0100}
+ {1740276000 0 1 +0000}
+ {1743904800 3600 0 +0100}
+ {1771120800 0 1 +0000}
+ {1774144800 3600 0 +0100}
+ {1801965600 0 1 +0000}
+ {1804989600 3600 0 +0100}
+ {1832205600 0 1 +0000}
+ {1835834400 3600 0 +0100}
+ {1863050400 0 1 +0000}
+ {1866074400 3600 0 +0100}
+ {1893290400 0 1 +0000}
+ {1896919200 3600 0 +0100}
+ {1924135200 0 1 +0000}
+ {1927159200 3600 0 +0100}
+ {1954980000 0 1 +0000}
+ {1958004000 3600 0 +0100}
+ {1985220000 0 1 +0000}
+ {1988848800 3600 0 +0100}
+ {2016064800 0 1 +0000}
+ {2019088800 3600 0 +0100}
+ {2046304800 0 1 +0000}
+ {2049933600 3600 0 +0100}
+ {2077149600 0 1 +0000}
+ {2080778400 3600 0 +0100}
+ {2107994400 0 1 +0000}
+ {2111018400 3600 0 +0100}
+ {2138234400 0 1 +0000}
+ {2141863200 3600 0 +0100}
+ {2169079200 0 1 +0000}
+ {2172103200 3600 0 +0100}
+ {2199924000 0 1 +0000}
+ {2202948000 3600 0 +0100}
+ {2230164000 0 1 +0000}
+ {2233792800 3600 0 +0100}
+ {2261008800 0 1 +0000}
+ {2264032800 3600 0 +0100}
+ {2291248800 0 1 +0000}
+ {2294877600 3600 0 +0100}
+ {2322093600 0 1 +0000}
+ {2325722400 3600 0 +0100}
+ {2352938400 0 1 +0000}
+ {2355962400 3600 0 +0100}
+ {2383178400 0 1 +0000}
+ {2386807200 3600 0 +0100}
+ {2414023200 0 1 +0000}
+ {2417047200 3600 0 +0100}
+ {2444868000 0 1 +0000}
+ {2447892000 3600 0 +0100}
+ {2475108000 0 1 +0000}
+ {2478736800 3600 0 +0100}
+ {2505952800 0 1 +0000}
+ {2508976800 3600 0 +0100}
+ {2536192800 0 1 +0000}
+ {2539821600 3600 0 +0100}
+ {2567037600 0 1 +0000}
+ {2570666400 3600 0 +0100}
+ {2597882400 0 1 +0000}
+ {2600906400 3600 0 +0100}
+ {2628122400 0 1 +0000}
+ {2631751200 3600 0 +0100}
+ {2658967200 0 1 +0000}
+ {2661991200 3600 0 +0100}
+ {2689812000 0 1 +0000}
+ {2692836000 3600 0 +0100}
+ {2720052000 0 1 +0000}
+ {2723680800 3600 0 +0100}
+ {2750896800 0 1 +0000}
+ {2753920800 3600 0 +0100}
+ {2781136800 0 1 +0000}
+ {2784765600 3600 0 +0100}
+ {2811981600 0 1 +0000}
+ {2815610400 3600 0 +0100}
+ {2842826400 0 1 +0000}
+ {2845850400 3600 0 +0100}
+ {2873066400 0 1 +0000}
+ {2876695200 3600 0 +0100}
+ {2903911200 0 1 +0000}
+ {2906935200 3600 0 +0100}
+ {2934756000 0 1 +0000}
+ {2937780000 3600 0 +0100}
+ {2964996000 0 1 +0000}
+ {2968624800 3600 0 +0100}
+ {2995840800 0 1 +0000}
+ {2998864800 3600 0 +0100}
+ {3026080800 0 1 +0000}
+ {3029709600 3600 0 +0100}
+ {3056925600 0 1 +0000}
+ {3060554400 3600 0 +0100}
+ {3087770400 0 1 +0000}
+ {3090794400 3600 0 +0100}
+ {3118010400 0 1 +0000}
+ {3121639200 3600 0 +0100}
+ {3148855200 0 1 +0000}
+ {3151879200 3600 0 +0100}
+ {3179700000 0 1 +0000}
+ {3182724000 3600 0 +0100}
+ {3209940000 0 1 +0000}
+ {3213568800 3600 0 +0100}
+ {3240784800 0 1 +0000}
+ {3243808800 3600 0 +0100}
+ {3271024800 0 1 +0000}
+ {3274653600 3600 0 +0100}
+ {3301869600 0 1 +0000}
+ {3305498400 3600 0 +0100}
+ {3332714400 0 1 +0000}
+ {3335738400 3600 0 +0100}
+ {3362954400 0 1 +0000}
+ {3366583200 3600 0 +0100}
+ {3393799200 0 1 +0000}
+ {3396823200 3600 0 +0100}
+ {3424644000 0 1 +0000}
+ {3427668000 3600 0 +0100}
+ {3454884000 0 1 +0000}
+ {3458512800 3600 0 +0100}
+ {3485728800 0 1 +0000}
+ {3488752800 3600 0 +0100}
+ {3515968800 0 1 +0000}
+ {3519597600 3600 0 +0100}
+ {3546813600 0 1 +0000}
+ {3549837600 3600 0 +0100}
+ {3577658400 0 1 +0000}
+ {3580682400 3600 0 +0100}
+ {3607898400 0 1 +0000}
+ {3611527200 3600 0 +0100}
+ {3638743200 0 1 +0000}
+ {3641767200 3600 0 +0100}
+ {3669588000 0 1 +0000}
+ {3672612000 3600 0 +0100}
+ {3699828000 0 1 +0000}
+ {3703456800 3600 0 +0100}
}
diff --git a/library/tzdata/Africa/Maputo b/library/tzdata/Africa/Maputo
index 6ee208c..17f4200 100644
--- a/library/tzdata/Africa/Maputo
+++ b/library/tzdata/Africa/Maputo
@@ -1,6 +1,6 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Africa/Maputo) {
- {-9223372036854775808 7820 0 LMT}
- {-2109291020 7200 0 CAT}
+ {-9223372036854775808 7818 0 LMT}
+ {-1924999818 7200 0 CAT}
}
diff --git a/library/tzdata/America/Araguaina b/library/tzdata/America/Araguaina
index ca64292..e99d8dc 100644
--- a/library/tzdata/America/Araguaina
+++ b/library/tzdata/America/Araguaina
@@ -2,59 +2,59 @@
set TZData(:America/Araguaina) {
{-9223372036854775808 -11568 0 LMT}
- {-1767214032 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-191365200 -7200 1 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {592974000 -7200 1 -03}
- {602042400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {634701600 -10800 0 -03}
- {653536800 -10800 0 -03}
- {811047600 -10800 0 -03}
- {813726000 -7200 1 -03}
- {824004000 -10800 0 -03}
- {844570800 -7200 1 -03}
- {856058400 -10800 0 -03}
- {876106800 -7200 1 -03}
- {888717600 -10800 0 -03}
- {908074800 -7200 1 -03}
- {919562400 -10800 0 -03}
- {938919600 -7200 1 -03}
- {951616800 -10800 0 -03}
- {970974000 -7200 1 -03}
- {982461600 -10800 0 -03}
- {1003028400 -7200 1 -03}
- {1013911200 -10800 0 -03}
- {1036292400 -7200 1 -03}
- {1045360800 -10800 0 -03}
- {1064368800 -10800 0 -03}
- {1350788400 -7200 0 -03}
- {1361066400 -10800 0 -03}
- {1378000800 -10800 0 -03}
+ {-1767214032 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-191365200 -7200 1 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {592974000 -7200 1 -0200}
+ {602042400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {634701600 -10800 0 -0300}
+ {653536800 -10800 0 -0300}
+ {811047600 -10800 0 -0300}
+ {813726000 -7200 1 -0200}
+ {824004000 -10800 0 -0300}
+ {844570800 -7200 1 -0200}
+ {856058400 -10800 0 -0300}
+ {876106800 -7200 1 -0200}
+ {888717600 -10800 0 -0300}
+ {908074800 -7200 1 -0200}
+ {919562400 -10800 0 -0300}
+ {938919600 -7200 1 -0200}
+ {951616800 -10800 0 -0300}
+ {970974000 -7200 1 -0200}
+ {982461600 -10800 0 -0300}
+ {1003028400 -7200 1 -0200}
+ {1013911200 -10800 0 -0300}
+ {1036292400 -7200 1 -0200}
+ {1045360800 -10800 0 -0300}
+ {1064368800 -10800 0 -0300}
+ {1350788400 -7200 0 -0200}
+ {1361066400 -10800 0 -0300}
+ {1378000800 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Buenos_Aires b/library/tzdata/America/Argentina/Buenos_Aires
index 40f1912..ddeed7a 100644
--- a/library/tzdata/America/Argentina/Buenos_Aires
+++ b/library/tzdata/America/Argentina/Buenos_Aires
@@ -3,65 +3,65 @@
set TZData(:America/Argentina/Buenos_Aires) {
{-9223372036854775808 -14028 0 LMT}
{-2372097972 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -10800 0 -03}
- {687927600 -7200 1 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224385200 -7200 1 -03}
- {1237082400 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224385200 -7200 1 -0200}
+ {1237082400 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Catamarca b/library/tzdata/America/Argentina/Catamarca
index da5b42a..ac6f1be 100644
--- a/library/tzdata/America/Argentina/Catamarca
+++ b/library/tzdata/America/Argentina/Catamarca
@@ -3,66 +3,66 @@
set TZData(:America/Argentina/Catamarca) {
{-9223372036854775808 -15788 0 LMT}
{-2372096212 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -14400 0 -04}
- {687931200 -7200 0 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1086058800 -14400 0 -04}
- {1087704000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -14400 0 -0400}
+ {687931200 -7200 0 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1086058800 -14400 0 -0400}
+ {1087704000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Cordoba b/library/tzdata/America/Argentina/Cordoba
index 6a1426e..2cfa41d 100644
--- a/library/tzdata/America/Argentina/Cordoba
+++ b/library/tzdata/America/Argentina/Cordoba
@@ -3,65 +3,65 @@
set TZData(:America/Argentina/Cordoba) {
{-9223372036854775808 -15408 0 LMT}
{-2372096592 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -14400 0 -04}
- {687931200 -7200 0 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224385200 -7200 1 -03}
- {1237082400 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -14400 0 -0400}
+ {687931200 -7200 0 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224385200 -7200 1 -0200}
+ {1237082400 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Jujuy b/library/tzdata/America/Argentina/Jujuy
index 72080f5..76fa87a 100644
--- a/library/tzdata/America/Argentina/Jujuy
+++ b/library/tzdata/America/Argentina/Jujuy
@@ -3,65 +3,65 @@
set TZData(:America/Argentina/Jujuy) {
{-9223372036854775808 -15672 0 LMT}
{-2372096328 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {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 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -14400 0 -0400}
+ {657086400 -10800 1 -0300}
+ {669178800 -14400 0 -0400}
+ {686721600 -7200 1 -0200}
+ {694231200 -7200 0 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/La_Rioja b/library/tzdata/America/Argentina/La_Rioja
index fb7b237..29e9b56 100644
--- a/library/tzdata/America/Argentina/La_Rioja
+++ b/library/tzdata/America/Argentina/La_Rioja
@@ -3,67 +3,67 @@
set TZData(:America/Argentina/La_Rioja) {
{-9223372036854775808 -16044 0 LMT}
{-2372095956 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667792800 -14400 0 -04}
- {673588800 -10800 0 -03}
- {687927600 -7200 1 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1086058800 -14400 0 -04}
- {1087704000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667792800 -14400 0 -0400}
+ {673588800 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1086058800 -14400 0 -0400}
+ {1087704000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Mendoza b/library/tzdata/America/Argentina/Mendoza
index af7342e..1e51441 100644
--- a/library/tzdata/America/Argentina/Mendoza
+++ b/library/tzdata/America/Argentina/Mendoza
@@ -3,66 +3,66 @@
set TZData(:America/Argentina/Mendoza) {
{-9223372036854775808 -16516 0 LMT}
{-2372095484 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {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 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1085281200 -14400 0 -04}
- {1096171200 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -14400 0 -0400}
+ {655963200 -10800 1 -0300}
+ {667796400 -14400 0 -0400}
+ {687499200 -10800 1 -0300}
+ {699418800 -14400 0 -0400}
+ {719380800 -7200 0 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1085281200 -14400 0 -0400}
+ {1096171200 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Rio_Gallegos b/library/tzdata/America/Argentina/Rio_Gallegos
index 2a197a4..c8ee171 100644
--- a/library/tzdata/America/Argentina/Rio_Gallegos
+++ b/library/tzdata/America/Argentina/Rio_Gallegos
@@ -3,66 +3,66 @@
set TZData(:America/Argentina/Rio_Gallegos) {
{-9223372036854775808 -16612 0 LMT}
{-2372095388 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -10800 0 -03}
- {687927600 -7200 1 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1086058800 -14400 0 -04}
- {1087704000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1086058800 -14400 0 -0400}
+ {1087704000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Salta b/library/tzdata/America/Argentina/Salta
index d49e82f..fc508d4 100644
--- a/library/tzdata/America/Argentina/Salta
+++ b/library/tzdata/America/Argentina/Salta
@@ -3,64 +3,64 @@
set TZData(:America/Argentina/Salta) {
{-9223372036854775808 -15700 0 LMT}
{-2372096300 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -14400 0 -04}
- {687931200 -7200 0 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -14400 0 -0400}
+ {687931200 -7200 0 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/San_Juan b/library/tzdata/America/Argentina/San_Juan
index d67f688..966502d 100644
--- a/library/tzdata/America/Argentina/San_Juan
+++ b/library/tzdata/America/Argentina/San_Juan
@@ -3,67 +3,67 @@
set TZData(:America/Argentina/San_Juan) {
{-9223372036854775808 -16444 0 LMT}
{-2372095556 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667792800 -14400 0 -04}
- {673588800 -10800 0 -03}
- {687927600 -7200 1 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1085972400 -14400 0 -04}
- {1090728000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667792800 -14400 0 -0400}
+ {673588800 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1085972400 -14400 0 -0400}
+ {1090728000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/San_Luis b/library/tzdata/America/Argentina/San_Luis
index 4d27c32..455263e 100644
--- a/library/tzdata/America/Argentina/San_Luis
+++ b/library/tzdata/America/Argentina/San_Luis
@@ -3,66 +3,66 @@
set TZData(:America/Argentina/San_Luis) {
{-9223372036854775808 -15924 0 LMT}
{-2372096076 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {631159200 -7200 1 -02}
- {637380000 -14400 0 -04}
- {655963200 -10800 1 -03}
- {667796400 -14400 0 -04}
- {675748800 -10800 0 -03}
- {938919600 -10800 1 -03}
- {952052400 -10800 0 -03}
- {1085972400 -14400 0 -04}
- {1090728000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1200880800 -10800 0 -04}
- {1205031600 -14400 0 -04}
- {1223784000 -10800 1 -04}
- {1236481200 -14400 0 -04}
- {1255233600 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {631159200 -7200 1 -0200}
+ {637380000 -14400 0 -0400}
+ {655963200 -10800 1 -0300}
+ {667796400 -14400 0 -0400}
+ {675748800 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952052400 -10800 0 -0300}
+ {1085972400 -14400 0 -0400}
+ {1090728000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1200880800 -10800 0 -0300}
+ {1205031600 -14400 0 -0400}
+ {1223784000 -10800 1 -0300}
+ {1236481200 -14400 0 -0400}
+ {1255233600 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Tucuman b/library/tzdata/America/Argentina/Tucuman
index 6809800..d2c1d4d 100644
--- a/library/tzdata/America/Argentina/Tucuman
+++ b/library/tzdata/America/Argentina/Tucuman
@@ -3,67 +3,67 @@
set TZData(:America/Argentina/Tucuman) {
{-9223372036854775808 -15652 0 LMT}
{-2372096348 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -14400 0 -04}
- {687931200 -7200 0 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1086058800 -14400 0 -04}
- {1087099200 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224385200 -7200 1 -03}
- {1237082400 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -14400 0 -0400}
+ {687931200 -7200 0 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1086058800 -14400 0 -0400}
+ {1087099200 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224385200 -7200 1 -0200}
+ {1237082400 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Argentina/Ushuaia b/library/tzdata/America/Argentina/Ushuaia
index c62ca0d..eac9562 100644
--- a/library/tzdata/America/Argentina/Ushuaia
+++ b/library/tzdata/America/Argentina/Ushuaia
@@ -3,66 +3,66 @@
set TZData(:America/Argentina/Ushuaia) {
{-9223372036854775808 -16392 0 LMT}
{-2372095608 -15408 0 CMT}
- {-1567453392 -14400 0 -04}
- {-1233432000 -10800 0 -04}
- {-1222981200 -14400 0 -04}
- {-1205956800 -10800 1 -04}
- {-1194037200 -14400 0 -04}
- {-1172865600 -10800 1 -04}
- {-1162501200 -14400 0 -04}
- {-1141329600 -10800 1 -04}
- {-1130965200 -14400 0 -04}
- {-1109793600 -10800 1 -04}
- {-1099429200 -14400 0 -04}
- {-1078257600 -10800 1 -04}
- {-1067806800 -14400 0 -04}
- {-1046635200 -10800 1 -04}
- {-1036270800 -14400 0 -04}
- {-1015099200 -10800 1 -04}
- {-1004734800 -14400 0 -04}
- {-983563200 -10800 1 -04}
- {-973198800 -14400 0 -04}
- {-952027200 -10800 1 -04}
- {-941576400 -14400 0 -04}
- {-931032000 -10800 1 -04}
- {-900882000 -14400 0 -04}
- {-890337600 -10800 1 -04}
- {-833749200 -14400 0 -04}
- {-827265600 -10800 1 -04}
- {-752274000 -14400 0 -04}
- {-733780800 -10800 1 -04}
- {-197326800 -14400 0 -04}
- {-190843200 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-164491200 -10800 1 -04}
- {-152658000 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {596948400 -7200 1 -03}
- {605066400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {636516000 -10800 0 -03}
- {656478000 -7200 1 -03}
- {667965600 -10800 0 -03}
- {687927600 -7200 1 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {731469600 -10800 0 -03}
- {938916000 -10800 0 -04}
- {938919600 -10800 1 -04}
- {952056000 -10800 0 -03}
- {1085886000 -14400 0 -04}
- {1087704000 -10800 0 -03}
- {1198983600 -7200 1 -03}
- {1205632800 -10800 0 -03}
- {1224295200 -10800 0 -03}
+ {-1567453392 -14400 0 -0400}
+ {-1233432000 -10800 0 -0300}
+ {-1222981200 -14400 0 -0400}
+ {-1205956800 -10800 1 -0300}
+ {-1194037200 -14400 0 -0400}
+ {-1172865600 -10800 1 -0300}
+ {-1162501200 -14400 0 -0400}
+ {-1141329600 -10800 1 -0300}
+ {-1130965200 -14400 0 -0400}
+ {-1109793600 -10800 1 -0300}
+ {-1099429200 -14400 0 -0400}
+ {-1078257600 -10800 1 -0300}
+ {-1067806800 -14400 0 -0400}
+ {-1046635200 -10800 1 -0300}
+ {-1036270800 -14400 0 -0400}
+ {-1015099200 -10800 1 -0300}
+ {-1004734800 -14400 0 -0400}
+ {-983563200 -10800 1 -0300}
+ {-973198800 -14400 0 -0400}
+ {-952027200 -10800 1 -0300}
+ {-941576400 -14400 0 -0400}
+ {-931032000 -10800 1 -0300}
+ {-900882000 -14400 0 -0400}
+ {-890337600 -10800 1 -0300}
+ {-833749200 -14400 0 -0400}
+ {-827265600 -10800 1 -0300}
+ {-752274000 -14400 0 -0400}
+ {-733780800 -10800 1 -0300}
+ {-197326800 -14400 0 -0400}
+ {-190843200 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-164491200 -10800 1 -0300}
+ {-152658000 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {596948400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {636516000 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {731469600 -10800 0 -0300}
+ {938916000 -10800 0 -0300}
+ {938919600 -10800 1 -0300}
+ {952056000 -10800 0 -0300}
+ {1085886000 -14400 0 -0400}
+ {1087704000 -10800 0 -0300}
+ {1198983600 -7200 1 -0200}
+ {1205632800 -10800 0 -0300}
+ {1224295200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Asuncion b/library/tzdata/America/Asuncion
index 8e6c1b0..6cd61c1 100644
--- a/library/tzdata/America/Asuncion
+++ b/library/tzdata/America/Asuncion
@@ -3,257 +3,108 @@
set TZData(:America/Asuncion) {
{-9223372036854775808 -13840 0 LMT}
{-2524507760 -13840 0 AMT}
- {-1206389360 -14400 0 -04}
- {86760000 -10800 0 -03}
- {134017200 -14400 0 -04}
- {162878400 -14400 0 -04}
- {181368000 -10800 1 -04}
- {194497200 -14400 0 -04}
- {212990400 -10800 1 -04}
- {226033200 -14400 0 -04}
- {244526400 -10800 1 -04}
- {257569200 -14400 0 -04}
- {276062400 -10800 1 -04}
- {291783600 -14400 0 -04}
- {307598400 -10800 1 -04}
- {323406000 -14400 0 -04}
- {339220800 -10800 1 -04}
- {354942000 -14400 0 -04}
- {370756800 -10800 1 -04}
- {386478000 -14400 0 -04}
- {402292800 -10800 1 -04}
- {418014000 -14400 0 -04}
- {433828800 -10800 1 -04}
- {449636400 -14400 0 -04}
- {465451200 -10800 1 -04}
- {481172400 -14400 0 -04}
- {496987200 -10800 1 -04}
- {512708400 -14400 0 -04}
- {528523200 -10800 1 -04}
- {544244400 -14400 0 -04}
- {560059200 -10800 1 -04}
- {575866800 -14400 0 -04}
- {591681600 -10800 1 -04}
- {607402800 -14400 0 -04}
- {625032000 -10800 1 -04}
- {638938800 -14400 0 -04}
- {654753600 -10800 1 -04}
- {670474800 -14400 0 -04}
- {686721600 -10800 1 -04}
- {699418800 -14400 0 -04}
- {718257600 -10800 1 -04}
- {733546800 -14400 0 -04}
- {749448000 -10800 1 -04}
- {762318000 -14400 0 -04}
- {780984000 -10800 1 -04}
- {793767600 -14400 0 -04}
- {812520000 -10800 1 -04}
- {825649200 -14400 0 -04}
- {844574400 -10800 1 -04}
- {856666800 -14400 0 -04}
- {876024000 -10800 1 -04}
- {888721200 -14400 0 -04}
- {907473600 -10800 1 -04}
- {920775600 -14400 0 -04}
- {938923200 -10800 1 -04}
- {952225200 -14400 0 -04}
- {970372800 -10800 1 -04}
- {983674800 -14400 0 -04}
- {1002427200 -10800 1 -04}
- {1018148400 -14400 0 -04}
- {1030852800 -10800 1 -04}
- {1049598000 -14400 0 -04}
- {1062907200 -10800 1 -04}
- {1081047600 -14400 0 -04}
- {1097985600 -10800 1 -04}
- {1110682800 -14400 0 -04}
- {1129435200 -10800 1 -04}
- {1142132400 -14400 0 -04}
- {1160884800 -10800 1 -04}
- {1173582000 -14400 0 -04}
- {1192939200 -10800 1 -04}
- {1205031600 -14400 0 -04}
- {1224388800 -10800 1 -04}
- {1236481200 -14400 0 -04}
- {1255838400 -10800 1 -04}
- {1270954800 -14400 0 -04}
- {1286078400 -10800 1 -04}
- {1302404400 -14400 0 -04}
- {1317528000 -10800 1 -04}
- {1333854000 -14400 0 -04}
- {1349582400 -10800 1 -04}
- {1364094000 -14400 0 -04}
- {1381032000 -10800 1 -04}
- {1395543600 -14400 0 -04}
- {1412481600 -10800 1 -04}
- {1426993200 -14400 0 -04}
- {1443931200 -10800 1 -04}
- {1459047600 -14400 0 -04}
- {1475380800 -10800 1 -04}
- {1490497200 -14400 0 -04}
- {1506830400 -10800 1 -04}
- {1521946800 -14400 0 -04}
- {1538884800 -10800 1 -04}
- {1553396400 -14400 0 -04}
- {1570334400 -10800 1 -04}
- {1584846000 -14400 0 -04}
- {1601784000 -10800 1 -04}
- {1616900400 -14400 0 -04}
- {1633233600 -10800 1 -04}
- {1648350000 -14400 0 -04}
- {1664683200 -10800 1 -04}
- {1679799600 -14400 0 -04}
- {1696132800 -10800 1 -04}
- {1711249200 -14400 0 -04}
- {1728187200 -10800 1 -04}
- {1742698800 -14400 0 -04}
- {1759636800 -10800 1 -04}
- {1774148400 -14400 0 -04}
- {1791086400 -10800 1 -04}
- {1806202800 -14400 0 -04}
- {1822536000 -10800 1 -04}
- {1837652400 -14400 0 -04}
- {1853985600 -10800 1 -04}
- {1869102000 -14400 0 -04}
- {1886040000 -10800 1 -04}
- {1900551600 -14400 0 -04}
- {1917489600 -10800 1 -04}
- {1932001200 -14400 0 -04}
- {1948939200 -10800 1 -04}
- {1964055600 -14400 0 -04}
- {1980388800 -10800 1 -04}
- {1995505200 -14400 0 -04}
- {2011838400 -10800 1 -04}
- {2026954800 -14400 0 -04}
- {2043288000 -10800 1 -04}
- {2058404400 -14400 0 -04}
- {2075342400 -10800 1 -04}
- {2089854000 -14400 0 -04}
- {2106792000 -10800 1 -04}
- {2121303600 -14400 0 -04}
- {2138241600 -10800 1 -04}
- {2153358000 -14400 0 -04}
- {2169691200 -10800 1 -04}
- {2184807600 -14400 0 -04}
- {2201140800 -10800 1 -04}
- {2216257200 -14400 0 -04}
- {2233195200 -10800 1 -04}
- {2247706800 -14400 0 -04}
- {2264644800 -10800 1 -04}
- {2279156400 -14400 0 -04}
- {2296094400 -10800 1 -04}
- {2310606000 -14400 0 -04}
- {2327544000 -10800 1 -04}
- {2342660400 -14400 0 -04}
- {2358993600 -10800 1 -04}
- {2374110000 -14400 0 -04}
- {2390443200 -10800 1 -04}
- {2405559600 -14400 0 -04}
- {2422497600 -10800 1 -04}
- {2437009200 -14400 0 -04}
- {2453947200 -10800 1 -04}
- {2468458800 -14400 0 -04}
- {2485396800 -10800 1 -04}
- {2500513200 -14400 0 -04}
- {2516846400 -10800 1 -04}
- {2531962800 -14400 0 -04}
- {2548296000 -10800 1 -04}
- {2563412400 -14400 0 -04}
- {2579745600 -10800 1 -04}
- {2594862000 -14400 0 -04}
- {2611800000 -10800 1 -04}
- {2626311600 -14400 0 -04}
- {2643249600 -10800 1 -04}
- {2657761200 -14400 0 -04}
- {2674699200 -10800 1 -04}
- {2689815600 -14400 0 -04}
- {2706148800 -10800 1 -04}
- {2721265200 -14400 0 -04}
- {2737598400 -10800 1 -04}
- {2752714800 -14400 0 -04}
- {2769652800 -10800 1 -04}
- {2784164400 -14400 0 -04}
- {2801102400 -10800 1 -04}
- {2815614000 -14400 0 -04}
- {2832552000 -10800 1 -04}
- {2847668400 -14400 0 -04}
- {2864001600 -10800 1 -04}
- {2879118000 -14400 0 -04}
- {2895451200 -10800 1 -04}
- {2910567600 -14400 0 -04}
- {2926900800 -10800 1 -04}
- {2942017200 -14400 0 -04}
- {2958955200 -10800 1 -04}
- {2973466800 -14400 0 -04}
- {2990404800 -10800 1 -04}
- {3004916400 -14400 0 -04}
- {3021854400 -10800 1 -04}
- {3036970800 -14400 0 -04}
- {3053304000 -10800 1 -04}
- {3068420400 -14400 0 -04}
- {3084753600 -10800 1 -04}
- {3099870000 -14400 0 -04}
- {3116808000 -10800 1 -04}
- {3131319600 -14400 0 -04}
- {3148257600 -10800 1 -04}
- {3162769200 -14400 0 -04}
- {3179707200 -10800 1 -04}
- {3194218800 -14400 0 -04}
- {3211156800 -10800 1 -04}
- {3226273200 -14400 0 -04}
- {3242606400 -10800 1 -04}
- {3257722800 -14400 0 -04}
- {3274056000 -10800 1 -04}
- {3289172400 -14400 0 -04}
- {3306110400 -10800 1 -04}
- {3320622000 -14400 0 -04}
- {3337560000 -10800 1 -04}
- {3352071600 -14400 0 -04}
- {3369009600 -10800 1 -04}
- {3384126000 -14400 0 -04}
- {3400459200 -10800 1 -04}
- {3415575600 -14400 0 -04}
- {3431908800 -10800 1 -04}
- {3447025200 -14400 0 -04}
- {3463358400 -10800 1 -04}
- {3478474800 -14400 0 -04}
- {3495412800 -10800 1 -04}
- {3509924400 -14400 0 -04}
- {3526862400 -10800 1 -04}
- {3541374000 -14400 0 -04}
- {3558312000 -10800 1 -04}
- {3573428400 -14400 0 -04}
- {3589761600 -10800 1 -04}
- {3604878000 -14400 0 -04}
- {3621211200 -10800 1 -04}
- {3636327600 -14400 0 -04}
- {3653265600 -10800 1 -04}
- {3667777200 -14400 0 -04}
- {3684715200 -10800 1 -04}
- {3699226800 -14400 0 -04}
- {3716164800 -10800 1 -04}
- {3731281200 -14400 0 -04}
- {3747614400 -10800 1 -04}
- {3762730800 -14400 0 -04}
- {3779064000 -10800 1 -04}
- {3794180400 -14400 0 -04}
- {3810513600 -10800 1 -04}
- {3825630000 -14400 0 -04}
- {3842568000 -10800 1 -04}
- {3857079600 -14400 0 -04}
- {3874017600 -10800 1 -04}
- {3888529200 -14400 0 -04}
- {3905467200 -10800 1 -04}
- {3920583600 -14400 0 -04}
- {3936916800 -10800 1 -04}
- {3952033200 -14400 0 -04}
- {3968366400 -10800 1 -04}
- {3983482800 -14400 0 -04}
- {4000420800 -10800 1 -04}
- {4014932400 -14400 0 -04}
- {4031870400 -10800 1 -04}
- {4046382000 -14400 0 -04}
- {4063320000 -10800 1 -04}
- {4077831600 -14400 0 -04}
- {4094769600 -10800 1 -04}
+ {-1206389360 -14400 0 -0400}
+ {86760000 -10800 0 -0300}
+ {134017200 -14400 0 -0400}
+ {162878400 -14400 0 -0400}
+ {181368000 -10800 1 -0300}
+ {194497200 -14400 0 -0400}
+ {212990400 -10800 1 -0300}
+ {226033200 -14400 0 -0400}
+ {244526400 -10800 1 -0300}
+ {257569200 -14400 0 -0400}
+ {276062400 -10800 1 -0300}
+ {291783600 -14400 0 -0400}
+ {307598400 -10800 1 -0300}
+ {323406000 -14400 0 -0400}
+ {339220800 -10800 1 -0300}
+ {354942000 -14400 0 -0400}
+ {370756800 -10800 1 -0300}
+ {386478000 -14400 0 -0400}
+ {402292800 -10800 1 -0300}
+ {418014000 -14400 0 -0400}
+ {433828800 -10800 1 -0300}
+ {449636400 -14400 0 -0400}
+ {465451200 -10800 1 -0300}
+ {481172400 -14400 0 -0400}
+ {496987200 -10800 1 -0300}
+ {512708400 -14400 0 -0400}
+ {528523200 -10800 1 -0300}
+ {544244400 -14400 0 -0400}
+ {560059200 -10800 1 -0300}
+ {575866800 -14400 0 -0400}
+ {591681600 -10800 1 -0300}
+ {607402800 -14400 0 -0400}
+ {625032000 -10800 1 -0300}
+ {638938800 -14400 0 -0400}
+ {654753600 -10800 1 -0300}
+ {670474800 -14400 0 -0400}
+ {686721600 -10800 1 -0300}
+ {699418800 -14400 0 -0400}
+ {718257600 -10800 1 -0300}
+ {733546800 -14400 0 -0400}
+ {749448000 -10800 1 -0300}
+ {762318000 -14400 0 -0400}
+ {780984000 -10800 1 -0300}
+ {793767600 -14400 0 -0400}
+ {812520000 -10800 1 -0300}
+ {825649200 -14400 0 -0400}
+ {844574400 -10800 1 -0300}
+ {856666800 -14400 0 -0400}
+ {876024000 -10800 1 -0300}
+ {888721200 -14400 0 -0400}
+ {907473600 -10800 1 -0300}
+ {920775600 -14400 0 -0400}
+ {938923200 -10800 1 -0300}
+ {952225200 -14400 0 -0400}
+ {970372800 -10800 1 -0300}
+ {983674800 -14400 0 -0400}
+ {1002427200 -10800 1 -0300}
+ {1018148400 -14400 0 -0400}
+ {1030852800 -10800 1 -0300}
+ {1049598000 -14400 0 -0400}
+ {1062907200 -10800 1 -0300}
+ {1081047600 -14400 0 -0400}
+ {1097985600 -10800 1 -0300}
+ {1110682800 -14400 0 -0400}
+ {1129435200 -10800 1 -0300}
+ {1142132400 -14400 0 -0400}
+ {1160884800 -10800 1 -0300}
+ {1173582000 -14400 0 -0400}
+ {1192939200 -10800 1 -0300}
+ {1205031600 -14400 0 -0400}
+ {1224388800 -10800 1 -0300}
+ {1236481200 -14400 0 -0400}
+ {1255838400 -10800 1 -0300}
+ {1270954800 -14400 0 -0400}
+ {1286078400 -10800 1 -0300}
+ {1302404400 -14400 0 -0400}
+ {1317528000 -10800 1 -0300}
+ {1333854000 -14400 0 -0400}
+ {1349582400 -10800 1 -0300}
+ {1364094000 -14400 0 -0400}
+ {1381032000 -10800 1 -0300}
+ {1395543600 -14400 0 -0400}
+ {1412481600 -10800 1 -0300}
+ {1426993200 -14400 0 -0400}
+ {1443931200 -10800 1 -0300}
+ {1459047600 -14400 0 -0400}
+ {1475380800 -10800 1 -0300}
+ {1490497200 -14400 0 -0400}
+ {1506830400 -10800 1 -0300}
+ {1521946800 -14400 0 -0400}
+ {1538884800 -10800 1 -0300}
+ {1553396400 -14400 0 -0400}
+ {1570334400 -10800 1 -0300}
+ {1584846000 -14400 0 -0400}
+ {1601784000 -10800 1 -0300}
+ {1616900400 -14400 0 -0400}
+ {1633233600 -10800 1 -0300}
+ {1648350000 -14400 0 -0400}
+ {1664683200 -10800 1 -0300}
+ {1679799600 -14400 0 -0400}
+ {1696132800 -10800 1 -0300}
+ {1711249200 -14400 0 -0400}
+ {1728187200 -10800 1 -0300}
+ {1728961200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Bahia b/library/tzdata/America/Bahia
index 7aaf834..2d16e65 100644
--- a/library/tzdata/America/Bahia
+++ b/library/tzdata/America/Bahia
@@ -2,67 +2,67 @@
set TZData(:America/Bahia) {
{-9223372036854775808 -9244 0 LMT}
- {-1767216356 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-191365200 -7200 1 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {592974000 -7200 1 -03}
- {602042400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {634701600 -10800 0 -03}
- {656478000 -7200 1 -03}
- {666756000 -10800 0 -03}
- {687927600 -7200 1 -03}
- {697600800 -10800 0 -03}
- {719982000 -7200 1 -03}
- {728445600 -10800 0 -03}
- {750826800 -7200 1 -03}
- {761709600 -10800 0 -03}
- {782276400 -7200 1 -03}
- {793159200 -10800 0 -03}
- {813726000 -7200 1 -03}
- {824004000 -10800 0 -03}
- {844570800 -7200 1 -03}
- {856058400 -10800 0 -03}
- {876106800 -7200 1 -03}
- {888717600 -10800 0 -03}
- {908074800 -7200 1 -03}
- {919562400 -10800 0 -03}
- {938919600 -7200 1 -03}
- {951616800 -10800 0 -03}
- {970974000 -7200 1 -03}
- {982461600 -10800 0 -03}
- {1003028400 -7200 1 -03}
- {1013911200 -10800 0 -03}
- {1036292400 -7200 1 -03}
- {1045360800 -10800 0 -03}
- {1064368800 -10800 0 -03}
- {1318734000 -7200 0 -03}
- {1330221600 -10800 0 -03}
- {1350784800 -10800 0 -03}
+ {-1767216356 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-191365200 -7200 1 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {592974000 -7200 1 -0200}
+ {602042400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {634701600 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {666756000 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {697600800 -10800 0 -0300}
+ {719982000 -7200 1 -0200}
+ {728445600 -10800 0 -0300}
+ {750826800 -7200 1 -0200}
+ {761709600 -10800 0 -0300}
+ {782276400 -7200 1 -0200}
+ {793159200 -10800 0 -0300}
+ {813726000 -7200 1 -0200}
+ {824004000 -10800 0 -0300}
+ {844570800 -7200 1 -0200}
+ {856058400 -10800 0 -0300}
+ {876106800 -7200 1 -0200}
+ {888717600 -10800 0 -0300}
+ {908074800 -7200 1 -0200}
+ {919562400 -10800 0 -0300}
+ {938919600 -7200 1 -0200}
+ {951616800 -10800 0 -0300}
+ {970974000 -7200 1 -0200}
+ {982461600 -10800 0 -0300}
+ {1003028400 -7200 1 -0200}
+ {1013911200 -10800 0 -0300}
+ {1036292400 -7200 1 -0200}
+ {1045360800 -10800 0 -0300}
+ {1064368800 -10800 0 -0300}
+ {1318734000 -7200 0 -0200}
+ {1330221600 -10800 0 -0300}
+ {1350784800 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Bahia_Banderas b/library/tzdata/America/Bahia_Banderas
index f06141e..9462856 100644
--- a/library/tzdata/America/Bahia_Banderas
+++ b/library/tzdata/America/Bahia_Banderas
@@ -3,14 +3,13 @@
set TZData(:America/Bahia_Banderas) {
{-9223372036854775808 -25260 0 LMT}
{-1514739600 -25200 0 MST}
- {-1343066400 -21600 0 CST}
+ {-1343149200 -21600 0 CST}
{-1234807200 -25200 0 MST}
- {-1220292000 -21600 1 MDT}
+ {-1220461200 -21600 1 MDT}
{-1207159200 -25200 0 MST}
{-1191344400 -21600 0 CST}
{-873828000 -25200 0 MST}
- {-661539600 -28800 0 PST}
- {28800 -25200 0 MST}
+ {25200 -25200 0 MST}
{828867600 -21600 1 MDT}
{846403200 -25200 0 MST}
{860317200 -21600 1 MDT}
@@ -65,158 +64,4 @@ set TZData(:America/Bahia_Banderas) {
{1635663600 -21600 0 CST}
{1648972800 -18000 1 CDT}
{1667113200 -21600 0 CST}
- {1680422400 -18000 1 CDT}
- {1698562800 -21600 0 CST}
- {1712476800 -18000 1 CDT}
- {1730012400 -21600 0 CST}
- {1743926400 -18000 1 CDT}
- {1761462000 -21600 0 CST}
- {1775376000 -18000 1 CDT}
- {1792911600 -21600 0 CST}
- {1806825600 -18000 1 CDT}
- {1824966000 -21600 0 CST}
- {1838275200 -18000 1 CDT}
- {1856415600 -21600 0 CST}
- {1869724800 -18000 1 CDT}
- {1887865200 -21600 0 CST}
- {1901779200 -18000 1 CDT}
- {1919314800 -21600 0 CST}
- {1933228800 -18000 1 CDT}
- {1950764400 -21600 0 CST}
- {1964678400 -18000 1 CDT}
- {1982818800 -21600 0 CST}
- {1996128000 -18000 1 CDT}
- {2014268400 -21600 0 CST}
- {2027577600 -18000 1 CDT}
- {2045718000 -21600 0 CST}
- {2059027200 -18000 1 CDT}
- {2077167600 -21600 0 CST}
- {2091081600 -18000 1 CDT}
- {2108617200 -21600 0 CST}
- {2122531200 -18000 1 CDT}
- {2140066800 -21600 0 CST}
- {2153980800 -18000 1 CDT}
- {2172121200 -21600 0 CST}
- {2185430400 -18000 1 CDT}
- {2203570800 -21600 0 CST}
- {2216880000 -18000 1 CDT}
- {2235020400 -21600 0 CST}
- {2248934400 -18000 1 CDT}
- {2266470000 -21600 0 CST}
- {2280384000 -18000 1 CDT}
- {2297919600 -21600 0 CST}
- {2311833600 -18000 1 CDT}
- {2329369200 -21600 0 CST}
- {2343283200 -18000 1 CDT}
- {2361423600 -21600 0 CST}
- {2374732800 -18000 1 CDT}
- {2392873200 -21600 0 CST}
- {2406182400 -18000 1 CDT}
- {2424322800 -21600 0 CST}
- {2438236800 -18000 1 CDT}
- {2455772400 -21600 0 CST}
- {2469686400 -18000 1 CDT}
- {2487222000 -21600 0 CST}
- {2501136000 -18000 1 CDT}
- {2519276400 -21600 0 CST}
- {2532585600 -18000 1 CDT}
- {2550726000 -21600 0 CST}
- {2564035200 -18000 1 CDT}
- {2582175600 -21600 0 CST}
- {2596089600 -18000 1 CDT}
- {2613625200 -21600 0 CST}
- {2627539200 -18000 1 CDT}
- {2645074800 -21600 0 CST}
- {2658988800 -18000 1 CDT}
- {2676524400 -21600 0 CST}
- {2690438400 -18000 1 CDT}
- {2708578800 -21600 0 CST}
- {2721888000 -18000 1 CDT}
- {2740028400 -21600 0 CST}
- {2753337600 -18000 1 CDT}
- {2771478000 -21600 0 CST}
- {2785392000 -18000 1 CDT}
- {2802927600 -21600 0 CST}
- {2816841600 -18000 1 CDT}
- {2834377200 -21600 0 CST}
- {2848291200 -18000 1 CDT}
- {2866431600 -21600 0 CST}
- {2879740800 -18000 1 CDT}
- {2897881200 -21600 0 CST}
- {2911190400 -18000 1 CDT}
- {2929330800 -21600 0 CST}
- {2942640000 -18000 1 CDT}
- {2960780400 -21600 0 CST}
- {2974694400 -18000 1 CDT}
- {2992230000 -21600 0 CST}
- {3006144000 -18000 1 CDT}
- {3023679600 -21600 0 CST}
- {3037593600 -18000 1 CDT}
- {3055734000 -21600 0 CST}
- {3069043200 -18000 1 CDT}
- {3087183600 -21600 0 CST}
- {3100492800 -18000 1 CDT}
- {3118633200 -21600 0 CST}
- {3132547200 -18000 1 CDT}
- {3150082800 -21600 0 CST}
- {3163996800 -18000 1 CDT}
- {3181532400 -21600 0 CST}
- {3195446400 -18000 1 CDT}
- {3212982000 -21600 0 CST}
- {3226896000 -18000 1 CDT}
- {3245036400 -21600 0 CST}
- {3258345600 -18000 1 CDT}
- {3276486000 -21600 0 CST}
- {3289795200 -18000 1 CDT}
- {3307935600 -21600 0 CST}
- {3321849600 -18000 1 CDT}
- {3339385200 -21600 0 CST}
- {3353299200 -18000 1 CDT}
- {3370834800 -21600 0 CST}
- {3384748800 -18000 1 CDT}
- {3402889200 -21600 0 CST}
- {3416198400 -18000 1 CDT}
- {3434338800 -21600 0 CST}
- {3447648000 -18000 1 CDT}
- {3465788400 -21600 0 CST}
- {3479702400 -18000 1 CDT}
- {3497238000 -21600 0 CST}
- {3511152000 -18000 1 CDT}
- {3528687600 -21600 0 CST}
- {3542601600 -18000 1 CDT}
- {3560137200 -21600 0 CST}
- {3574051200 -18000 1 CDT}
- {3592191600 -21600 0 CST}
- {3605500800 -18000 1 CDT}
- {3623641200 -21600 0 CST}
- {3636950400 -18000 1 CDT}
- {3655090800 -21600 0 CST}
- {3669004800 -18000 1 CDT}
- {3686540400 -21600 0 CST}
- {3700454400 -18000 1 CDT}
- {3717990000 -21600 0 CST}
- {3731904000 -18000 1 CDT}
- {3750044400 -21600 0 CST}
- {3763353600 -18000 1 CDT}
- {3781494000 -21600 0 CST}
- {3794803200 -18000 1 CDT}
- {3812943600 -21600 0 CST}
- {3826252800 -18000 1 CDT}
- {3844393200 -21600 0 CST}
- {3858307200 -18000 1 CDT}
- {3875842800 -21600 0 CST}
- {3889756800 -18000 1 CDT}
- {3907292400 -21600 0 CST}
- {3921206400 -18000 1 CDT}
- {3939346800 -21600 0 CST}
- {3952656000 -18000 1 CDT}
- {3970796400 -21600 0 CST}
- {3984105600 -18000 1 CDT}
- {4002246000 -21600 0 CST}
- {4016160000 -18000 1 CDT}
- {4033695600 -21600 0 CST}
- {4047609600 -18000 1 CDT}
- {4065145200 -21600 0 CST}
- {4079059200 -18000 1 CDT}
- {4096594800 -21600 0 CST}
}
diff --git a/library/tzdata/America/Belem b/library/tzdata/America/Belem
index 42a3ec5..406d349 100644
--- a/library/tzdata/America/Belem
+++ b/library/tzdata/America/Belem
@@ -2,34 +2,34 @@
set TZData(:America/Belem) {
{-9223372036854775808 -11636 0 LMT}
- {-1767213964 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-191365200 -7200 1 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {590032800 -10800 0 -03}
+ {-1767213964 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-191365200 -7200 1 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {590032800 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Boa_Vista b/library/tzdata/America/Boa_Vista
index 0af989e..8000591 100644
--- a/library/tzdata/America/Boa_Vista
+++ b/library/tzdata/America/Boa_Vista
@@ -2,39 +2,39 @@
set TZData(:America/Boa_Vista) {
{-9223372036854775808 -14560 0 LMT}
- {-1767211040 -14400 0 -04}
- {-1206954000 -10800 1 -04}
- {-1191358800 -14400 0 -04}
- {-1175371200 -10800 1 -04}
- {-1159822800 -14400 0 -04}
- {-633816000 -10800 1 -04}
- {-622065600 -14400 0 -04}
- {-602280000 -10800 1 -04}
- {-591829200 -14400 0 -04}
- {-570744000 -10800 1 -04}
- {-560206800 -14400 0 -04}
- {-539121600 -10800 1 -04}
- {-531349200 -14400 0 -04}
- {-191361600 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-155160000 -10800 1 -04}
- {-150066000 -14400 0 -04}
- {-128894400 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-99950400 -10800 1 -04}
- {-89586000 -14400 0 -04}
- {-68414400 -10800 1 -04}
- {-57963600 -14400 0 -04}
- {499752000 -10800 1 -04}
- {511239600 -14400 0 -04}
- {530596800 -10800 1 -04}
- {540270000 -14400 0 -04}
- {562132800 -10800 1 -04}
- {571201200 -14400 0 -04}
- {590036400 -14400 0 -04}
- {938664000 -14400 0 -04}
- {938923200 -10800 1 -04}
- {951620400 -14400 0 -04}
- {970977600 -10800 1 -04}
- {971578800 -14400 0 -04}
+ {-1767211040 -14400 0 -0400}
+ {-1206954000 -10800 1 -0300}
+ {-1191358800 -14400 0 -0400}
+ {-1175371200 -10800 1 -0300}
+ {-1159822800 -14400 0 -0400}
+ {-633816000 -10800 1 -0300}
+ {-622065600 -14400 0 -0400}
+ {-602280000 -10800 1 -0300}
+ {-591829200 -14400 0 -0400}
+ {-570744000 -10800 1 -0300}
+ {-560206800 -14400 0 -0400}
+ {-539121600 -10800 1 -0300}
+ {-531349200 -14400 0 -0400}
+ {-191361600 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-155160000 -10800 1 -0300}
+ {-150066000 -14400 0 -0400}
+ {-128894400 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-99950400 -10800 1 -0300}
+ {-89586000 -14400 0 -0400}
+ {-68414400 -10800 1 -0300}
+ {-57963600 -14400 0 -0400}
+ {499752000 -10800 1 -0300}
+ {511239600 -14400 0 -0400}
+ {530596800 -10800 1 -0300}
+ {540270000 -14400 0 -0400}
+ {562132800 -10800 1 -0300}
+ {571201200 -14400 0 -0400}
+ {590036400 -14400 0 -0400}
+ {938664000 -14400 0 -0400}
+ {938923200 -10800 1 -0300}
+ {951620400 -14400 0 -0400}
+ {970977600 -10800 1 -0300}
+ {971578800 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Bogota b/library/tzdata/America/Bogota
index 8ca39ba..96deb81 100644
--- a/library/tzdata/America/Bogota
+++ b/library/tzdata/America/Bogota
@@ -3,7 +3,7 @@
set TZData(:America/Bogota) {
{-9223372036854775808 -17776 0 LMT}
{-2707671824 -17776 0 BMT}
- {-1739041424 -18000 0 -05}
- {704869200 -14400 1 -05}
- {733896000 -18000 0 -05}
+ {-1739041424 -18000 0 -0500}
+ {704869200 -14400 1 -0400}
+ {729057600 -18000 0 -0500}
}
diff --git a/library/tzdata/America/Cambridge_Bay b/library/tzdata/America/Cambridge_Bay
index 3115ee1..584ed83 100644
--- a/library/tzdata/America/Cambridge_Bay
+++ b/library/tzdata/America/Cambridge_Bay
@@ -6,8 +6,22 @@ set TZData(:America/Cambridge_Bay) {
{-880210800 -21600 1 MWT}
{-769395600 -21600 1 MPT}
{-765388800 -25200 0 MST}
- {-147891600 -18000 1 MDDT}
- {-131562000 -25200 0 MST}
+ {73472400 -21600 1 MDT}
+ {89193600 -25200 0 MST}
+ {104922000 -21600 1 MDT}
+ {120643200 -25200 0 MST}
+ {136371600 -21600 1 MDT}
+ {152092800 -25200 0 MST}
+ {167821200 -21600 1 MDT}
+ {183542400 -25200 0 MST}
+ {199270800 -21600 1 MDT}
+ {215596800 -25200 0 MST}
+ {230720400 -21600 1 MDT}
+ {247046400 -25200 0 MST}
+ {262774800 -21600 1 MDT}
+ {278496000 -25200 0 MST}
+ {294224400 -21600 1 MDT}
+ {309945600 -25200 0 MST}
{325674000 -21600 1 MDT}
{341395200 -25200 0 MST}
{357123600 -21600 1 MDT}
diff --git a/library/tzdata/America/Campo_Grande b/library/tzdata/America/Campo_Grande
index 904c27d..af3a212 100644
--- a/library/tzdata/America/Campo_Grande
+++ b/library/tzdata/America/Campo_Grande
@@ -2,95 +2,95 @@
set TZData(:America/Campo_Grande) {
{-9223372036854775808 -13108 0 LMT}
- {-1767212492 -14400 0 -04}
- {-1206954000 -10800 1 -04}
- {-1191358800 -14400 0 -04}
- {-1175371200 -10800 1 -04}
- {-1159822800 -14400 0 -04}
- {-633816000 -10800 1 -04}
- {-622065600 -14400 0 -04}
- {-602280000 -10800 1 -04}
- {-591829200 -14400 0 -04}
- {-570744000 -10800 1 -04}
- {-560206800 -14400 0 -04}
- {-539121600 -10800 1 -04}
- {-531349200 -14400 0 -04}
- {-191361600 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-155160000 -10800 1 -04}
- {-150066000 -14400 0 -04}
- {-128894400 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-99950400 -10800 1 -04}
- {-89586000 -14400 0 -04}
- {-68414400 -10800 1 -04}
- {-57963600 -14400 0 -04}
- {499752000 -10800 1 -04}
- {511239600 -14400 0 -04}
- {530596800 -10800 1 -04}
- {540270000 -14400 0 -04}
- {562132800 -10800 1 -04}
- {571201200 -14400 0 -04}
- {592977600 -10800 1 -04}
- {602046000 -14400 0 -04}
- {624427200 -10800 1 -04}
- {634705200 -14400 0 -04}
- {656481600 -10800 1 -04}
- {666759600 -14400 0 -04}
- {687931200 -10800 1 -04}
- {697604400 -14400 0 -04}
- {719985600 -10800 1 -04}
- {728449200 -14400 0 -04}
- {750830400 -10800 1 -04}
- {761713200 -14400 0 -04}
- {782280000 -10800 1 -04}
- {793162800 -14400 0 -04}
- {813729600 -10800 1 -04}
- {824007600 -14400 0 -04}
- {844574400 -10800 1 -04}
- {856062000 -14400 0 -04}
- {876110400 -10800 1 -04}
- {888721200 -14400 0 -04}
- {908078400 -10800 1 -04}
- {919566000 -14400 0 -04}
- {938923200 -10800 1 -04}
- {951620400 -14400 0 -04}
- {970977600 -10800 1 -04}
- {982465200 -14400 0 -04}
- {1003032000 -10800 1 -04}
- {1013914800 -14400 0 -04}
- {1036296000 -10800 1 -04}
- {1045364400 -14400 0 -04}
- {1066536000 -10800 1 -04}
- {1076814000 -14400 0 -04}
- {1099368000 -10800 1 -04}
- {1108868400 -14400 0 -04}
- {1129435200 -10800 1 -04}
- {1140318000 -14400 0 -04}
- {1162699200 -10800 1 -04}
- {1172372400 -14400 0 -04}
- {1192334400 -10800 1 -04}
- {1203217200 -14400 0 -04}
- {1224388800 -10800 1 -04}
- {1234666800 -14400 0 -04}
- {1255838400 -10800 1 -04}
- {1266721200 -14400 0 -04}
- {1287288000 -10800 1 -04}
- {1298170800 -14400 0 -04}
- {1318737600 -10800 1 -04}
- {1330225200 -14400 0 -04}
- {1350792000 -10800 1 -04}
- {1361070000 -14400 0 -04}
- {1382241600 -10800 1 -04}
- {1392519600 -14400 0 -04}
- {1413691200 -10800 1 -04}
- {1424574000 -14400 0 -04}
- {1445140800 -10800 1 -04}
- {1456023600 -14400 0 -04}
- {1476590400 -10800 1 -04}
- {1487473200 -14400 0 -04}
- {1508040000 -10800 1 -04}
- {1518922800 -14400 0 -04}
- {1541304000 -10800 1 -04}
- {1550372400 -14400 0 -04}
+ {-1767212492 -14400 0 -0400}
+ {-1206954000 -10800 1 -0300}
+ {-1191358800 -14400 0 -0400}
+ {-1175371200 -10800 1 -0300}
+ {-1159822800 -14400 0 -0400}
+ {-633816000 -10800 1 -0300}
+ {-622065600 -14400 0 -0400}
+ {-602280000 -10800 1 -0300}
+ {-591829200 -14400 0 -0400}
+ {-570744000 -10800 1 -0300}
+ {-560206800 -14400 0 -0400}
+ {-539121600 -10800 1 -0300}
+ {-531349200 -14400 0 -0400}
+ {-191361600 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-155160000 -10800 1 -0300}
+ {-150066000 -14400 0 -0400}
+ {-128894400 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-99950400 -10800 1 -0300}
+ {-89586000 -14400 0 -0400}
+ {-68414400 -10800 1 -0300}
+ {-57963600 -14400 0 -0400}
+ {499752000 -10800 1 -0300}
+ {511239600 -14400 0 -0400}
+ {530596800 -10800 1 -0300}
+ {540270000 -14400 0 -0400}
+ {562132800 -10800 1 -0300}
+ {571201200 -14400 0 -0400}
+ {592977600 -10800 1 -0300}
+ {602046000 -14400 0 -0400}
+ {624427200 -10800 1 -0300}
+ {634705200 -14400 0 -0400}
+ {656481600 -10800 1 -0300}
+ {666759600 -14400 0 -0400}
+ {687931200 -10800 1 -0300}
+ {697604400 -14400 0 -0400}
+ {719985600 -10800 1 -0300}
+ {728449200 -14400 0 -0400}
+ {750830400 -10800 1 -0300}
+ {761713200 -14400 0 -0400}
+ {782280000 -10800 1 -0300}
+ {793162800 -14400 0 -0400}
+ {813729600 -10800 1 -0300}
+ {824007600 -14400 0 -0400}
+ {844574400 -10800 1 -0300}
+ {856062000 -14400 0 -0400}
+ {876110400 -10800 1 -0300}
+ {888721200 -14400 0 -0400}
+ {908078400 -10800 1 -0300}
+ {919566000 -14400 0 -0400}
+ {938923200 -10800 1 -0300}
+ {951620400 -14400 0 -0400}
+ {970977600 -10800 1 -0300}
+ {982465200 -14400 0 -0400}
+ {1003032000 -10800 1 -0300}
+ {1013914800 -14400 0 -0400}
+ {1036296000 -10800 1 -0300}
+ {1045364400 -14400 0 -0400}
+ {1066536000 -10800 1 -0300}
+ {1076814000 -14400 0 -0400}
+ {1099368000 -10800 1 -0300}
+ {1108868400 -14400 0 -0400}
+ {1129435200 -10800 1 -0300}
+ {1140318000 -14400 0 -0400}
+ {1162699200 -10800 1 -0300}
+ {1172372400 -14400 0 -0400}
+ {1192334400 -10800 1 -0300}
+ {1203217200 -14400 0 -0400}
+ {1224388800 -10800 1 -0300}
+ {1234666800 -14400 0 -0400}
+ {1255838400 -10800 1 -0300}
+ {1266721200 -14400 0 -0400}
+ {1287288000 -10800 1 -0300}
+ {1298170800 -14400 0 -0400}
+ {1318737600 -10800 1 -0300}
+ {1330225200 -14400 0 -0400}
+ {1350792000 -10800 1 -0300}
+ {1361070000 -14400 0 -0400}
+ {1382241600 -10800 1 -0300}
+ {1392519600 -14400 0 -0400}
+ {1413691200 -10800 1 -0300}
+ {1424574000 -14400 0 -0400}
+ {1445140800 -10800 1 -0300}
+ {1456023600 -14400 0 -0400}
+ {1476590400 -10800 1 -0300}
+ {1487473200 -14400 0 -0400}
+ {1508040000 -10800 1 -0300}
+ {1518922800 -14400 0 -0400}
+ {1541304000 -10800 1 -0300}
+ {1550372400 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Cancun b/library/tzdata/America/Cancun
index fe5a060..2ab1dd3 100644
--- a/library/tzdata/America/Cancun
+++ b/library/tzdata/America/Cancun
@@ -3,11 +3,12 @@
set TZData(:America/Cancun) {
{-9223372036854775808 -20824 0 LMT}
{-1514743200 -21600 0 CST}
- {377935200 -18000 0 EST}
- {828860400 -14400 1 EDT}
- {846396000 -18000 0 EST}
- {860310000 -14400 1 EDT}
- {877845600 -18000 0 EST}
+ {378201600 -18000 0 EST}
+ {410504400 -21600 0 CST}
+ {828864000 -18000 1 CDT}
+ {846399600 -21600 0 CST}
+ {860313600 -18000 1 CDT}
+ {877852800 -18000 0 EST}
{891759600 -14400 1 EDT}
{902041200 -18000 0 CDT}
{909298800 -21600 0 CST}
diff --git a/library/tzdata/America/Caracas b/library/tzdata/America/Caracas
index f0dbffe..7e54bbf 100644
--- a/library/tzdata/America/Caracas
+++ b/library/tzdata/America/Caracas
@@ -3,8 +3,8 @@
set TZData(:America/Caracas) {
{-9223372036854775808 -16064 0 LMT}
{-2524505536 -16060 0 CMT}
- {-1826739140 -16200 0 -0430}
- {-157750200 -14400 0 -04}
- {1197183600 -16200 0 -0430}
- {1462086000 -14400 0 -04}
+ {-1826739140 -16200 0 -0530}
+ {-157750200 -14400 0 -0400}
+ {1197183600 -16200 0 -0530}
+ {1462086000 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Cayenne b/library/tzdata/America/Cayenne
index 6b1a3e9..d48f5e8 100644
--- a/library/tzdata/America/Cayenne
+++ b/library/tzdata/America/Cayenne
@@ -2,6 +2,6 @@
set TZData(:America/Cayenne) {
{-9223372036854775808 -12560 0 LMT}
- {-1846269040 -14400 0 -04}
- {-71092800 -10800 0 -03}
+ {-1846269040 -14400 0 -0400}
+ {-71092800 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Chihuahua b/library/tzdata/America/Chihuahua
index fc38542..f08be40 100644
--- a/library/tzdata/America/Chihuahua
+++ b/library/tzdata/America/Chihuahua
@@ -3,9 +3,9 @@
set TZData(:America/Chihuahua) {
{-9223372036854775808 -25460 0 LMT}
{-1514739600 -25200 0 MST}
- {-1343066400 -21600 0 CST}
+ {-1343149200 -21600 0 CST}
{-1234807200 -25200 0 MST}
- {-1220292000 -21600 1 MDT}
+ {-1220461200 -21600 1 MDT}
{-1207159200 -25200 0 MST}
{-1191344400 -21600 0 CST}
{820476000 -21600 0 CST}
@@ -63,159 +63,5 @@ set TZData(:America/Chihuahua) {
{1617526800 -21600 1 MDT}
{1635667200 -25200 0 MST}
{1648976400 -21600 1 MDT}
- {1667116800 -25200 0 MST}
- {1680426000 -21600 1 MDT}
- {1698566400 -25200 0 MST}
- {1712480400 -21600 1 MDT}
- {1730016000 -25200 0 MST}
- {1743930000 -21600 1 MDT}
- {1761465600 -25200 0 MST}
- {1775379600 -21600 1 MDT}
- {1792915200 -25200 0 MST}
- {1806829200 -21600 1 MDT}
- {1824969600 -25200 0 MST}
- {1838278800 -21600 1 MDT}
- {1856419200 -25200 0 MST}
- {1869728400 -21600 1 MDT}
- {1887868800 -25200 0 MST}
- {1901782800 -21600 1 MDT}
- {1919318400 -25200 0 MST}
- {1933232400 -21600 1 MDT}
- {1950768000 -25200 0 MST}
- {1964682000 -21600 1 MDT}
- {1982822400 -25200 0 MST}
- {1996131600 -21600 1 MDT}
- {2014272000 -25200 0 MST}
- {2027581200 -21600 1 MDT}
- {2045721600 -25200 0 MST}
- {2059030800 -21600 1 MDT}
- {2077171200 -25200 0 MST}
- {2091085200 -21600 1 MDT}
- {2108620800 -25200 0 MST}
- {2122534800 -21600 1 MDT}
- {2140070400 -25200 0 MST}
- {2153984400 -21600 1 MDT}
- {2172124800 -25200 0 MST}
- {2185434000 -21600 1 MDT}
- {2203574400 -25200 0 MST}
- {2216883600 -21600 1 MDT}
- {2235024000 -25200 0 MST}
- {2248938000 -21600 1 MDT}
- {2266473600 -25200 0 MST}
- {2280387600 -21600 1 MDT}
- {2297923200 -25200 0 MST}
- {2311837200 -21600 1 MDT}
- {2329372800 -25200 0 MST}
- {2343286800 -21600 1 MDT}
- {2361427200 -25200 0 MST}
- {2374736400 -21600 1 MDT}
- {2392876800 -25200 0 MST}
- {2406186000 -21600 1 MDT}
- {2424326400 -25200 0 MST}
- {2438240400 -21600 1 MDT}
- {2455776000 -25200 0 MST}
- {2469690000 -21600 1 MDT}
- {2487225600 -25200 0 MST}
- {2501139600 -21600 1 MDT}
- {2519280000 -25200 0 MST}
- {2532589200 -21600 1 MDT}
- {2550729600 -25200 0 MST}
- {2564038800 -21600 1 MDT}
- {2582179200 -25200 0 MST}
- {2596093200 -21600 1 MDT}
- {2613628800 -25200 0 MST}
- {2627542800 -21600 1 MDT}
- {2645078400 -25200 0 MST}
- {2658992400 -21600 1 MDT}
- {2676528000 -25200 0 MST}
- {2690442000 -21600 1 MDT}
- {2708582400 -25200 0 MST}
- {2721891600 -21600 1 MDT}
- {2740032000 -25200 0 MST}
- {2753341200 -21600 1 MDT}
- {2771481600 -25200 0 MST}
- {2785395600 -21600 1 MDT}
- {2802931200 -25200 0 MST}
- {2816845200 -21600 1 MDT}
- {2834380800 -25200 0 MST}
- {2848294800 -21600 1 MDT}
- {2866435200 -25200 0 MST}
- {2879744400 -21600 1 MDT}
- {2897884800 -25200 0 MST}
- {2911194000 -21600 1 MDT}
- {2929334400 -25200 0 MST}
- {2942643600 -21600 1 MDT}
- {2960784000 -25200 0 MST}
- {2974698000 -21600 1 MDT}
- {2992233600 -25200 0 MST}
- {3006147600 -21600 1 MDT}
- {3023683200 -25200 0 MST}
- {3037597200 -21600 1 MDT}
- {3055737600 -25200 0 MST}
- {3069046800 -21600 1 MDT}
- {3087187200 -25200 0 MST}
- {3100496400 -21600 1 MDT}
- {3118636800 -25200 0 MST}
- {3132550800 -21600 1 MDT}
- {3150086400 -25200 0 MST}
- {3164000400 -21600 1 MDT}
- {3181536000 -25200 0 MST}
- {3195450000 -21600 1 MDT}
- {3212985600 -25200 0 MST}
- {3226899600 -21600 1 MDT}
- {3245040000 -25200 0 MST}
- {3258349200 -21600 1 MDT}
- {3276489600 -25200 0 MST}
- {3289798800 -21600 1 MDT}
- {3307939200 -25200 0 MST}
- {3321853200 -21600 1 MDT}
- {3339388800 -25200 0 MST}
- {3353302800 -21600 1 MDT}
- {3370838400 -25200 0 MST}
- {3384752400 -21600 1 MDT}
- {3402892800 -25200 0 MST}
- {3416202000 -21600 1 MDT}
- {3434342400 -25200 0 MST}
- {3447651600 -21600 1 MDT}
- {3465792000 -25200 0 MST}
- {3479706000 -21600 1 MDT}
- {3497241600 -25200 0 MST}
- {3511155600 -21600 1 MDT}
- {3528691200 -25200 0 MST}
- {3542605200 -21600 1 MDT}
- {3560140800 -25200 0 MST}
- {3574054800 -21600 1 MDT}
- {3592195200 -25200 0 MST}
- {3605504400 -21600 1 MDT}
- {3623644800 -25200 0 MST}
- {3636954000 -21600 1 MDT}
- {3655094400 -25200 0 MST}
- {3669008400 -21600 1 MDT}
- {3686544000 -25200 0 MST}
- {3700458000 -21600 1 MDT}
- {3717993600 -25200 0 MST}
- {3731907600 -21600 1 MDT}
- {3750048000 -25200 0 MST}
- {3763357200 -21600 1 MDT}
- {3781497600 -25200 0 MST}
- {3794806800 -21600 1 MDT}
- {3812947200 -25200 0 MST}
- {3826256400 -21600 1 MDT}
- {3844396800 -25200 0 MST}
- {3858310800 -21600 1 MDT}
- {3875846400 -25200 0 MST}
- {3889760400 -21600 1 MDT}
- {3907296000 -25200 0 MST}
- {3921210000 -21600 1 MDT}
- {3939350400 -25200 0 MST}
- {3952659600 -21600 1 MDT}
- {3970800000 -25200 0 MST}
- {3984109200 -21600 1 MDT}
- {4002249600 -25200 0 MST}
- {4016163600 -21600 1 MDT}
- {4033699200 -25200 0 MST}
- {4047613200 -21600 1 MDT}
- {4065148800 -25200 0 MST}
- {4079062800 -21600 1 MDT}
- {4096598400 -25200 0 MST}
+ {1667120400 -21600 0 CST}
}
diff --git a/library/tzdata/America/Ciudad_Juarez b/library/tzdata/America/Ciudad_Juarez
new file mode 100644
index 0000000..ba90fc3
--- /dev/null
+++ b/library/tzdata/America/Ciudad_Juarez
@@ -0,0 +1,223 @@
+# created by tools/tclZIC.tcl - do not edit
+
+set TZData(:America/Ciudad_Juarez) {
+ {-9223372036854775808 -25556 0 LMT}
+ {-1514739600 -25200 0 MST}
+ {-1343149200 -21600 0 CST}
+ {-1234807200 -25200 0 MST}
+ {-1220461200 -21600 1 MDT}
+ {-1207159200 -25200 0 MST}
+ {-1191344400 -21600 0 CST}
+ {820476000 -21600 0 CST}
+ {828864000 -18000 1 CDT}
+ {846399600 -21600 0 CST}
+ {860313600 -18000 1 CDT}
+ {877849200 -21600 0 CST}
+ {883634400 -21600 0 CST}
+ {891766800 -21600 0 MDT}
+ {909302400 -25200 0 MST}
+ {923216400 -21600 1 MDT}
+ {941356800 -25200 0 MST}
+ {954666000 -21600 1 MDT}
+ {972806400 -25200 0 MST}
+ {989139600 -21600 1 MDT}
+ {1001836800 -25200 0 MST}
+ {1018170000 -21600 1 MDT}
+ {1035705600 -25200 0 MST}
+ {1049619600 -21600 1 MDT}
+ {1067155200 -25200 0 MST}
+ {1081069200 -21600 1 MDT}
+ {1099209600 -25200 0 MST}
+ {1112518800 -21600 1 MDT}
+ {1130659200 -25200 0 MST}
+ {1143968400 -21600 1 MDT}
+ {1162108800 -25200 0 MST}
+ {1175418000 -21600 1 MDT}
+ {1193558400 -25200 0 MST}
+ {1207472400 -21600 1 MDT}
+ {1225008000 -25200 0 MST}
+ {1238922000 -21600 1 MDT}
+ {1256457600 -25200 0 MST}
+ {1262329200 -25200 0 MST}
+ {1268557200 -21600 1 MDT}
+ {1289116800 -25200 0 MST}
+ {1300006800 -21600 1 MDT}
+ {1320566400 -25200 0 MST}
+ {1331456400 -21600 1 MDT}
+ {1352016000 -25200 0 MST}
+ {1362906000 -21600 1 MDT}
+ {1383465600 -25200 0 MST}
+ {1394355600 -21600 1 MDT}
+ {1414915200 -25200 0 MST}
+ {1425805200 -21600 1 MDT}
+ {1446364800 -25200 0 MST}
+ {1457859600 -21600 1 MDT}
+ {1478419200 -25200 0 MST}
+ {1489309200 -21600 1 MDT}
+ {1509868800 -25200 0 MST}
+ {1520758800 -21600 1 MDT}
+ {1541318400 -25200 0 MST}
+ {1552208400 -21600 1 MDT}
+ {1572768000 -25200 0 MST}
+ {1583658000 -21600 1 MDT}
+ {1604217600 -25200 0 MST}
+ {1615712400 -21600 1 MDT}
+ {1636272000 -25200 0 MST}
+ {1647162000 -21600 1 MDT}
+ {1667120400 -21600 0 CST}
+ {1669788000 -25200 0 MST}
+ {1678611600 -21600 1 MDT}
+ {1699171200 -25200 0 MST}
+ {1710061200 -21600 1 MDT}
+ {1730620800 -25200 0 MST}
+ {1741510800 -21600 1 MDT}
+ {1762070400 -25200 0 MST}
+ {1772960400 -21600 1 MDT}
+ {1793520000 -25200 0 MST}
+ {1805014800 -21600 1 MDT}
+ {1825574400 -25200 0 MST}
+ {1836464400 -21600 1 MDT}
+ {1857024000 -25200 0 MST}
+ {1867914000 -21600 1 MDT}
+ {1888473600 -25200 0 MST}
+ {1899363600 -21600 1 MDT}
+ {1919923200 -25200 0 MST}
+ {1930813200 -21600 1 MDT}
+ {1951372800 -25200 0 MST}
+ {1962867600 -21600 1 MDT}
+ {1983427200 -25200 0 MST}
+ {1994317200 -21600 1 MDT}
+ {2014876800 -25200 0 MST}
+ {2025766800 -21600 1 MDT}
+ {2046326400 -25200 0 MST}
+ {2057216400 -21600 1 MDT}
+ {2077776000 -25200 0 MST}
+ {2088666000 -21600 1 MDT}
+ {2109225600 -25200 0 MST}
+ {2120115600 -21600 1 MDT}
+ {2140675200 -25200 0 MST}
+ {2152170000 -21600 1 MDT}
+ {2172729600 -25200 0 MST}
+ {2183619600 -21600 1 MDT}
+ {2204179200 -25200 0 MST}
+ {2215069200 -21600 1 MDT}
+ {2235628800 -25200 0 MST}
+ {2246518800 -21600 1 MDT}
+ {2267078400 -25200 0 MST}
+ {2277968400 -21600 1 MDT}
+ {2298528000 -25200 0 MST}
+ {2309418000 -21600 1 MDT}
+ {2329977600 -25200 0 MST}
+ {2341472400 -21600 1 MDT}
+ {2362032000 -25200 0 MST}
+ {2372922000 -21600 1 MDT}
+ {2393481600 -25200 0 MST}
+ {2404371600 -21600 1 MDT}
+ {2424931200 -25200 0 MST}
+ {2435821200 -21600 1 MDT}
+ {2456380800 -25200 0 MST}
+ {2467270800 -21600 1 MDT}
+ {2487830400 -25200 0 MST}
+ {2499325200 -21600 1 MDT}
+ {2519884800 -25200 0 MST}
+ {2530774800 -21600 1 MDT}
+ {2551334400 -25200 0 MST}
+ {2562224400 -21600 1 MDT}
+ {2582784000 -25200 0 MST}
+ {2593674000 -21600 1 MDT}
+ {2614233600 -25200 0 MST}
+ {2625123600 -21600 1 MDT}
+ {2645683200 -25200 0 MST}
+ {2656573200 -21600 1 MDT}
+ {2677132800 -25200 0 MST}
+ {2688627600 -21600 1 MDT}
+ {2709187200 -25200 0 MST}
+ {2720077200 -21600 1 MDT}
+ {2740636800 -25200 0 MST}
+ {2751526800 -21600 1 MDT}
+ {2772086400 -25200 0 MST}
+ {2782976400 -21600 1 MDT}
+ {2803536000 -25200 0 MST}
+ {2814426000 -21600 1 MDT}
+ {2834985600 -25200 0 MST}
+ {2846480400 -21600 1 MDT}
+ {2867040000 -25200 0 MST}
+ {2877930000 -21600 1 MDT}
+ {2898489600 -25200 0 MST}
+ {2909379600 -21600 1 MDT}
+ {2929939200 -25200 0 MST}
+ {2940829200 -21600 1 MDT}
+ {2961388800 -25200 0 MST}
+ {2972278800 -21600 1 MDT}
+ {2992838400 -25200 0 MST}
+ {3003728400 -21600 1 MDT}
+ {3024288000 -25200 0 MST}
+ {3035782800 -21600 1 MDT}
+ {3056342400 -25200 0 MST}
+ {3067232400 -21600 1 MDT}
+ {3087792000 -25200 0 MST}
+ {3098682000 -21600 1 MDT}
+ {3119241600 -25200 0 MST}
+ {3130131600 -21600 1 MDT}
+ {3150691200 -25200 0 MST}
+ {3161581200 -21600 1 MDT}
+ {3182140800 -25200 0 MST}
+ {3193030800 -21600 1 MDT}
+ {3213590400 -25200 0 MST}
+ {3225085200 -21600 1 MDT}
+ {3245644800 -25200 0 MST}
+ {3256534800 -21600 1 MDT}
+ {3277094400 -25200 0 MST}
+ {3287984400 -21600 1 MDT}
+ {3308544000 -25200 0 MST}
+ {3319434000 -21600 1 MDT}
+ {3339993600 -25200 0 MST}
+ {3350883600 -21600 1 MDT}
+ {3371443200 -25200 0 MST}
+ {3382938000 -21600 1 MDT}
+ {3403497600 -25200 0 MST}
+ {3414387600 -21600 1 MDT}
+ {3434947200 -25200 0 MST}
+ {3445837200 -21600 1 MDT}
+ {3466396800 -25200 0 MST}
+ {3477286800 -21600 1 MDT}
+ {3497846400 -25200 0 MST}
+ {3508736400 -21600 1 MDT}
+ {3529296000 -25200 0 MST}
+ {3540186000 -21600 1 MDT}
+ {3560745600 -25200 0 MST}
+ {3572240400 -21600 1 MDT}
+ {3592800000 -25200 0 MST}
+ {3603690000 -21600 1 MDT}
+ {3624249600 -25200 0 MST}
+ {3635139600 -21600 1 MDT}
+ {3655699200 -25200 0 MST}
+ {3666589200 -21600 1 MDT}
+ {3687148800 -25200 0 MST}
+ {3698038800 -21600 1 MDT}
+ {3718598400 -25200 0 MST}
+ {3730093200 -21600 1 MDT}
+ {3750652800 -25200 0 MST}
+ {3761542800 -21600 1 MDT}
+ {3782102400 -25200 0 MST}
+ {3792992400 -21600 1 MDT}
+ {3813552000 -25200 0 MST}
+ {3824442000 -21600 1 MDT}
+ {3845001600 -25200 0 MST}
+ {3855891600 -21600 1 MDT}
+ {3876451200 -25200 0 MST}
+ {3887341200 -21600 1 MDT}
+ {3907900800 -25200 0 MST}
+ {3919395600 -21600 1 MDT}
+ {3939955200 -25200 0 MST}
+ {3950845200 -21600 1 MDT}
+ {3971404800 -25200 0 MST}
+ {3982294800 -21600 1 MDT}
+ {4002854400 -25200 0 MST}
+ {4013744400 -21600 1 MDT}
+ {4034304000 -25200 0 MST}
+ {4045194000 -21600 1 MDT}
+ {4065753600 -25200 0 MST}
+ {4076643600 -21600 1 MDT}
+ {4097203200 -25200 0 MST}
+}
diff --git a/library/tzdata/America/Coyhaique b/library/tzdata/America/Coyhaique
new file mode 100644
index 0000000..4990006
--- /dev/null
+++ b/library/tzdata/America/Coyhaique
@@ -0,0 +1,139 @@
+# created by tools/tclZIC.tcl - do not edit
+
+set TZData(:America/Coyhaique) {
+ {-9223372036854775808 -17296 0 LMT}
+ {-2524504304 -16965 0 SMT}
+ {-1892661435 -18000 0 -0500}
+ {-1688410800 -16965 0 SMT}
+ {-1619205435 -14400 0 -0400}
+ {-1593806400 -16965 0 SMT}
+ {-1335986235 -18000 0 -0500}
+ {-1335985200 -14400 1 -0400}
+ {-1317585600 -18000 0 -0500}
+ {-1304362800 -14400 1 -0400}
+ {-1286049600 -18000 0 -0500}
+ {-1272826800 -14400 1 -0400}
+ {-1254513600 -18000 0 -0500}
+ {-1241290800 -14400 1 -0400}
+ {-1222977600 -18000 0 -0500}
+ {-1209754800 -14400 1 -0400}
+ {-1191355200 -18000 0 -0500}
+ {-1178132400 -14400 0 -0400}
+ {-870552000 -18000 0 -0500}
+ {-865278000 -14400 0 -0400}
+ {-736632000 -14400 1 -0400}
+ {-718056000 -18000 0 -0500}
+ {-713649600 -14400 0 -0400}
+ {-36619200 -10800 1 -0300}
+ {-23922000 -14400 0 -0400}
+ {-3355200 -10800 1 -0300}
+ {7527600 -14400 0 -0400}
+ {24465600 -10800 1 -0300}
+ {37767600 -14400 0 -0400}
+ {55915200 -10800 1 -0300}
+ {69217200 -14400 0 -0400}
+ {87969600 -10800 1 -0300}
+ {100666800 -14400 0 -0400}
+ {118209600 -10800 1 -0300}
+ {132116400 -14400 0 -0400}
+ {150868800 -10800 1 -0300}
+ {163566000 -14400 0 -0400}
+ {182318400 -10800 1 -0300}
+ {195620400 -14400 0 -0400}
+ {213768000 -10800 1 -0300}
+ {227070000 -14400 0 -0400}
+ {245217600 -10800 1 -0300}
+ {258519600 -14400 0 -0400}
+ {277272000 -10800 1 -0300}
+ {289969200 -14400 0 -0400}
+ {308721600 -10800 1 -0300}
+ {321418800 -14400 0 -0400}
+ {340171200 -10800 1 -0300}
+ {353473200 -14400 0 -0400}
+ {371620800 -10800 1 -0300}
+ {384922800 -14400 0 -0400}
+ {403070400 -10800 1 -0300}
+ {416372400 -14400 0 -0400}
+ {434520000 -10800 1 -0300}
+ {447822000 -14400 0 -0400}
+ {466574400 -10800 1 -0300}
+ {479271600 -14400 0 -0400}
+ {498024000 -10800 1 -0300}
+ {510721200 -14400 0 -0400}
+ {529473600 -10800 1 -0300}
+ {545194800 -14400 0 -0400}
+ {560923200 -10800 1 -0300}
+ {574225200 -14400 0 -0400}
+ {592372800 -10800 1 -0300}
+ {605674800 -14400 0 -0400}
+ {624427200 -10800 1 -0300}
+ {637124400 -14400 0 -0400}
+ {653457600 -10800 1 -0300}
+ {668574000 -14400 0 -0400}
+ {687326400 -10800 1 -0300}
+ {700628400 -14400 0 -0400}
+ {718776000 -10800 1 -0300}
+ {732078000 -14400 0 -0400}
+ {750225600 -10800 1 -0300}
+ {763527600 -14400 0 -0400}
+ {781675200 -10800 1 -0300}
+ {794977200 -14400 0 -0400}
+ {813729600 -10800 1 -0300}
+ {826426800 -14400 0 -0400}
+ {845179200 -10800 1 -0300}
+ {859690800 -14400 0 -0400}
+ {876628800 -10800 1 -0300}
+ {889930800 -14400 0 -0400}
+ {906868800 -10800 1 -0300}
+ {923194800 -14400 0 -0400}
+ {939528000 -10800 1 -0300}
+ {952830000 -14400 0 -0400}
+ {971582400 -10800 1 -0300}
+ {984279600 -14400 0 -0400}
+ {1003032000 -10800 1 -0300}
+ {1015729200 -14400 0 -0400}
+ {1034481600 -10800 1 -0300}
+ {1047178800 -14400 0 -0400}
+ {1065931200 -10800 1 -0300}
+ {1079233200 -14400 0 -0400}
+ {1097380800 -10800 1 -0300}
+ {1110682800 -14400 0 -0400}
+ {1128830400 -10800 1 -0300}
+ {1142132400 -14400 0 -0400}
+ {1160884800 -10800 1 -0300}
+ {1173582000 -14400 0 -0400}
+ {1192334400 -10800 1 -0300}
+ {1206846000 -14400 0 -0400}
+ {1223784000 -10800 1 -0300}
+ {1237086000 -14400 0 -0400}
+ {1255233600 -10800 1 -0300}
+ {1270350000 -14400 0 -0400}
+ {1286683200 -10800 1 -0300}
+ {1304823600 -14400 0 -0400}
+ {1313899200 -10800 1 -0300}
+ {1335668400 -14400 0 -0400}
+ {1346558400 -10800 1 -0300}
+ {1367118000 -14400 0 -0400}
+ {1378612800 -10800 1 -0300}
+ {1398567600 -14400 0 -0400}
+ {1410062400 -10800 1 -0300}
+ {1463281200 -14400 0 -0400}
+ {1471147200 -10800 1 -0300}
+ {1494730800 -14400 0 -0400}
+ {1502596800 -10800 1 -0300}
+ {1526180400 -14400 0 -0400}
+ {1534046400 -10800 1 -0300}
+ {1554606000 -14400 0 -0400}
+ {1567915200 -10800 1 -0300}
+ {1586055600 -14400 0 -0400}
+ {1599364800 -10800 1 -0300}
+ {1617505200 -14400 0 -0400}
+ {1630814400 -10800 1 -0300}
+ {1648954800 -14400 0 -0400}
+ {1662868800 -10800 1 -0300}
+ {1680404400 -14400 0 -0400}
+ {1693713600 -10800 1 -0300}
+ {1712458800 -14400 0 -0400}
+ {1725768000 -10800 1 -0300}
+ {1742439600 -10800 0 -0300}
+}
diff --git a/library/tzdata/America/Cuiaba b/library/tzdata/America/Cuiaba
index fd97289..5f35ebf 100644
--- a/library/tzdata/America/Cuiaba
+++ b/library/tzdata/America/Cuiaba
@@ -2,95 +2,95 @@
set TZData(:America/Cuiaba) {
{-9223372036854775808 -13460 0 LMT}
- {-1767212140 -14400 0 -04}
- {-1206954000 -10800 1 -04}
- {-1191358800 -14400 0 -04}
- {-1175371200 -10800 1 -04}
- {-1159822800 -14400 0 -04}
- {-633816000 -10800 1 -04}
- {-622065600 -14400 0 -04}
- {-602280000 -10800 1 -04}
- {-591829200 -14400 0 -04}
- {-570744000 -10800 1 -04}
- {-560206800 -14400 0 -04}
- {-539121600 -10800 1 -04}
- {-531349200 -14400 0 -04}
- {-191361600 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-155160000 -10800 1 -04}
- {-150066000 -14400 0 -04}
- {-128894400 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-99950400 -10800 1 -04}
- {-89586000 -14400 0 -04}
- {-68414400 -10800 1 -04}
- {-57963600 -14400 0 -04}
- {499752000 -10800 1 -04}
- {511239600 -14400 0 -04}
- {530596800 -10800 1 -04}
- {540270000 -14400 0 -04}
- {562132800 -10800 1 -04}
- {571201200 -14400 0 -04}
- {592977600 -10800 1 -04}
- {602046000 -14400 0 -04}
- {624427200 -10800 1 -04}
- {634705200 -14400 0 -04}
- {656481600 -10800 1 -04}
- {666759600 -14400 0 -04}
- {687931200 -10800 1 -04}
- {697604400 -14400 0 -04}
- {719985600 -10800 1 -04}
- {728449200 -14400 0 -04}
- {750830400 -10800 1 -04}
- {761713200 -14400 0 -04}
- {782280000 -10800 1 -04}
- {793162800 -14400 0 -04}
- {813729600 -10800 1 -04}
- {824007600 -14400 0 -04}
- {844574400 -10800 1 -04}
- {856062000 -14400 0 -04}
- {876110400 -10800 1 -04}
- {888721200 -14400 0 -04}
- {908078400 -10800 1 -04}
- {919566000 -14400 0 -04}
- {938923200 -10800 1 -04}
- {951620400 -14400 0 -04}
- {970977600 -10800 1 -04}
- {982465200 -14400 0 -04}
- {1003032000 -10800 1 -04}
- {1013914800 -14400 0 -04}
- {1036296000 -10800 1 -04}
- {1045364400 -14400 0 -04}
- {1064372400 -14400 0 -04}
- {1096603200 -14400 0 -04}
- {1099368000 -10800 1 -04}
- {1108868400 -14400 0 -04}
- {1129435200 -10800 1 -04}
- {1140318000 -14400 0 -04}
- {1162699200 -10800 1 -04}
- {1172372400 -14400 0 -04}
- {1192334400 -10800 1 -04}
- {1203217200 -14400 0 -04}
- {1224388800 -10800 1 -04}
- {1234666800 -14400 0 -04}
- {1255838400 -10800 1 -04}
- {1266721200 -14400 0 -04}
- {1287288000 -10800 1 -04}
- {1298170800 -14400 0 -04}
- {1318737600 -10800 1 -04}
- {1330225200 -14400 0 -04}
- {1350792000 -10800 1 -04}
- {1361070000 -14400 0 -04}
- {1382241600 -10800 1 -04}
- {1392519600 -14400 0 -04}
- {1413691200 -10800 1 -04}
- {1424574000 -14400 0 -04}
- {1445140800 -10800 1 -04}
- {1456023600 -14400 0 -04}
- {1476590400 -10800 1 -04}
- {1487473200 -14400 0 -04}
- {1508040000 -10800 1 -04}
- {1518922800 -14400 0 -04}
- {1541304000 -10800 1 -04}
- {1550372400 -14400 0 -04}
+ {-1767212140 -14400 0 -0400}
+ {-1206954000 -10800 1 -0300}
+ {-1191358800 -14400 0 -0400}
+ {-1175371200 -10800 1 -0300}
+ {-1159822800 -14400 0 -0400}
+ {-633816000 -10800 1 -0300}
+ {-622065600 -14400 0 -0400}
+ {-602280000 -10800 1 -0300}
+ {-591829200 -14400 0 -0400}
+ {-570744000 -10800 1 -0300}
+ {-560206800 -14400 0 -0400}
+ {-539121600 -10800 1 -0300}
+ {-531349200 -14400 0 -0400}
+ {-191361600 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-155160000 -10800 1 -0300}
+ {-150066000 -14400 0 -0400}
+ {-128894400 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-99950400 -10800 1 -0300}
+ {-89586000 -14400 0 -0400}
+ {-68414400 -10800 1 -0300}
+ {-57963600 -14400 0 -0400}
+ {499752000 -10800 1 -0300}
+ {511239600 -14400 0 -0400}
+ {530596800 -10800 1 -0300}
+ {540270000 -14400 0 -0400}
+ {562132800 -10800 1 -0300}
+ {571201200 -14400 0 -0400}
+ {592977600 -10800 1 -0300}
+ {602046000 -14400 0 -0400}
+ {624427200 -10800 1 -0300}
+ {634705200 -14400 0 -0400}
+ {656481600 -10800 1 -0300}
+ {666759600 -14400 0 -0400}
+ {687931200 -10800 1 -0300}
+ {697604400 -14400 0 -0400}
+ {719985600 -10800 1 -0300}
+ {728449200 -14400 0 -0400}
+ {750830400 -10800 1 -0300}
+ {761713200 -14400 0 -0400}
+ {782280000 -10800 1 -0300}
+ {793162800 -14400 0 -0400}
+ {813729600 -10800 1 -0300}
+ {824007600 -14400 0 -0400}
+ {844574400 -10800 1 -0300}
+ {856062000 -14400 0 -0400}
+ {876110400 -10800 1 -0300}
+ {888721200 -14400 0 -0400}
+ {908078400 -10800 1 -0300}
+ {919566000 -14400 0 -0400}
+ {938923200 -10800 1 -0300}
+ {951620400 -14400 0 -0400}
+ {970977600 -10800 1 -0300}
+ {982465200 -14400 0 -0400}
+ {1003032000 -10800 1 -0300}
+ {1013914800 -14400 0 -0400}
+ {1036296000 -10800 1 -0300}
+ {1045364400 -14400 0 -0400}
+ {1064372400 -14400 0 -0400}
+ {1096603200 -14400 0 -0400}
+ {1099368000 -10800 1 -0300}
+ {1108868400 -14400 0 -0400}
+ {1129435200 -10800 1 -0300}
+ {1140318000 -14400 0 -0400}
+ {1162699200 -10800 1 -0300}
+ {1172372400 -14400 0 -0400}
+ {1192334400 -10800 1 -0300}
+ {1203217200 -14400 0 -0400}
+ {1224388800 -10800 1 -0300}
+ {1234666800 -14400 0 -0400}
+ {1255838400 -10800 1 -0300}
+ {1266721200 -14400 0 -0400}
+ {1287288000 -10800 1 -0300}
+ {1298170800 -14400 0 -0400}
+ {1318737600 -10800 1 -0300}
+ {1330225200 -14400 0 -0400}
+ {1350792000 -10800 1 -0300}
+ {1361070000 -14400 0 -0400}
+ {1382241600 -10800 1 -0300}
+ {1392519600 -14400 0 -0400}
+ {1413691200 -10800 1 -0300}
+ {1424574000 -14400 0 -0400}
+ {1445140800 -10800 1 -0300}
+ {1456023600 -14400 0 -0400}
+ {1476590400 -10800 1 -0300}
+ {1487473200 -14400 0 -0400}
+ {1508040000 -10800 1 -0300}
+ {1518922800 -14400 0 -0400}
+ {1541304000 -10800 1 -0300}
+ {1550372400 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Danmarkshavn b/library/tzdata/America/Danmarkshavn
index 4d9d7bb..8c6cae8 100644
--- a/library/tzdata/America/Danmarkshavn
+++ b/library/tzdata/America/Danmarkshavn
@@ -2,38 +2,38 @@
set TZData(:America/Danmarkshavn) {
{-9223372036854775808 -4480 0 LMT}
- {-1686091520 -10800 0 -03}
- {323845200 -7200 0 -02}
- {338950800 -10800 0 -03}
- {354675600 -7200 1 -02}
- {370400400 -10800 0 -03}
- {386125200 -7200 1 -02}
- {401850000 -10800 0 -03}
- {417574800 -7200 1 -02}
- {433299600 -10800 0 -03}
- {449024400 -7200 1 -02}
- {465354000 -10800 0 -03}
- {481078800 -7200 1 -02}
- {496803600 -10800 0 -03}
- {512528400 -7200 1 -02}
- {528253200 -10800 0 -03}
- {543978000 -7200 1 -02}
- {559702800 -10800 0 -03}
- {575427600 -7200 1 -02}
- {591152400 -10800 0 -03}
- {606877200 -7200 1 -02}
- {622602000 -10800 0 -03}
- {638326800 -7200 1 -02}
- {654656400 -10800 0 -03}
- {670381200 -7200 1 -02}
- {686106000 -10800 0 -03}
- {701830800 -7200 1 -02}
- {717555600 -10800 0 -03}
- {733280400 -7200 1 -02}
- {749005200 -10800 0 -03}
- {764730000 -7200 1 -02}
- {780454800 -10800 0 -03}
- {796179600 -7200 1 -02}
- {811904400 -10800 0 -03}
+ {-1686091520 -10800 0 -0300}
+ {323845200 -7200 0 -0200}
+ {338950800 -10800 0 -0300}
+ {354675600 -7200 1 -0200}
+ {370400400 -10800 0 -0300}
+ {386125200 -7200 1 -0200}
+ {401850000 -10800 0 -0300}
+ {417574800 -7200 1 -0200}
+ {433299600 -10800 0 -0300}
+ {449024400 -7200 1 -0200}
+ {465354000 -10800 0 -0300}
+ {481078800 -7200 1 -0200}
+ {496803600 -10800 0 -0300}
+ {512528400 -7200 1 -0200}
+ {528253200 -10800 0 -0300}
+ {543978000 -7200 1 -0200}
+ {559702800 -10800 0 -0300}
+ {575427600 -7200 1 -0200}
+ {591152400 -10800 0 -0300}
+ {606877200 -7200 1 -0200}
+ {622602000 -10800 0 -0300}
+ {638326800 -7200 1 -0200}
+ {654656400 -10800 0 -0300}
+ {670381200 -7200 1 -0200}
+ {686106000 -10800 0 -0300}
+ {701830800 -7200 1 -0200}
+ {717555600 -10800 0 -0300}
+ {733280400 -7200 1 -0200}
+ {749005200 -10800 0 -0300}
+ {764730000 -7200 1 -0200}
+ {780454800 -10800 0 -0300}
+ {796179600 -7200 1 -0200}
+ {811904400 -10800 0 -0300}
{820465200 0 0 GMT}
}
diff --git a/library/tzdata/America/Dawson b/library/tzdata/America/Dawson
index c8e3f26..62b0654 100644
--- a/library/tzdata/America/Dawson
+++ b/library/tzdata/America/Dawson
@@ -10,8 +10,10 @@ set TZData(:America/Dawson) {
{-880203600 -28800 1 YWT}
{-769395600 -28800 1 YPT}
{-765381600 -32400 0 YST}
+ {-157734000 -32400 0 YST}
{-147884400 -25200 1 YDDT}
{-131554800 -32400 0 YST}
+ {120646800 -28800 0 PST}
{315561600 -28800 0 PST}
{325677600 -25200 1 PDT}
{341398800 -28800 0 PST}
diff --git a/library/tzdata/America/Eirunepe b/library/tzdata/America/Eirunepe
index a81b09e..a7f8297 100644
--- a/library/tzdata/America/Eirunepe
+++ b/library/tzdata/America/Eirunepe
@@ -2,40 +2,40 @@
set TZData(:America/Eirunepe) {
{-9223372036854775808 -16768 0 LMT}
- {-1767208832 -18000 0 -05}
- {-1206950400 -14400 1 -05}
- {-1191355200 -18000 0 -05}
- {-1175367600 -14400 1 -05}
- {-1159819200 -18000 0 -05}
- {-633812400 -14400 1 -05}
- {-622062000 -18000 0 -05}
- {-602276400 -14400 1 -05}
- {-591825600 -18000 0 -05}
- {-570740400 -14400 1 -05}
- {-560203200 -18000 0 -05}
- {-539118000 -14400 1 -05}
- {-531345600 -18000 0 -05}
- {-191358000 -14400 1 -05}
- {-184190400 -18000 0 -05}
- {-155156400 -14400 1 -05}
- {-150062400 -18000 0 -05}
- {-128890800 -14400 1 -05}
- {-121118400 -18000 0 -05}
- {-99946800 -14400 1 -05}
- {-89582400 -18000 0 -05}
- {-68410800 -14400 1 -05}
- {-57960000 -18000 0 -05}
- {499755600 -14400 1 -05}
- {511243200 -18000 0 -05}
- {530600400 -14400 1 -05}
- {540273600 -18000 0 -05}
- {562136400 -14400 1 -05}
- {571204800 -18000 0 -05}
- {590040000 -18000 0 -05}
- {749192400 -18000 0 -05}
- {750834000 -14400 1 -05}
- {761716800 -18000 0 -05}
- {780206400 -18000 0 -05}
- {1214283600 -14400 0 -04}
- {1384056000 -18000 0 -05}
+ {-1767208832 -18000 0 -0500}
+ {-1206950400 -14400 1 -0400}
+ {-1191355200 -18000 0 -0500}
+ {-1175367600 -14400 1 -0400}
+ {-1159819200 -18000 0 -0500}
+ {-633812400 -14400 1 -0400}
+ {-622062000 -18000 0 -0500}
+ {-602276400 -14400 1 -0400}
+ {-591825600 -18000 0 -0500}
+ {-570740400 -14400 1 -0400}
+ {-560203200 -18000 0 -0500}
+ {-539118000 -14400 1 -0400}
+ {-531345600 -18000 0 -0500}
+ {-191358000 -14400 1 -0400}
+ {-184190400 -18000 0 -0500}
+ {-155156400 -14400 1 -0400}
+ {-150062400 -18000 0 -0500}
+ {-128890800 -14400 1 -0400}
+ {-121118400 -18000 0 -0500}
+ {-99946800 -14400 1 -0400}
+ {-89582400 -18000 0 -0500}
+ {-68410800 -14400 1 -0400}
+ {-57960000 -18000 0 -0500}
+ {499755600 -14400 1 -0400}
+ {511243200 -18000 0 -0500}
+ {530600400 -14400 1 -0400}
+ {540273600 -18000 0 -0500}
+ {562136400 -14400 1 -0400}
+ {571204800 -18000 0 -0500}
+ {590040000 -18000 0 -0500}
+ {749192400 -18000 0 -0500}
+ {750834000 -14400 1 -0400}
+ {761716800 -18000 0 -0500}
+ {780206400 -18000 0 -0500}
+ {1214283600 -14400 0 -0400}
+ {1384056000 -18000 0 -0500}
}
diff --git a/library/tzdata/America/Fortaleza b/library/tzdata/America/Fortaleza
index bd806f1..e9b89e9 100644
--- a/library/tzdata/America/Fortaleza
+++ b/library/tzdata/America/Fortaleza
@@ -2,47 +2,47 @@
set TZData(:America/Fortaleza) {
{-9223372036854775808 -9240 0 LMT}
- {-1767216360 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-191365200 -7200 1 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {592974000 -7200 1 -03}
- {602042400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {634701600 -10800 0 -03}
- {653536800 -10800 0 -03}
- {938660400 -10800 0 -03}
- {938919600 -7200 1 -03}
- {951616800 -10800 0 -03}
- {970974000 -7200 1 -03}
- {972180000 -10800 0 -03}
- {1000350000 -10800 0 -03}
- {1003028400 -7200 1 -03}
- {1013911200 -10800 0 -03}
- {1033437600 -10800 0 -03}
+ {-1767216360 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-191365200 -7200 1 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {592974000 -7200 1 -0200}
+ {602042400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {634701600 -10800 0 -0300}
+ {653536800 -10800 0 -0300}
+ {938660400 -10800 0 -0300}
+ {938919600 -7200 1 -0200}
+ {951616800 -10800 0 -0300}
+ {970974000 -7200 1 -0200}
+ {972180000 -10800 0 -0300}
+ {1000350000 -10800 0 -0300}
+ {1003028400 -7200 1 -0200}
+ {1013911200 -10800 0 -0300}
+ {1033437600 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Guayaquil b/library/tzdata/America/Guayaquil
index 6ba7b93..6e296d0 100644
--- a/library/tzdata/America/Guayaquil
+++ b/library/tzdata/America/Guayaquil
@@ -3,7 +3,7 @@
set TZData(:America/Guayaquil) {
{-9223372036854775808 -19160 0 LMT}
{-2524502440 -18840 0 QMT}
- {-1230749160 -18000 0 -05}
- {722926800 -14400 1 -05}
- {728884800 -18000 0 -05}
+ {-1230749160 -18000 0 -0500}
+ {722926800 -14400 1 -0400}
+ {728884800 -18000 0 -0500}
}
diff --git a/library/tzdata/America/Guyana b/library/tzdata/America/Guyana
index 4e2b5f4..841d27d 100644
--- a/library/tzdata/America/Guyana
+++ b/library/tzdata/America/Guyana
@@ -2,8 +2,8 @@
set TZData(:America/Guyana) {
{-9223372036854775808 -13959 0 LMT}
- {-1843589241 -14400 0 -04}
- {-1730577600 -13500 0 -0345}
- {176096700 -10800 0 -03}
- {701841600 -14400 0 -04}
+ {-1843589241 -14400 0 -0400}
+ {-1730577600 -13500 0 -0445}
+ {176096700 -10800 0 -0300}
+ {701841600 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Hermosillo b/library/tzdata/America/Hermosillo
index 6576ad1..cc15559 100644
--- a/library/tzdata/America/Hermosillo
+++ b/library/tzdata/America/Hermosillo
@@ -3,14 +3,13 @@
set TZData(:America/Hermosillo) {
{-9223372036854775808 -26632 0 LMT}
{-1514739600 -25200 0 MST}
- {-1343066400 -21600 0 CST}
+ {-1343149200 -21600 0 CST}
{-1234807200 -25200 0 MST}
- {-1220292000 -21600 1 MDT}
+ {-1220461200 -21600 1 MDT}
{-1207159200 -25200 0 MST}
{-1191344400 -21600 0 CST}
{-873828000 -25200 0 MST}
- {-661539600 -28800 0 PST}
- {28800 -25200 0 MST}
+ {820479600 -25200 0 MST}
{828867600 -21600 1 MDT}
{846403200 -25200 0 MST}
{860317200 -21600 1 MDT}
diff --git a/library/tzdata/America/Inuvik b/library/tzdata/America/Inuvik
index 08f0fd6..84231f8 100644
--- a/library/tzdata/America/Inuvik
+++ b/library/tzdata/America/Inuvik
@@ -3,8 +3,22 @@
set TZData(:America/Inuvik) {
{-9223372036854775808 0 0 -00}
{-536457600 -28800 0 PST}
- {-147888000 -21600 1 PDDT}
- {-131558400 -28800 0 PST}
+ {73476000 -25200 1 PDT}
+ {89197200 -28800 0 PST}
+ {104925600 -25200 1 PDT}
+ {120646800 -28800 0 PST}
+ {136375200 -25200 1 PDT}
+ {152096400 -28800 0 PST}
+ {167824800 -25200 1 PDT}
+ {183546000 -28800 0 PST}
+ {199274400 -25200 1 PDT}
+ {215600400 -28800 0 PST}
+ {230724000 -25200 1 PDT}
+ {247050000 -28800 0 PST}
+ {262778400 -25200 1 PDT}
+ {278499600 -28800 0 PST}
+ {294228000 -21600 0 MDT}
+ {309945600 -25200 0 MST}
{315558000 -25200 0 MST}
{325674000 -21600 1 MDT}
{341395200 -25200 0 MST}
diff --git a/library/tzdata/America/Iqaluit b/library/tzdata/America/Iqaluit
index ff82866..413a548 100644
--- a/library/tzdata/America/Iqaluit
+++ b/library/tzdata/America/Iqaluit
@@ -5,8 +5,22 @@ set TZData(:America/Iqaluit) {
{-865296000 -14400 0 EWT}
{-769395600 -14400 1 EPT}
{-765396000 -18000 0 EST}
- {-147898800 -10800 1 EDDT}
- {-131569200 -18000 0 EST}
+ {73465200 -14400 1 EDT}
+ {89186400 -18000 0 EST}
+ {104914800 -14400 1 EDT}
+ {120636000 -18000 0 EST}
+ {136364400 -14400 1 EDT}
+ {152085600 -18000 0 EST}
+ {167814000 -14400 1 EDT}
+ {183535200 -18000 0 EST}
+ {199263600 -14400 1 EDT}
+ {215589600 -18000 0 EST}
+ {230713200 -14400 1 EDT}
+ {247039200 -18000 0 EST}
+ {262767600 -14400 1 EDT}
+ {278488800 -18000 0 EST}
+ {294217200 -14400 1 EDT}
+ {309938400 -18000 0 EST}
{325666800 -14400 1 EDT}
{341388000 -18000 0 EST}
{357116400 -14400 1 EDT}
diff --git a/library/tzdata/America/La_Paz b/library/tzdata/America/La_Paz
index ea2f711..0215a8a 100644
--- a/library/tzdata/America/La_Paz
+++ b/library/tzdata/America/La_Paz
@@ -4,5 +4,5 @@ set TZData(:America/La_Paz) {
{-9223372036854775808 -16356 0 LMT}
{-2524505244 -16356 0 CMT}
{-1205954844 -12756 1 BST}
- {-1192307244 -14400 0 -04}
+ {-1192307244 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Lima b/library/tzdata/America/Lima
index e8b69d6..157af17 100644
--- a/library/tzdata/America/Lima
+++ b/library/tzdata/America/Lima
@@ -3,14 +3,14 @@
set TZData(:America/Lima) {
{-9223372036854775808 -18492 0 LMT}
{-2524503108 -18516 0 LMT}
- {-1938538284 -14400 0 -05}
- {-1002052800 -18000 0 -05}
- {-986756400 -14400 1 -05}
- {-971035200 -18000 0 -05}
- {-955306800 -14400 1 -05}
- {-939585600 -18000 0 -05}
- {512712000 -18000 0 -05}
- {544248000 -18000 0 -05}
- {638942400 -18000 0 -05}
- {765172800 -18000 0 -05}
+ {-1938538284 -14400 0 -0400}
+ {-1002052800 -18000 0 -0500}
+ {-986756400 -14400 1 -0400}
+ {-971035200 -18000 0 -0500}
+ {-955306800 -14400 1 -0400}
+ {-939585600 -18000 0 -0500}
+ {512712000 -18000 0 -0500}
+ {544248000 -18000 0 -0500}
+ {638942400 -18000 0 -0500}
+ {765172800 -18000 0 -0500}
}
diff --git a/library/tzdata/America/Maceio b/library/tzdata/America/Maceio
index eab534e..79526b6 100644
--- a/library/tzdata/America/Maceio
+++ b/library/tzdata/America/Maceio
@@ -2,51 +2,51 @@
set TZData(:America/Maceio) {
{-9223372036854775808 -8572 0 LMT}
- {-1767217028 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-191365200 -7200 1 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {592974000 -7200 1 -03}
- {602042400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {634701600 -10800 0 -03}
- {653536800 -10800 0 -03}
- {813553200 -10800 0 -03}
- {813726000 -7200 1 -03}
- {824004000 -10800 0 -03}
- {841802400 -10800 0 -03}
- {938660400 -10800 0 -03}
- {938919600 -7200 1 -03}
- {951616800 -10800 0 -03}
- {970974000 -7200 1 -03}
- {972180000 -10800 0 -03}
- {1000350000 -10800 0 -03}
- {1003028400 -7200 1 -03}
- {1013911200 -10800 0 -03}
- {1033437600 -10800 0 -03}
+ {-1767217028 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-191365200 -7200 1 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {592974000 -7200 1 -0200}
+ {602042400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {634701600 -10800 0 -0300}
+ {653536800 -10800 0 -0300}
+ {813553200 -10800 0 -0300}
+ {813726000 -7200 1 -0200}
+ {824004000 -10800 0 -0300}
+ {841802400 -10800 0 -0300}
+ {938660400 -10800 0 -0300}
+ {938919600 -7200 1 -0200}
+ {951616800 -10800 0 -0300}
+ {970974000 -7200 1 -0200}
+ {972180000 -10800 0 -0300}
+ {1000350000 -10800 0 -0300}
+ {1003028400 -7200 1 -0200}
+ {1013911200 -10800 0 -0300}
+ {1033437600 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Manaus b/library/tzdata/America/Manaus
index a855062..f02ae02 100644
--- a/library/tzdata/America/Manaus
+++ b/library/tzdata/America/Manaus
@@ -2,38 +2,38 @@
set TZData(:America/Manaus) {
{-9223372036854775808 -14404 0 LMT}
- {-1767211196 -14400 0 -04}
- {-1206954000 -10800 1 -04}
- {-1191358800 -14400 0 -04}
- {-1175371200 -10800 1 -04}
- {-1159822800 -14400 0 -04}
- {-633816000 -10800 1 -04}
- {-622065600 -14400 0 -04}
- {-602280000 -10800 1 -04}
- {-591829200 -14400 0 -04}
- {-570744000 -10800 1 -04}
- {-560206800 -14400 0 -04}
- {-539121600 -10800 1 -04}
- {-531349200 -14400 0 -04}
- {-191361600 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-155160000 -10800 1 -04}
- {-150066000 -14400 0 -04}
- {-128894400 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-99950400 -10800 1 -04}
- {-89586000 -14400 0 -04}
- {-68414400 -10800 1 -04}
- {-57963600 -14400 0 -04}
- {499752000 -10800 1 -04}
- {511239600 -14400 0 -04}
- {530596800 -10800 1 -04}
- {540270000 -14400 0 -04}
- {562132800 -10800 1 -04}
- {571201200 -14400 0 -04}
- {590036400 -14400 0 -04}
- {749188800 -14400 0 -04}
- {750830400 -10800 1 -04}
- {761713200 -14400 0 -04}
- {780202800 -14400 0 -04}
+ {-1767211196 -14400 0 -0400}
+ {-1206954000 -10800 1 -0300}
+ {-1191358800 -14400 0 -0400}
+ {-1175371200 -10800 1 -0300}
+ {-1159822800 -14400 0 -0400}
+ {-633816000 -10800 1 -0300}
+ {-622065600 -14400 0 -0400}
+ {-602280000 -10800 1 -0300}
+ {-591829200 -14400 0 -0400}
+ {-570744000 -10800 1 -0300}
+ {-560206800 -14400 0 -0400}
+ {-539121600 -10800 1 -0300}
+ {-531349200 -14400 0 -0400}
+ {-191361600 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-155160000 -10800 1 -0300}
+ {-150066000 -14400 0 -0400}
+ {-128894400 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-99950400 -10800 1 -0300}
+ {-89586000 -14400 0 -0400}
+ {-68414400 -10800 1 -0300}
+ {-57963600 -14400 0 -0400}
+ {499752000 -10800 1 -0300}
+ {511239600 -14400 0 -0400}
+ {530596800 -10800 1 -0300}
+ {540270000 -14400 0 -0400}
+ {562132800 -10800 1 -0300}
+ {571201200 -14400 0 -0400}
+ {590036400 -14400 0 -0400}
+ {749188800 -14400 0 -0400}
+ {750830400 -10800 1 -0300}
+ {761713200 -14400 0 -0400}
+ {780202800 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Mazatlan b/library/tzdata/America/Mazatlan
index 5547d3f..c8586f9 100644
--- a/library/tzdata/America/Mazatlan
+++ b/library/tzdata/America/Mazatlan
@@ -3,14 +3,13 @@
set TZData(:America/Mazatlan) {
{-9223372036854775808 -25540 0 LMT}
{-1514739600 -25200 0 MST}
- {-1343066400 -21600 0 CST}
+ {-1343149200 -21600 0 CST}
{-1234807200 -25200 0 MST}
- {-1220292000 -21600 1 MDT}
+ {-1220461200 -21600 1 MDT}
{-1207159200 -25200 0 MST}
{-1191344400 -21600 0 CST}
{-873828000 -25200 0 MST}
- {-661539600 -28800 0 PST}
- {28800 -25200 0 MST}
+ {25200 -25200 0 MST}
{828867600 -21600 1 MDT}
{846403200 -25200 0 MST}
{860317200 -21600 1 MDT}
@@ -65,158 +64,4 @@ set TZData(:America/Mazatlan) {
{1635667200 -25200 0 MST}
{1648976400 -21600 1 MDT}
{1667116800 -25200 0 MST}
- {1680426000 -21600 1 MDT}
- {1698566400 -25200 0 MST}
- {1712480400 -21600 1 MDT}
- {1730016000 -25200 0 MST}
- {1743930000 -21600 1 MDT}
- {1761465600 -25200 0 MST}
- {1775379600 -21600 1 MDT}
- {1792915200 -25200 0 MST}
- {1806829200 -21600 1 MDT}
- {1824969600 -25200 0 MST}
- {1838278800 -21600 1 MDT}
- {1856419200 -25200 0 MST}
- {1869728400 -21600 1 MDT}
- {1887868800 -25200 0 MST}
- {1901782800 -21600 1 MDT}
- {1919318400 -25200 0 MST}
- {1933232400 -21600 1 MDT}
- {1950768000 -25200 0 MST}
- {1964682000 -21600 1 MDT}
- {1982822400 -25200 0 MST}
- {1996131600 -21600 1 MDT}
- {2014272000 -25200 0 MST}
- {2027581200 -21600 1 MDT}
- {2045721600 -25200 0 MST}
- {2059030800 -21600 1 MDT}
- {2077171200 -25200 0 MST}
- {2091085200 -21600 1 MDT}
- {2108620800 -25200 0 MST}
- {2122534800 -21600 1 MDT}
- {2140070400 -25200 0 MST}
- {2153984400 -21600 1 MDT}
- {2172124800 -25200 0 MST}
- {2185434000 -21600 1 MDT}
- {2203574400 -25200 0 MST}
- {2216883600 -21600 1 MDT}
- {2235024000 -25200 0 MST}
- {2248938000 -21600 1 MDT}
- {2266473600 -25200 0 MST}
- {2280387600 -21600 1 MDT}
- {2297923200 -25200 0 MST}
- {2311837200 -21600 1 MDT}
- {2329372800 -25200 0 MST}
- {2343286800 -21600 1 MDT}
- {2361427200 -25200 0 MST}
- {2374736400 -21600 1 MDT}
- {2392876800 -25200 0 MST}
- {2406186000 -21600 1 MDT}
- {2424326400 -25200 0 MST}
- {2438240400 -21600 1 MDT}
- {2455776000 -25200 0 MST}
- {2469690000 -21600 1 MDT}
- {2487225600 -25200 0 MST}
- {2501139600 -21600 1 MDT}
- {2519280000 -25200 0 MST}
- {2532589200 -21600 1 MDT}
- {2550729600 -25200 0 MST}
- {2564038800 -21600 1 MDT}
- {2582179200 -25200 0 MST}
- {2596093200 -21600 1 MDT}
- {2613628800 -25200 0 MST}
- {2627542800 -21600 1 MDT}
- {2645078400 -25200 0 MST}
- {2658992400 -21600 1 MDT}
- {2676528000 -25200 0 MST}
- {2690442000 -21600 1 MDT}
- {2708582400 -25200 0 MST}
- {2721891600 -21600 1 MDT}
- {2740032000 -25200 0 MST}
- {2753341200 -21600 1 MDT}
- {2771481600 -25200 0 MST}
- {2785395600 -21600 1 MDT}
- {2802931200 -25200 0 MST}
- {2816845200 -21600 1 MDT}
- {2834380800 -25200 0 MST}
- {2848294800 -21600 1 MDT}
- {2866435200 -25200 0 MST}
- {2879744400 -21600 1 MDT}
- {2897884800 -25200 0 MST}
- {2911194000 -21600 1 MDT}
- {2929334400 -25200 0 MST}
- {2942643600 -21600 1 MDT}
- {2960784000 -25200 0 MST}
- {2974698000 -21600 1 MDT}
- {2992233600 -25200 0 MST}
- {3006147600 -21600 1 MDT}
- {3023683200 -25200 0 MST}
- {3037597200 -21600 1 MDT}
- {3055737600 -25200 0 MST}
- {3069046800 -21600 1 MDT}
- {3087187200 -25200 0 MST}
- {3100496400 -21600 1 MDT}
- {3118636800 -25200 0 MST}
- {3132550800 -21600 1 MDT}
- {3150086400 -25200 0 MST}
- {3164000400 -21600 1 MDT}
- {3181536000 -25200 0 MST}
- {3195450000 -21600 1 MDT}
- {3212985600 -25200 0 MST}
- {3226899600 -21600 1 MDT}
- {3245040000 -25200 0 MST}
- {3258349200 -21600 1 MDT}
- {3276489600 -25200 0 MST}
- {3289798800 -21600 1 MDT}
- {3307939200 -25200 0 MST}
- {3321853200 -21600 1 MDT}
- {3339388800 -25200 0 MST}
- {3353302800 -21600 1 MDT}
- {3370838400 -25200 0 MST}
- {3384752400 -21600 1 MDT}
- {3402892800 -25200 0 MST}
- {3416202000 -21600 1 MDT}
- {3434342400 -25200 0 MST}
- {3447651600 -21600 1 MDT}
- {3465792000 -25200 0 MST}
- {3479706000 -21600 1 MDT}
- {3497241600 -25200 0 MST}
- {3511155600 -21600 1 MDT}
- {3528691200 -25200 0 MST}
- {3542605200 -21600 1 MDT}
- {3560140800 -25200 0 MST}
- {3574054800 -21600 1 MDT}
- {3592195200 -25200 0 MST}
- {3605504400 -21600 1 MDT}
- {3623644800 -25200 0 MST}
- {3636954000 -21600 1 MDT}
- {3655094400 -25200 0 MST}
- {3669008400 -21600 1 MDT}
- {3686544000 -25200 0 MST}
- {3700458000 -21600 1 MDT}
- {3717993600 -25200 0 MST}
- {3731907600 -21600 1 MDT}
- {3750048000 -25200 0 MST}
- {3763357200 -21600 1 MDT}
- {3781497600 -25200 0 MST}
- {3794806800 -21600 1 MDT}
- {3812947200 -25200 0 MST}
- {3826256400 -21600 1 MDT}
- {3844396800 -25200 0 MST}
- {3858310800 -21600 1 MDT}
- {3875846400 -25200 0 MST}
- {3889760400 -21600 1 MDT}
- {3907296000 -25200 0 MST}
- {3921210000 -21600 1 MDT}
- {3939350400 -25200 0 MST}
- {3952659600 -21600 1 MDT}
- {3970800000 -25200 0 MST}
- {3984109200 -21600 1 MDT}
- {4002249600 -25200 0 MST}
- {4016163600 -21600 1 MDT}
- {4033699200 -25200 0 MST}
- {4047613200 -21600 1 MDT}
- {4065148800 -25200 0 MST}
- {4079062800 -21600 1 MDT}
- {4096598400 -25200 0 MST}
}
diff --git a/library/tzdata/America/Merida b/library/tzdata/America/Merida
index ebf5927..96c4f93 100644
--- a/library/tzdata/America/Merida
+++ b/library/tzdata/America/Merida
@@ -3,8 +3,8 @@
set TZData(:America/Merida) {
{-9223372036854775808 -21508 0 LMT}
{-1514743200 -21600 0 CST}
- {377935200 -18000 0 EST}
- {407653200 -21600 0 CST}
+ {378201600 -18000 0 EST}
+ {405068400 -21600 0 CST}
{828864000 -18000 1 CDT}
{846399600 -21600 0 CST}
{860313600 -18000 1 CDT}
@@ -59,158 +59,4 @@ set TZData(:America/Merida) {
{1635663600 -21600 0 CST}
{1648972800 -18000 1 CDT}
{1667113200 -21600 0 CST}
- {1680422400 -18000 1 CDT}
- {1698562800 -21600 0 CST}
- {1712476800 -18000 1 CDT}
- {1730012400 -21600 0 CST}
- {1743926400 -18000 1 CDT}
- {1761462000 -21600 0 CST}
- {1775376000 -18000 1 CDT}
- {1792911600 -21600 0 CST}
- {1806825600 -18000 1 CDT}
- {1824966000 -21600 0 CST}
- {1838275200 -18000 1 CDT}
- {1856415600 -21600 0 CST}
- {1869724800 -18000 1 CDT}
- {1887865200 -21600 0 CST}
- {1901779200 -18000 1 CDT}
- {1919314800 -21600 0 CST}
- {1933228800 -18000 1 CDT}
- {1950764400 -21600 0 CST}
- {1964678400 -18000 1 CDT}
- {1982818800 -21600 0 CST}
- {1996128000 -18000 1 CDT}
- {2014268400 -21600 0 CST}
- {2027577600 -18000 1 CDT}
- {2045718000 -21600 0 CST}
- {2059027200 -18000 1 CDT}
- {2077167600 -21600 0 CST}
- {2091081600 -18000 1 CDT}
- {2108617200 -21600 0 CST}
- {2122531200 -18000 1 CDT}
- {2140066800 -21600 0 CST}
- {2153980800 -18000 1 CDT}
- {2172121200 -21600 0 CST}
- {2185430400 -18000 1 CDT}
- {2203570800 -21600 0 CST}
- {2216880000 -18000 1 CDT}
- {2235020400 -21600 0 CST}
- {2248934400 -18000 1 CDT}
- {2266470000 -21600 0 CST}
- {2280384000 -18000 1 CDT}
- {2297919600 -21600 0 CST}
- {2311833600 -18000 1 CDT}
- {2329369200 -21600 0 CST}
- {2343283200 -18000 1 CDT}
- {2361423600 -21600 0 CST}
- {2374732800 -18000 1 CDT}
- {2392873200 -21600 0 CST}
- {2406182400 -18000 1 CDT}
- {2424322800 -21600 0 CST}
- {2438236800 -18000 1 CDT}
- {2455772400 -21600 0 CST}
- {2469686400 -18000 1 CDT}
- {2487222000 -21600 0 CST}
- {2501136000 -18000 1 CDT}
- {2519276400 -21600 0 CST}
- {2532585600 -18000 1 CDT}
- {2550726000 -21600 0 CST}
- {2564035200 -18000 1 CDT}
- {2582175600 -21600 0 CST}
- {2596089600 -18000 1 CDT}
- {2613625200 -21600 0 CST}
- {2627539200 -18000 1 CDT}
- {2645074800 -21600 0 CST}
- {2658988800 -18000 1 CDT}
- {2676524400 -21600 0 CST}
- {2690438400 -18000 1 CDT}
- {2708578800 -21600 0 CST}
- {2721888000 -18000 1 CDT}
- {2740028400 -21600 0 CST}
- {2753337600 -18000 1 CDT}
- {2771478000 -21600 0 CST}
- {2785392000 -18000 1 CDT}
- {2802927600 -21600 0 CST}
- {2816841600 -18000 1 CDT}
- {2834377200 -21600 0 CST}
- {2848291200 -18000 1 CDT}
- {2866431600 -21600 0 CST}
- {2879740800 -18000 1 CDT}
- {2897881200 -21600 0 CST}
- {2911190400 -18000 1 CDT}
- {2929330800 -21600 0 CST}
- {2942640000 -18000 1 CDT}
- {2960780400 -21600 0 CST}
- {2974694400 -18000 1 CDT}
- {2992230000 -21600 0 CST}
- {3006144000 -18000 1 CDT}
- {3023679600 -21600 0 CST}
- {3037593600 -18000 1 CDT}
- {3055734000 -21600 0 CST}
- {3069043200 -18000 1 CDT}
- {3087183600 -21600 0 CST}
- {3100492800 -18000 1 CDT}
- {3118633200 -21600 0 CST}
- {3132547200 -18000 1 CDT}
- {3150082800 -21600 0 CST}
- {3163996800 -18000 1 CDT}
- {3181532400 -21600 0 CST}
- {3195446400 -18000 1 CDT}
- {3212982000 -21600 0 CST}
- {3226896000 -18000 1 CDT}
- {3245036400 -21600 0 CST}
- {3258345600 -18000 1 CDT}
- {3276486000 -21600 0 CST}
- {3289795200 -18000 1 CDT}
- {3307935600 -21600 0 CST}
- {3321849600 -18000 1 CDT}
- {3339385200 -21600 0 CST}
- {3353299200 -18000 1 CDT}
- {3370834800 -21600 0 CST}
- {3384748800 -18000 1 CDT}
- {3402889200 -21600 0 CST}
- {3416198400 -18000 1 CDT}
- {3434338800 -21600 0 CST}
- {3447648000 -18000 1 CDT}
- {3465788400 -21600 0 CST}
- {3479702400 -18000 1 CDT}
- {3497238000 -21600 0 CST}
- {3511152000 -18000 1 CDT}
- {3528687600 -21600 0 CST}
- {3542601600 -18000 1 CDT}
- {3560137200 -21600 0 CST}
- {3574051200 -18000 1 CDT}
- {3592191600 -21600 0 CST}
- {3605500800 -18000 1 CDT}
- {3623641200 -21600 0 CST}
- {3636950400 -18000 1 CDT}
- {3655090800 -21600 0 CST}
- {3669004800 -18000 1 CDT}
- {3686540400 -21600 0 CST}
- {3700454400 -18000 1 CDT}
- {3717990000 -21600 0 CST}
- {3731904000 -18000 1 CDT}
- {3750044400 -21600 0 CST}
- {3763353600 -18000 1 CDT}
- {3781494000 -21600 0 CST}
- {3794803200 -18000 1 CDT}
- {3812943600 -21600 0 CST}
- {3826252800 -18000 1 CDT}
- {3844393200 -21600 0 CST}
- {3858307200 -18000 1 CDT}
- {3875842800 -21600 0 CST}
- {3889756800 -18000 1 CDT}
- {3907292400 -21600 0 CST}
- {3921206400 -18000 1 CDT}
- {3939346800 -21600 0 CST}
- {3952656000 -18000 1 CDT}
- {3970796400 -21600 0 CST}
- {3984105600 -18000 1 CDT}
- {4002246000 -21600 0 CST}
- {4016160000 -18000 1 CDT}
- {4033695600 -21600 0 CST}
- {4047609600 -18000 1 CDT}
- {4065145200 -21600 0 CST}
- {4079059200 -18000 1 CDT}
- {4096594800 -21600 0 CST}
}
diff --git a/library/tzdata/America/Mexico_City b/library/tzdata/America/Mexico_City
index 66e273f..3aefbd7 100644
--- a/library/tzdata/America/Mexico_City
+++ b/library/tzdata/America/Mexico_City
@@ -3,9 +3,9 @@
set TZData(:America/Mexico_City) {
{-9223372036854775808 -23796 0 LMT}
{-1514739600 -25200 0 MST}
- {-1343066400 -21600 0 CST}
+ {-1343149200 -21600 0 CST}
{-1234807200 -25200 0 MST}
- {-1220292000 -21600 1 MDT}
+ {-1220461200 -21600 1 MDT}
{-1207159200 -25200 0 MST}
{-1191344400 -21600 0 CST}
{-975261600 -18000 1 CDT}
@@ -71,158 +71,4 @@ set TZData(:America/Mexico_City) {
{1635663600 -21600 0 CST}
{1648972800 -18000 1 CDT}
{1667113200 -21600 0 CST}
- {1680422400 -18000 1 CDT}
- {1698562800 -21600 0 CST}
- {1712476800 -18000 1 CDT}
- {1730012400 -21600 0 CST}
- {1743926400 -18000 1 CDT}
- {1761462000 -21600 0 CST}
- {1775376000 -18000 1 CDT}
- {1792911600 -21600 0 CST}
- {1806825600 -18000 1 CDT}
- {1824966000 -21600 0 CST}
- {1838275200 -18000 1 CDT}
- {1856415600 -21600 0 CST}
- {1869724800 -18000 1 CDT}
- {1887865200 -21600 0 CST}
- {1901779200 -18000 1 CDT}
- {1919314800 -21600 0 CST}
- {1933228800 -18000 1 CDT}
- {1950764400 -21600 0 CST}
- {1964678400 -18000 1 CDT}
- {1982818800 -21600 0 CST}
- {1996128000 -18000 1 CDT}
- {2014268400 -21600 0 CST}
- {2027577600 -18000 1 CDT}
- {2045718000 -21600 0 CST}
- {2059027200 -18000 1 CDT}
- {2077167600 -21600 0 CST}
- {2091081600 -18000 1 CDT}
- {2108617200 -21600 0 CST}
- {2122531200 -18000 1 CDT}
- {2140066800 -21600 0 CST}
- {2153980800 -18000 1 CDT}
- {2172121200 -21600 0 CST}
- {2185430400 -18000 1 CDT}
- {2203570800 -21600 0 CST}
- {2216880000 -18000 1 CDT}
- {2235020400 -21600 0 CST}
- {2248934400 -18000 1 CDT}
- {2266470000 -21600 0 CST}
- {2280384000 -18000 1 CDT}
- {2297919600 -21600 0 CST}
- {2311833600 -18000 1 CDT}
- {2329369200 -21600 0 CST}
- {2343283200 -18000 1 CDT}
- {2361423600 -21600 0 CST}
- {2374732800 -18000 1 CDT}
- {2392873200 -21600 0 CST}
- {2406182400 -18000 1 CDT}
- {2424322800 -21600 0 CST}
- {2438236800 -18000 1 CDT}
- {2455772400 -21600 0 CST}
- {2469686400 -18000 1 CDT}
- {2487222000 -21600 0 CST}
- {2501136000 -18000 1 CDT}
- {2519276400 -21600 0 CST}
- {2532585600 -18000 1 CDT}
- {2550726000 -21600 0 CST}
- {2564035200 -18000 1 CDT}
- {2582175600 -21600 0 CST}
- {2596089600 -18000 1 CDT}
- {2613625200 -21600 0 CST}
- {2627539200 -18000 1 CDT}
- {2645074800 -21600 0 CST}
- {2658988800 -18000 1 CDT}
- {2676524400 -21600 0 CST}
- {2690438400 -18000 1 CDT}
- {2708578800 -21600 0 CST}
- {2721888000 -18000 1 CDT}
- {2740028400 -21600 0 CST}
- {2753337600 -18000 1 CDT}
- {2771478000 -21600 0 CST}
- {2785392000 -18000 1 CDT}
- {2802927600 -21600 0 CST}
- {2816841600 -18000 1 CDT}
- {2834377200 -21600 0 CST}
- {2848291200 -18000 1 CDT}
- {2866431600 -21600 0 CST}
- {2879740800 -18000 1 CDT}
- {2897881200 -21600 0 CST}
- {2911190400 -18000 1 CDT}
- {2929330800 -21600 0 CST}
- {2942640000 -18000 1 CDT}
- {2960780400 -21600 0 CST}
- {2974694400 -18000 1 CDT}
- {2992230000 -21600 0 CST}
- {3006144000 -18000 1 CDT}
- {3023679600 -21600 0 CST}
- {3037593600 -18000 1 CDT}
- {3055734000 -21600 0 CST}
- {3069043200 -18000 1 CDT}
- {3087183600 -21600 0 CST}
- {3100492800 -18000 1 CDT}
- {3118633200 -21600 0 CST}
- {3132547200 -18000 1 CDT}
- {3150082800 -21600 0 CST}
- {3163996800 -18000 1 CDT}
- {3181532400 -21600 0 CST}
- {3195446400 -18000 1 CDT}
- {3212982000 -21600 0 CST}
- {3226896000 -18000 1 CDT}
- {3245036400 -21600 0 CST}
- {3258345600 -18000 1 CDT}
- {3276486000 -21600 0 CST}
- {3289795200 -18000 1 CDT}
- {3307935600 -21600 0 CST}
- {3321849600 -18000 1 CDT}
- {3339385200 -21600 0 CST}
- {3353299200 -18000 1 CDT}
- {3370834800 -21600 0 CST}
- {3384748800 -18000 1 CDT}
- {3402889200 -21600 0 CST}
- {3416198400 -18000 1 CDT}
- {3434338800 -21600 0 CST}
- {3447648000 -18000 1 CDT}
- {3465788400 -21600 0 CST}
- {3479702400 -18000 1 CDT}
- {3497238000 -21600 0 CST}
- {3511152000 -18000 1 CDT}
- {3528687600 -21600 0 CST}
- {3542601600 -18000 1 CDT}
- {3560137200 -21600 0 CST}
- {3574051200 -18000 1 CDT}
- {3592191600 -21600 0 CST}
- {3605500800 -18000 1 CDT}
- {3623641200 -21600 0 CST}
- {3636950400 -18000 1 CDT}
- {3655090800 -21600 0 CST}
- {3669004800 -18000 1 CDT}
- {3686540400 -21600 0 CST}
- {3700454400 -18000 1 CDT}
- {3717990000 -21600 0 CST}
- {3731904000 -18000 1 CDT}
- {3750044400 -21600 0 CST}
- {3763353600 -18000 1 CDT}
- {3781494000 -21600 0 CST}
- {3794803200 -18000 1 CDT}
- {3812943600 -21600 0 CST}
- {3826252800 -18000 1 CDT}
- {3844393200 -21600 0 CST}
- {3858307200 -18000 1 CDT}
- {3875842800 -21600 0 CST}
- {3889756800 -18000 1 CDT}
- {3907292400 -21600 0 CST}
- {3921206400 -18000 1 CDT}
- {3939346800 -21600 0 CST}
- {3952656000 -18000 1 CDT}
- {3970796400 -21600 0 CST}
- {3984105600 -18000 1 CDT}
- {4002246000 -21600 0 CST}
- {4016160000 -18000 1 CDT}
- {4033695600 -21600 0 CST}
- {4047609600 -18000 1 CDT}
- {4065145200 -21600 0 CST}
- {4079059200 -18000 1 CDT}
- {4096594800 -21600 0 CST}
}
diff --git a/library/tzdata/America/Miquelon b/library/tzdata/America/Miquelon
index c299be6..8f912c3 100644
--- a/library/tzdata/America/Miquelon
+++ b/library/tzdata/America/Miquelon
@@ -2,233 +2,233 @@
set TZData(:America/Miquelon) {
{-9223372036854775808 -13480 0 LMT}
- {-1850328920 -14400 0 AST}
- {326001600 -10800 0 -03}
- {536468400 -10800 0 -02}
- {544597200 -7200 1 -02}
- {562132800 -10800 0 -02}
- {576046800 -7200 1 -02}
- {594187200 -10800 0 -02}
- {607496400 -7200 1 -02}
- {625636800 -10800 0 -02}
- {638946000 -7200 1 -02}
- {657086400 -10800 0 -02}
- {671000400 -7200 1 -02}
- {688536000 -10800 0 -02}
- {702450000 -7200 1 -02}
- {719985600 -10800 0 -02}
- {733899600 -7200 1 -02}
- {752040000 -10800 0 -02}
- {765349200 -7200 1 -02}
- {783489600 -10800 0 -02}
- {796798800 -7200 1 -02}
- {814939200 -10800 0 -02}
- {828853200 -7200 1 -02}
- {846388800 -10800 0 -02}
- {860302800 -7200 1 -02}
- {877838400 -10800 0 -02}
- {891752400 -7200 1 -02}
- {909288000 -10800 0 -02}
- {923202000 -7200 1 -02}
- {941342400 -10800 0 -02}
- {954651600 -7200 1 -02}
- {972792000 -10800 0 -02}
- {986101200 -7200 1 -02}
- {1004241600 -10800 0 -02}
- {1018155600 -7200 1 -02}
- {1035691200 -10800 0 -02}
- {1049605200 -7200 1 -02}
- {1067140800 -10800 0 -02}
- {1081054800 -7200 1 -02}
- {1099195200 -10800 0 -02}
- {1112504400 -7200 1 -02}
- {1130644800 -10800 0 -02}
- {1143954000 -7200 1 -02}
- {1162094400 -10800 0 -02}
- {1173589200 -7200 1 -02}
- {1194148800 -10800 0 -02}
- {1205038800 -7200 1 -02}
- {1225598400 -10800 0 -02}
- {1236488400 -7200 1 -02}
- {1257048000 -10800 0 -02}
- {1268542800 -7200 1 -02}
- {1289102400 -10800 0 -02}
- {1299992400 -7200 1 -02}
- {1320552000 -10800 0 -02}
- {1331442000 -7200 1 -02}
- {1352001600 -10800 0 -02}
- {1362891600 -7200 1 -02}
- {1383451200 -10800 0 -02}
- {1394341200 -7200 1 -02}
- {1414900800 -10800 0 -02}
- {1425790800 -7200 1 -02}
- {1446350400 -10800 0 -02}
- {1457845200 -7200 1 -02}
- {1478404800 -10800 0 -02}
- {1489294800 -7200 1 -02}
- {1509854400 -10800 0 -02}
- {1520744400 -7200 1 -02}
- {1541304000 -10800 0 -02}
- {1552194000 -7200 1 -02}
- {1572753600 -10800 0 -02}
- {1583643600 -7200 1 -02}
- {1604203200 -10800 0 -02}
- {1615698000 -7200 1 -02}
- {1636257600 -10800 0 -02}
- {1647147600 -7200 1 -02}
- {1667707200 -10800 0 -02}
- {1678597200 -7200 1 -02}
- {1699156800 -10800 0 -02}
- {1710046800 -7200 1 -02}
- {1730606400 -10800 0 -02}
- {1741496400 -7200 1 -02}
- {1762056000 -10800 0 -02}
- {1772946000 -7200 1 -02}
- {1793505600 -10800 0 -02}
- {1805000400 -7200 1 -02}
- {1825560000 -10800 0 -02}
- {1836450000 -7200 1 -02}
- {1857009600 -10800 0 -02}
- {1867899600 -7200 1 -02}
- {1888459200 -10800 0 -02}
- {1899349200 -7200 1 -02}
- {1919908800 -10800 0 -02}
- {1930798800 -7200 1 -02}
- {1951358400 -10800 0 -02}
- {1962853200 -7200 1 -02}
- {1983412800 -10800 0 -02}
- {1994302800 -7200 1 -02}
- {2014862400 -10800 0 -02}
- {2025752400 -7200 1 -02}
- {2046312000 -10800 0 -02}
- {2057202000 -7200 1 -02}
- {2077761600 -10800 0 -02}
- {2088651600 -7200 1 -02}
- {2109211200 -10800 0 -02}
- {2120101200 -7200 1 -02}
- {2140660800 -10800 0 -02}
- {2152155600 -7200 1 -02}
- {2172715200 -10800 0 -02}
- {2183605200 -7200 1 -02}
- {2204164800 -10800 0 -02}
- {2215054800 -7200 1 -02}
- {2235614400 -10800 0 -02}
- {2246504400 -7200 1 -02}
- {2267064000 -10800 0 -02}
- {2277954000 -7200 1 -02}
- {2298513600 -10800 0 -02}
- {2309403600 -7200 1 -02}
- {2329963200 -10800 0 -02}
- {2341458000 -7200 1 -02}
- {2362017600 -10800 0 -02}
- {2372907600 -7200 1 -02}
- {2393467200 -10800 0 -02}
- {2404357200 -7200 1 -02}
- {2424916800 -10800 0 -02}
- {2435806800 -7200 1 -02}
- {2456366400 -10800 0 -02}
- {2467256400 -7200 1 -02}
- {2487816000 -10800 0 -02}
- {2499310800 -7200 1 -02}
- {2519870400 -10800 0 -02}
- {2530760400 -7200 1 -02}
- {2551320000 -10800 0 -02}
- {2562210000 -7200 1 -02}
- {2582769600 -10800 0 -02}
- {2593659600 -7200 1 -02}
- {2614219200 -10800 0 -02}
- {2625109200 -7200 1 -02}
- {2645668800 -10800 0 -02}
- {2656558800 -7200 1 -02}
- {2677118400 -10800 0 -02}
- {2688613200 -7200 1 -02}
- {2709172800 -10800 0 -02}
- {2720062800 -7200 1 -02}
- {2740622400 -10800 0 -02}
- {2751512400 -7200 1 -02}
- {2772072000 -10800 0 -02}
- {2782962000 -7200 1 -02}
- {2803521600 -10800 0 -02}
- {2814411600 -7200 1 -02}
- {2834971200 -10800 0 -02}
- {2846466000 -7200 1 -02}
- {2867025600 -10800 0 -02}
- {2877915600 -7200 1 -02}
- {2898475200 -10800 0 -02}
- {2909365200 -7200 1 -02}
- {2929924800 -10800 0 -02}
- {2940814800 -7200 1 -02}
- {2961374400 -10800 0 -02}
- {2972264400 -7200 1 -02}
- {2992824000 -10800 0 -02}
- {3003714000 -7200 1 -02}
- {3024273600 -10800 0 -02}
- {3035768400 -7200 1 -02}
- {3056328000 -10800 0 -02}
- {3067218000 -7200 1 -02}
- {3087777600 -10800 0 -02}
- {3098667600 -7200 1 -02}
- {3119227200 -10800 0 -02}
- {3130117200 -7200 1 -02}
- {3150676800 -10800 0 -02}
- {3161566800 -7200 1 -02}
- {3182126400 -10800 0 -02}
- {3193016400 -7200 1 -02}
- {3213576000 -10800 0 -02}
- {3225070800 -7200 1 -02}
- {3245630400 -10800 0 -02}
- {3256520400 -7200 1 -02}
- {3277080000 -10800 0 -02}
- {3287970000 -7200 1 -02}
- {3308529600 -10800 0 -02}
- {3319419600 -7200 1 -02}
- {3339979200 -10800 0 -02}
- {3350869200 -7200 1 -02}
- {3371428800 -10800 0 -02}
- {3382923600 -7200 1 -02}
- {3403483200 -10800 0 -02}
- {3414373200 -7200 1 -02}
- {3434932800 -10800 0 -02}
- {3445822800 -7200 1 -02}
- {3466382400 -10800 0 -02}
- {3477272400 -7200 1 -02}
- {3497832000 -10800 0 -02}
- {3508722000 -7200 1 -02}
- {3529281600 -10800 0 -02}
- {3540171600 -7200 1 -02}
- {3560731200 -10800 0 -02}
- {3572226000 -7200 1 -02}
- {3592785600 -10800 0 -02}
- {3603675600 -7200 1 -02}
- {3624235200 -10800 0 -02}
- {3635125200 -7200 1 -02}
- {3655684800 -10800 0 -02}
- {3666574800 -7200 1 -02}
- {3687134400 -10800 0 -02}
- {3698024400 -7200 1 -02}
- {3718584000 -10800 0 -02}
- {3730078800 -7200 1 -02}
- {3750638400 -10800 0 -02}
- {3761528400 -7200 1 -02}
- {3782088000 -10800 0 -02}
- {3792978000 -7200 1 -02}
- {3813537600 -10800 0 -02}
- {3824427600 -7200 1 -02}
- {3844987200 -10800 0 -02}
- {3855877200 -7200 1 -02}
- {3876436800 -10800 0 -02}
- {3887326800 -7200 1 -02}
- {3907886400 -10800 0 -02}
- {3919381200 -7200 1 -02}
- {3939940800 -10800 0 -02}
- {3950830800 -7200 1 -02}
- {3971390400 -10800 0 -02}
- {3982280400 -7200 1 -02}
- {4002840000 -10800 0 -02}
- {4013730000 -7200 1 -02}
- {4034289600 -10800 0 -02}
- {4045179600 -7200 1 -02}
- {4065739200 -10800 0 -02}
- {4076629200 -7200 1 -02}
- {4097188800 -10800 0 -02}
+ {-1847650520 -14400 0 AST}
+ {326001600 -10800 0 -0300}
+ {536468400 -10800 0 -0300}
+ {544597200 -7200 1 -0200}
+ {562132800 -10800 0 -0300}
+ {576046800 -7200 1 -0200}
+ {594187200 -10800 0 -0300}
+ {607496400 -7200 1 -0200}
+ {625636800 -10800 0 -0300}
+ {638946000 -7200 1 -0200}
+ {657086400 -10800 0 -0300}
+ {671000400 -7200 1 -0200}
+ {688536000 -10800 0 -0300}
+ {702450000 -7200 1 -0200}
+ {719985600 -10800 0 -0300}
+ {733899600 -7200 1 -0200}
+ {752040000 -10800 0 -0300}
+ {765349200 -7200 1 -0200}
+ {783489600 -10800 0 -0300}
+ {796798800 -7200 1 -0200}
+ {814939200 -10800 0 -0300}
+ {828853200 -7200 1 -0200}
+ {846388800 -10800 0 -0300}
+ {860302800 -7200 1 -0200}
+ {877838400 -10800 0 -0300}
+ {891752400 -7200 1 -0200}
+ {909288000 -10800 0 -0300}
+ {923202000 -7200 1 -0200}
+ {941342400 -10800 0 -0300}
+ {954651600 -7200 1 -0200}
+ {972792000 -10800 0 -0300}
+ {986101200 -7200 1 -0200}
+ {1004241600 -10800 0 -0300}
+ {1018155600 -7200 1 -0200}
+ {1035691200 -10800 0 -0300}
+ {1049605200 -7200 1 -0200}
+ {1067140800 -10800 0 -0300}
+ {1081054800 -7200 1 -0200}
+ {1099195200 -10800 0 -0300}
+ {1112504400 -7200 1 -0200}
+ {1130644800 -10800 0 -0300}
+ {1143954000 -7200 1 -0200}
+ {1162094400 -10800 0 -0300}
+ {1173589200 -7200 1 -0200}
+ {1194148800 -10800 0 -0300}
+ {1205038800 -7200 1 -0200}
+ {1225598400 -10800 0 -0300}
+ {1236488400 -7200 1 -0200}
+ {1257048000 -10800 0 -0300}
+ {1268542800 -7200 1 -0200}
+ {1289102400 -10800 0 -0300}
+ {1299992400 -7200 1 -0200}
+ {1320552000 -10800 0 -0300}
+ {1331442000 -7200 1 -0200}
+ {1352001600 -10800 0 -0300}
+ {1362891600 -7200 1 -0200}
+ {1383451200 -10800 0 -0300}
+ {1394341200 -7200 1 -0200}
+ {1414900800 -10800 0 -0300}
+ {1425790800 -7200 1 -0200}
+ {1446350400 -10800 0 -0300}
+ {1457845200 -7200 1 -0200}
+ {1478404800 -10800 0 -0300}
+ {1489294800 -7200 1 -0200}
+ {1509854400 -10800 0 -0300}
+ {1520744400 -7200 1 -0200}
+ {1541304000 -10800 0 -0300}
+ {1552194000 -7200 1 -0200}
+ {1572753600 -10800 0 -0300}
+ {1583643600 -7200 1 -0200}
+ {1604203200 -10800 0 -0300}
+ {1615698000 -7200 1 -0200}
+ {1636257600 -10800 0 -0300}
+ {1647147600 -7200 1 -0200}
+ {1667707200 -10800 0 -0300}
+ {1678597200 -7200 1 -0200}
+ {1699156800 -10800 0 -0300}
+ {1710046800 -7200 1 -0200}
+ {1730606400 -10800 0 -0300}
+ {1741496400 -7200 1 -0200}
+ {1762056000 -10800 0 -0300}
+ {1772946000 -7200 1 -0200}
+ {1793505600 -10800 0 -0300}
+ {1805000400 -7200 1 -0200}
+ {1825560000 -10800 0 -0300}
+ {1836450000 -7200 1 -0200}
+ {1857009600 -10800 0 -0300}
+ {1867899600 -7200 1 -0200}
+ {1888459200 -10800 0 -0300}
+ {1899349200 -7200 1 -0200}
+ {1919908800 -10800 0 -0300}
+ {1930798800 -7200 1 -0200}
+ {1951358400 -10800 0 -0300}
+ {1962853200 -7200 1 -0200}
+ {1983412800 -10800 0 -0300}
+ {1994302800 -7200 1 -0200}
+ {2014862400 -10800 0 -0300}
+ {2025752400 -7200 1 -0200}
+ {2046312000 -10800 0 -0300}
+ {2057202000 -7200 1 -0200}
+ {2077761600 -10800 0 -0300}
+ {2088651600 -7200 1 -0200}
+ {2109211200 -10800 0 -0300}
+ {2120101200 -7200 1 -0200}
+ {2140660800 -10800 0 -0300}
+ {2152155600 -7200 1 -0200}
+ {2172715200 -10800 0 -0300}
+ {2183605200 -7200 1 -0200}
+ {2204164800 -10800 0 -0300}
+ {2215054800 -7200 1 -0200}
+ {2235614400 -10800 0 -0300}
+ {2246504400 -7200 1 -0200}
+ {2267064000 -10800 0 -0300}
+ {2277954000 -7200 1 -0200}
+ {2298513600 -10800 0 -0300}
+ {2309403600 -7200 1 -0200}
+ {2329963200 -10800 0 -0300}
+ {2341458000 -7200 1 -0200}
+ {2362017600 -10800 0 -0300}
+ {2372907600 -7200 1 -0200}
+ {2393467200 -10800 0 -0300}
+ {2404357200 -7200 1 -0200}
+ {2424916800 -10800 0 -0300}
+ {2435806800 -7200 1 -0200}
+ {2456366400 -10800 0 -0300}
+ {2467256400 -7200 1 -0200}
+ {2487816000 -10800 0 -0300}
+ {2499310800 -7200 1 -0200}
+ {2519870400 -10800 0 -0300}
+ {2530760400 -7200 1 -0200}
+ {2551320000 -10800 0 -0300}
+ {2562210000 -7200 1 -0200}
+ {2582769600 -10800 0 -0300}
+ {2593659600 -7200 1 -0200}
+ {2614219200 -10800 0 -0300}
+ {2625109200 -7200 1 -0200}
+ {2645668800 -10800 0 -0300}
+ {2656558800 -7200 1 -0200}
+ {2677118400 -10800 0 -0300}
+ {2688613200 -7200 1 -0200}
+ {2709172800 -10800 0 -0300}
+ {2720062800 -7200 1 -0200}
+ {2740622400 -10800 0 -0300}
+ {2751512400 -7200 1 -0200}
+ {2772072000 -10800 0 -0300}
+ {2782962000 -7200 1 -0200}
+ {2803521600 -10800 0 -0300}
+ {2814411600 -7200 1 -0200}
+ {2834971200 -10800 0 -0300}
+ {2846466000 -7200 1 -0200}
+ {2867025600 -10800 0 -0300}
+ {2877915600 -7200 1 -0200}
+ {2898475200 -10800 0 -0300}
+ {2909365200 -7200 1 -0200}
+ {2929924800 -10800 0 -0300}
+ {2940814800 -7200 1 -0200}
+ {2961374400 -10800 0 -0300}
+ {2972264400 -7200 1 -0200}
+ {2992824000 -10800 0 -0300}
+ {3003714000 -7200 1 -0200}
+ {3024273600 -10800 0 -0300}
+ {3035768400 -7200 1 -0200}
+ {3056328000 -10800 0 -0300}
+ {3067218000 -7200 1 -0200}
+ {3087777600 -10800 0 -0300}
+ {3098667600 -7200 1 -0200}
+ {3119227200 -10800 0 -0300}
+ {3130117200 -7200 1 -0200}
+ {3150676800 -10800 0 -0300}
+ {3161566800 -7200 1 -0200}
+ {3182126400 -10800 0 -0300}
+ {3193016400 -7200 1 -0200}
+ {3213576000 -10800 0 -0300}
+ {3225070800 -7200 1 -0200}
+ {3245630400 -10800 0 -0300}
+ {3256520400 -7200 1 -0200}
+ {3277080000 -10800 0 -0300}
+ {3287970000 -7200 1 -0200}
+ {3308529600 -10800 0 -0300}
+ {3319419600 -7200 1 -0200}
+ {3339979200 -10800 0 -0300}
+ {3350869200 -7200 1 -0200}
+ {3371428800 -10800 0 -0300}
+ {3382923600 -7200 1 -0200}
+ {3403483200 -10800 0 -0300}
+ {3414373200 -7200 1 -0200}
+ {3434932800 -10800 0 -0300}
+ {3445822800 -7200 1 -0200}
+ {3466382400 -10800 0 -0300}
+ {3477272400 -7200 1 -0200}
+ {3497832000 -10800 0 -0300}
+ {3508722000 -7200 1 -0200}
+ {3529281600 -10800 0 -0300}
+ {3540171600 -7200 1 -0200}
+ {3560731200 -10800 0 -0300}
+ {3572226000 -7200 1 -0200}
+ {3592785600 -10800 0 -0300}
+ {3603675600 -7200 1 -0200}
+ {3624235200 -10800 0 -0300}
+ {3635125200 -7200 1 -0200}
+ {3655684800 -10800 0 -0300}
+ {3666574800 -7200 1 -0200}
+ {3687134400 -10800 0 -0300}
+ {3698024400 -7200 1 -0200}
+ {3718584000 -10800 0 -0300}
+ {3730078800 -7200 1 -0200}
+ {3750638400 -10800 0 -0300}
+ {3761528400 -7200 1 -0200}
+ {3782088000 -10800 0 -0300}
+ {3792978000 -7200 1 -0200}
+ {3813537600 -10800 0 -0300}
+ {3824427600 -7200 1 -0200}
+ {3844987200 -10800 0 -0300}
+ {3855877200 -7200 1 -0200}
+ {3876436800 -10800 0 -0300}
+ {3887326800 -7200 1 -0200}
+ {3907886400 -10800 0 -0300}
+ {3919381200 -7200 1 -0200}
+ {3939940800 -10800 0 -0300}
+ {3950830800 -7200 1 -0200}
+ {3971390400 -10800 0 -0300}
+ {3982280400 -7200 1 -0200}
+ {4002840000 -10800 0 -0300}
+ {4013730000 -7200 1 -0200}
+ {4034289600 -10800 0 -0300}
+ {4045179600 -7200 1 -0200}
+ {4065739200 -10800 0 -0300}
+ {4076629200 -7200 1 -0200}
+ {4097188800 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Monterrey b/library/tzdata/America/Monterrey
index 4135884..4e919fa 100644
--- a/library/tzdata/America/Monterrey
+++ b/library/tzdata/America/Monterrey
@@ -2,7 +2,12 @@
set TZData(:America/Monterrey) {
{-9223372036854775808 -24076 0 LMT}
- {-1514743200 -21600 0 CST}
+ {-1514743200 -25200 0 MST}
+ {-1343149200 -21600 0 CST}
+ {-1234807200 -25200 0 MST}
+ {-1220461200 -21600 1 MDT}
+ {-1207159200 -25200 0 MST}
+ {-1191344400 -21600 0 CST}
{568015200 -21600 0 CST}
{576057600 -18000 1 CDT}
{594198000 -21600 0 CST}
@@ -61,158 +66,4 @@ set TZData(:America/Monterrey) {
{1635663600 -21600 0 CST}
{1648972800 -18000 1 CDT}
{1667113200 -21600 0 CST}
- {1680422400 -18000 1 CDT}
- {1698562800 -21600 0 CST}
- {1712476800 -18000 1 CDT}
- {1730012400 -21600 0 CST}
- {1743926400 -18000 1 CDT}
- {1761462000 -21600 0 CST}
- {1775376000 -18000 1 CDT}
- {1792911600 -21600 0 CST}
- {1806825600 -18000 1 CDT}
- {1824966000 -21600 0 CST}
- {1838275200 -18000 1 CDT}
- {1856415600 -21600 0 CST}
- {1869724800 -18000 1 CDT}
- {1887865200 -21600 0 CST}
- {1901779200 -18000 1 CDT}
- {1919314800 -21600 0 CST}
- {1933228800 -18000 1 CDT}
- {1950764400 -21600 0 CST}
- {1964678400 -18000 1 CDT}
- {1982818800 -21600 0 CST}
- {1996128000 -18000 1 CDT}
- {2014268400 -21600 0 CST}
- {2027577600 -18000 1 CDT}
- {2045718000 -21600 0 CST}
- {2059027200 -18000 1 CDT}
- {2077167600 -21600 0 CST}
- {2091081600 -18000 1 CDT}
- {2108617200 -21600 0 CST}
- {2122531200 -18000 1 CDT}
- {2140066800 -21600 0 CST}
- {2153980800 -18000 1 CDT}
- {2172121200 -21600 0 CST}
- {2185430400 -18000 1 CDT}
- {2203570800 -21600 0 CST}
- {2216880000 -18000 1 CDT}
- {2235020400 -21600 0 CST}
- {2248934400 -18000 1 CDT}
- {2266470000 -21600 0 CST}
- {2280384000 -18000 1 CDT}
- {2297919600 -21600 0 CST}
- {2311833600 -18000 1 CDT}
- {2329369200 -21600 0 CST}
- {2343283200 -18000 1 CDT}
- {2361423600 -21600 0 CST}
- {2374732800 -18000 1 CDT}
- {2392873200 -21600 0 CST}
- {2406182400 -18000 1 CDT}
- {2424322800 -21600 0 CST}
- {2438236800 -18000 1 CDT}
- {2455772400 -21600 0 CST}
- {2469686400 -18000 1 CDT}
- {2487222000 -21600 0 CST}
- {2501136000 -18000 1 CDT}
- {2519276400 -21600 0 CST}
- {2532585600 -18000 1 CDT}
- {2550726000 -21600 0 CST}
- {2564035200 -18000 1 CDT}
- {2582175600 -21600 0 CST}
- {2596089600 -18000 1 CDT}
- {2613625200 -21600 0 CST}
- {2627539200 -18000 1 CDT}
- {2645074800 -21600 0 CST}
- {2658988800 -18000 1 CDT}
- {2676524400 -21600 0 CST}
- {2690438400 -18000 1 CDT}
- {2708578800 -21600 0 CST}
- {2721888000 -18000 1 CDT}
- {2740028400 -21600 0 CST}
- {2753337600 -18000 1 CDT}
- {2771478000 -21600 0 CST}
- {2785392000 -18000 1 CDT}
- {2802927600 -21600 0 CST}
- {2816841600 -18000 1 CDT}
- {2834377200 -21600 0 CST}
- {2848291200 -18000 1 CDT}
- {2866431600 -21600 0 CST}
- {2879740800 -18000 1 CDT}
- {2897881200 -21600 0 CST}
- {2911190400 -18000 1 CDT}
- {2929330800 -21600 0 CST}
- {2942640000 -18000 1 CDT}
- {2960780400 -21600 0 CST}
- {2974694400 -18000 1 CDT}
- {2992230000 -21600 0 CST}
- {3006144000 -18000 1 CDT}
- {3023679600 -21600 0 CST}
- {3037593600 -18000 1 CDT}
- {3055734000 -21600 0 CST}
- {3069043200 -18000 1 CDT}
- {3087183600 -21600 0 CST}
- {3100492800 -18000 1 CDT}
- {3118633200 -21600 0 CST}
- {3132547200 -18000 1 CDT}
- {3150082800 -21600 0 CST}
- {3163996800 -18000 1 CDT}
- {3181532400 -21600 0 CST}
- {3195446400 -18000 1 CDT}
- {3212982000 -21600 0 CST}
- {3226896000 -18000 1 CDT}
- {3245036400 -21600 0 CST}
- {3258345600 -18000 1 CDT}
- {3276486000 -21600 0 CST}
- {3289795200 -18000 1 CDT}
- {3307935600 -21600 0 CST}
- {3321849600 -18000 1 CDT}
- {3339385200 -21600 0 CST}
- {3353299200 -18000 1 CDT}
- {3370834800 -21600 0 CST}
- {3384748800 -18000 1 CDT}
- {3402889200 -21600 0 CST}
- {3416198400 -18000 1 CDT}
- {3434338800 -21600 0 CST}
- {3447648000 -18000 1 CDT}
- {3465788400 -21600 0 CST}
- {3479702400 -18000 1 CDT}
- {3497238000 -21600 0 CST}
- {3511152000 -18000 1 CDT}
- {3528687600 -21600 0 CST}
- {3542601600 -18000 1 CDT}
- {3560137200 -21600 0 CST}
- {3574051200 -18000 1 CDT}
- {3592191600 -21600 0 CST}
- {3605500800 -18000 1 CDT}
- {3623641200 -21600 0 CST}
- {3636950400 -18000 1 CDT}
- {3655090800 -21600 0 CST}
- {3669004800 -18000 1 CDT}
- {3686540400 -21600 0 CST}
- {3700454400 -18000 1 CDT}
- {3717990000 -21600 0 CST}
- {3731904000 -18000 1 CDT}
- {3750044400 -21600 0 CST}
- {3763353600 -18000 1 CDT}
- {3781494000 -21600 0 CST}
- {3794803200 -18000 1 CDT}
- {3812943600 -21600 0 CST}
- {3826252800 -18000 1 CDT}
- {3844393200 -21600 0 CST}
- {3858307200 -18000 1 CDT}
- {3875842800 -21600 0 CST}
- {3889756800 -18000 1 CDT}
- {3907292400 -21600 0 CST}
- {3921206400 -18000 1 CDT}
- {3939346800 -21600 0 CST}
- {3952656000 -18000 1 CDT}
- {3970796400 -21600 0 CST}
- {3984105600 -18000 1 CDT}
- {4002246000 -21600 0 CST}
- {4016160000 -18000 1 CDT}
- {4033695600 -21600 0 CST}
- {4047609600 -18000 1 CDT}
- {4065145200 -21600 0 CST}
- {4079059200 -18000 1 CDT}
- {4096594800 -21600 0 CST}
}
diff --git a/library/tzdata/America/Montevideo b/library/tzdata/America/Montevideo
index 27fb76e..761441f 100644
--- a/library/tzdata/America/Montevideo
+++ b/library/tzdata/America/Montevideo
@@ -3,94 +3,94 @@
set TZData(:America/Montevideo) {
{-9223372036854775808 -13491 0 LMT}
{-1942690509 -13491 0 MMT}
- {-1567455309 -14400 0 -04}
- {-1459627200 -10800 0 -0330}
- {-1443819600 -12600 0 -0330}
- {-1428006600 -10800 1 -0330}
- {-1412283600 -12600 0 -0330}
- {-1396470600 -10800 1 -0330}
- {-1380747600 -12600 0 -0330}
- {-1141590600 -10800 1 -0330}
- {-1128286800 -12600 0 -0330}
- {-1110141000 -10800 1 -0330}
- {-1096837200 -12600 0 -0330}
- {-1078691400 -10800 1 -0330}
- {-1065387600 -12600 0 -0330}
- {-1047241800 -10800 1 -0330}
- {-1033938000 -12600 0 -0330}
- {-1015187400 -10800 1 -0330}
- {-1002488400 -12600 0 -0330}
- {-983737800 -10800 1 -0330}
- {-971038800 -12600 0 -0330}
- {-954707400 -10800 1 -0330}
- {-938984400 -12600 0 -0330}
- {-920838600 -10800 1 -0330}
- {-907534800 -12600 0 -0330}
- {-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 -03}
- {-134604000 -10800 0 -03}
- {-63147600 -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}
- {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 -03}
- {699415200 -10800 0 -03}
- {719377200 -7200 1 -03}
- {730864800 -10800 0 -03}
- {1095562800 -7200 1 -03}
- {1111896000 -10800 0 -03}
- {1128834000 -7200 1 -03}
- {1142136000 -10800 0 -03}
- {1159678800 -7200 1 -03}
- {1173585600 -10800 0 -03}
- {1191733200 -7200 1 -03}
- {1205035200 -10800 0 -03}
- {1223182800 -7200 1 -03}
- {1236484800 -10800 0 -03}
- {1254632400 -7200 1 -03}
- {1268539200 -10800 0 -03}
- {1286082000 -7200 1 -03}
- {1299988800 -10800 0 -03}
- {1317531600 -7200 1 -03}
- {1331438400 -10800 0 -03}
- {1349586000 -7200 1 -03}
- {1362888000 -10800 0 -03}
- {1381035600 -7200 1 -03}
- {1394337600 -10800 0 -03}
- {1412485200 -7200 1 -03}
- {1425787200 -10800 0 -03}
+ {-1567455309 -14400 0 -0400}
+ {-1459627200 -10800 0 -0300}
+ {-1443819600 -12600 0 -0430}
+ {-1428006600 -10800 1 -0300}
+ {-1412283600 -12600 0 -0430}
+ {-1396470600 -10800 1 -0300}
+ {-1380747600 -12600 0 -0430}
+ {-1141590600 -10800 1 -0300}
+ {-1128286800 -12600 0 -0430}
+ {-1110141000 -10800 1 -0300}
+ {-1096837200 -12600 0 -0430}
+ {-1078691400 -10800 1 -0300}
+ {-1065387600 -12600 0 -0430}
+ {-1047241800 -10800 1 -0300}
+ {-1033938000 -12600 0 -0430}
+ {-1015187400 -10800 1 -0300}
+ {-1002488400 -12600 0 -0430}
+ {-983737800 -10800 1 -0300}
+ {-971038800 -12600 0 -0430}
+ {-954707400 -10800 1 -0300}
+ {-938984400 -12600 0 -0430}
+ {-920838600 -10800 1 -0300}
+ {-907534800 -12600 0 -0430}
+ {-896819400 -10800 1 -0300}
+ {-853621200 -9000 0 -0330}
+ {-845847000 -10800 0 -0300}
+ {-334789200 -9000 1 -0330}
+ {-319671000 -10800 0 -0300}
+ {-315608400 -10800 0 -0300}
+ {-314226000 -7200 1 -0200}
+ {-309996000 -10800 0 -0300}
+ {-149720400 -7200 1 -0200}
+ {-134604000 -10800 0 -0300}
+ {-63147600 -10800 0 -0300}
+ {-50446800 -9000 1 -0330}
+ {-34205400 -10800 0 -0300}
+ {10800 -10800 0 -0300}
+ {9860400 -7200 1 -0200}
+ {14176800 -10800 0 -0300}
+ {72846000 -7200 1 -0200}
+ {80100000 -10800 0 -0300}
+ {126241200 -10800 0 -0300}
+ {127278000 -5400 1 -0230}
+ {132112800 -9000 0 -0330}
+ {147234600 -10800 0 -0300}
+ {156909600 -10800 0 -0300}
+ {156913200 -7200 1 -0200}
+ {165376800 -10800 0 -0300}
+ {219812400 -7200 1 -0200}
+ {226461600 -10800 0 -0300}
+ {250052400 -7200 1 -0200}
+ {257911200 -10800 0 -0300}
+ {282711600 -7200 1 -0200}
+ {289360800 -10800 0 -0300}
+ {294202800 -7200 1 -0200}
+ {322020000 -10800 0 -0300}
+ {566449200 -7200 1 -0200}
+ {573012000 -10800 0 -0300}
+ {597812400 -7200 1 -0200}
+ {605066400 -10800 0 -0300}
+ {625633200 -7200 1 -0200}
+ {635911200 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {667965600 -10800 0 -0300}
+ {688532400 -7200 1 -0200}
+ {699415200 -10800 0 -0300}
+ {719377200 -7200 1 -0200}
+ {730864800 -10800 0 -0300}
+ {1095562800 -7200 1 -0200}
+ {1111896000 -10800 0 -0300}
+ {1128834000 -7200 1 -0200}
+ {1142136000 -10800 0 -0300}
+ {1159678800 -7200 1 -0200}
+ {1173585600 -10800 0 -0300}
+ {1191733200 -7200 1 -0200}
+ {1205035200 -10800 0 -0300}
+ {1223182800 -7200 1 -0200}
+ {1236484800 -10800 0 -0300}
+ {1254632400 -7200 1 -0200}
+ {1268539200 -10800 0 -0300}
+ {1286082000 -7200 1 -0200}
+ {1299988800 -10800 0 -0300}
+ {1317531600 -7200 1 -0200}
+ {1331438400 -10800 0 -0300}
+ {1349586000 -7200 1 -0200}
+ {1362888000 -10800 0 -0300}
+ {1381035600 -7200 1 -0200}
+ {1394337600 -10800 0 -0300}
+ {1412485200 -7200 1 -0200}
+ {1425787200 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Nipigon b/library/tzdata/America/Nipigon
index 30690aa..785a3a3 100644
--- a/library/tzdata/America/Nipigon
+++ b/library/tzdata/America/Nipigon
@@ -1,264 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Nipigon) {
- {-9223372036854775808 -21184 0 LMT}
- {-2366734016 -18000 0 EST}
- {-1632070800 -14400 1 EDT}
- {-1615140000 -18000 0 EST}
- {-923252400 -14400 1 EDT}
- {-880218000 -14400 0 EWT}
- {-769395600 -14400 1 EPT}
- {-765396000 -18000 0 EST}
- {136364400 -14400 1 EDT}
- {152085600 -18000 0 EST}
- {167814000 -14400 1 EDT}
- {183535200 -18000 0 EST}
- {199263600 -14400 1 EDT}
- {215589600 -18000 0 EST}
- {230713200 -14400 1 EDT}
- {247039200 -18000 0 EST}
- {262767600 -14400 1 EDT}
- {278488800 -18000 0 EST}
- {294217200 -14400 1 EDT}
- {309938400 -18000 0 EST}
- {325666800 -14400 1 EDT}
- {341388000 -18000 0 EST}
- {357116400 -14400 1 EDT}
- {372837600 -18000 0 EST}
- {388566000 -14400 1 EDT}
- {404892000 -18000 0 EST}
- {420015600 -14400 1 EDT}
- {436341600 -18000 0 EST}
- {452070000 -14400 1 EDT}
- {467791200 -18000 0 EST}
- {483519600 -14400 1 EDT}
- {499240800 -18000 0 EST}
- {514969200 -14400 1 EDT}
- {530690400 -18000 0 EST}
- {544604400 -14400 1 EDT}
- {562140000 -18000 0 EST}
- {576054000 -14400 1 EDT}
- {594194400 -18000 0 EST}
- {607503600 -14400 1 EDT}
- {625644000 -18000 0 EST}
- {638953200 -14400 1 EDT}
- {657093600 -18000 0 EST}
- {671007600 -14400 1 EDT}
- {688543200 -18000 0 EST}
- {702457200 -14400 1 EDT}
- {719992800 -18000 0 EST}
- {733906800 -14400 1 EDT}
- {752047200 -18000 0 EST}
- {765356400 -14400 1 EDT}
- {783496800 -18000 0 EST}
- {796806000 -14400 1 EDT}
- {814946400 -18000 0 EST}
- {828860400 -14400 1 EDT}
- {846396000 -18000 0 EST}
- {860310000 -14400 1 EDT}
- {877845600 -18000 0 EST}
- {891759600 -14400 1 EDT}
- {909295200 -18000 0 EST}
- {923209200 -14400 1 EDT}
- {941349600 -18000 0 EST}
- {954658800 -14400 1 EDT}
- {972799200 -18000 0 EST}
- {986108400 -14400 1 EDT}
- {1004248800 -18000 0 EST}
- {1018162800 -14400 1 EDT}
- {1035698400 -18000 0 EST}
- {1049612400 -14400 1 EDT}
- {1067148000 -18000 0 EST}
- {1081062000 -14400 1 EDT}
- {1099202400 -18000 0 EST}
- {1112511600 -14400 1 EDT}
- {1130652000 -18000 0 EST}
- {1143961200 -14400 1 EDT}
- {1162101600 -18000 0 EST}
- {1173596400 -14400 1 EDT}
- {1194156000 -18000 0 EST}
- {1205046000 -14400 1 EDT}
- {1225605600 -18000 0 EST}
- {1236495600 -14400 1 EDT}
- {1257055200 -18000 0 EST}
- {1268550000 -14400 1 EDT}
- {1289109600 -18000 0 EST}
- {1299999600 -14400 1 EDT}
- {1320559200 -18000 0 EST}
- {1331449200 -14400 1 EDT}
- {1352008800 -18000 0 EST}
- {1362898800 -14400 1 EDT}
- {1383458400 -18000 0 EST}
- {1394348400 -14400 1 EDT}
- {1414908000 -18000 0 EST}
- {1425798000 -14400 1 EDT}
- {1446357600 -18000 0 EST}
- {1457852400 -14400 1 EDT}
- {1478412000 -18000 0 EST}
- {1489302000 -14400 1 EDT}
- {1509861600 -18000 0 EST}
- {1520751600 -14400 1 EDT}
- {1541311200 -18000 0 EST}
- {1552201200 -14400 1 EDT}
- {1572760800 -18000 0 EST}
- {1583650800 -14400 1 EDT}
- {1604210400 -18000 0 EST}
- {1615705200 -14400 1 EDT}
- {1636264800 -18000 0 EST}
- {1647154800 -14400 1 EDT}
- {1667714400 -18000 0 EST}
- {1678604400 -14400 1 EDT}
- {1699164000 -18000 0 EST}
- {1710054000 -14400 1 EDT}
- {1730613600 -18000 0 EST}
- {1741503600 -14400 1 EDT}
- {1762063200 -18000 0 EST}
- {1772953200 -14400 1 EDT}
- {1793512800 -18000 0 EST}
- {1805007600 -14400 1 EDT}
- {1825567200 -18000 0 EST}
- {1836457200 -14400 1 EDT}
- {1857016800 -18000 0 EST}
- {1867906800 -14400 1 EDT}
- {1888466400 -18000 0 EST}
- {1899356400 -14400 1 EDT}
- {1919916000 -18000 0 EST}
- {1930806000 -14400 1 EDT}
- {1951365600 -18000 0 EST}
- {1962860400 -14400 1 EDT}
- {1983420000 -18000 0 EST}
- {1994310000 -14400 1 EDT}
- {2014869600 -18000 0 EST}
- {2025759600 -14400 1 EDT}
- {2046319200 -18000 0 EST}
- {2057209200 -14400 1 EDT}
- {2077768800 -18000 0 EST}
- {2088658800 -14400 1 EDT}
- {2109218400 -18000 0 EST}
- {2120108400 -14400 1 EDT}
- {2140668000 -18000 0 EST}
- {2152162800 -14400 1 EDT}
- {2172722400 -18000 0 EST}
- {2183612400 -14400 1 EDT}
- {2204172000 -18000 0 EST}
- {2215062000 -14400 1 EDT}
- {2235621600 -18000 0 EST}
- {2246511600 -14400 1 EDT}
- {2267071200 -18000 0 EST}
- {2277961200 -14400 1 EDT}
- {2298520800 -18000 0 EST}
- {2309410800 -14400 1 EDT}
- {2329970400 -18000 0 EST}
- {2341465200 -14400 1 EDT}
- {2362024800 -18000 0 EST}
- {2372914800 -14400 1 EDT}
- {2393474400 -18000 0 EST}
- {2404364400 -14400 1 EDT}
- {2424924000 -18000 0 EST}
- {2435814000 -14400 1 EDT}
- {2456373600 -18000 0 EST}
- {2467263600 -14400 1 EDT}
- {2487823200 -18000 0 EST}
- {2499318000 -14400 1 EDT}
- {2519877600 -18000 0 EST}
- {2530767600 -14400 1 EDT}
- {2551327200 -18000 0 EST}
- {2562217200 -14400 1 EDT}
- {2582776800 -18000 0 EST}
- {2593666800 -14400 1 EDT}
- {2614226400 -18000 0 EST}
- {2625116400 -14400 1 EDT}
- {2645676000 -18000 0 EST}
- {2656566000 -14400 1 EDT}
- {2677125600 -18000 0 EST}
- {2688620400 -14400 1 EDT}
- {2709180000 -18000 0 EST}
- {2720070000 -14400 1 EDT}
- {2740629600 -18000 0 EST}
- {2751519600 -14400 1 EDT}
- {2772079200 -18000 0 EST}
- {2782969200 -14400 1 EDT}
- {2803528800 -18000 0 EST}
- {2814418800 -14400 1 EDT}
- {2834978400 -18000 0 EST}
- {2846473200 -14400 1 EDT}
- {2867032800 -18000 0 EST}
- {2877922800 -14400 1 EDT}
- {2898482400 -18000 0 EST}
- {2909372400 -14400 1 EDT}
- {2929932000 -18000 0 EST}
- {2940822000 -14400 1 EDT}
- {2961381600 -18000 0 EST}
- {2972271600 -14400 1 EDT}
- {2992831200 -18000 0 EST}
- {3003721200 -14400 1 EDT}
- {3024280800 -18000 0 EST}
- {3035775600 -14400 1 EDT}
- {3056335200 -18000 0 EST}
- {3067225200 -14400 1 EDT}
- {3087784800 -18000 0 EST}
- {3098674800 -14400 1 EDT}
- {3119234400 -18000 0 EST}
- {3130124400 -14400 1 EDT}
- {3150684000 -18000 0 EST}
- {3161574000 -14400 1 EDT}
- {3182133600 -18000 0 EST}
- {3193023600 -14400 1 EDT}
- {3213583200 -18000 0 EST}
- {3225078000 -14400 1 EDT}
- {3245637600 -18000 0 EST}
- {3256527600 -14400 1 EDT}
- {3277087200 -18000 0 EST}
- {3287977200 -14400 1 EDT}
- {3308536800 -18000 0 EST}
- {3319426800 -14400 1 EDT}
- {3339986400 -18000 0 EST}
- {3350876400 -14400 1 EDT}
- {3371436000 -18000 0 EST}
- {3382930800 -14400 1 EDT}
- {3403490400 -18000 0 EST}
- {3414380400 -14400 1 EDT}
- {3434940000 -18000 0 EST}
- {3445830000 -14400 1 EDT}
- {3466389600 -18000 0 EST}
- {3477279600 -14400 1 EDT}
- {3497839200 -18000 0 EST}
- {3508729200 -14400 1 EDT}
- {3529288800 -18000 0 EST}
- {3540178800 -14400 1 EDT}
- {3560738400 -18000 0 EST}
- {3572233200 -14400 1 EDT}
- {3592792800 -18000 0 EST}
- {3603682800 -14400 1 EDT}
- {3624242400 -18000 0 EST}
- {3635132400 -14400 1 EDT}
- {3655692000 -18000 0 EST}
- {3666582000 -14400 1 EDT}
- {3687141600 -18000 0 EST}
- {3698031600 -14400 1 EDT}
- {3718591200 -18000 0 EST}
- {3730086000 -14400 1 EDT}
- {3750645600 -18000 0 EST}
- {3761535600 -14400 1 EDT}
- {3782095200 -18000 0 EST}
- {3792985200 -14400 1 EDT}
- {3813544800 -18000 0 EST}
- {3824434800 -14400 1 EDT}
- {3844994400 -18000 0 EST}
- {3855884400 -14400 1 EDT}
- {3876444000 -18000 0 EST}
- {3887334000 -14400 1 EDT}
- {3907893600 -18000 0 EST}
- {3919388400 -14400 1 EDT}
- {3939948000 -18000 0 EST}
- {3950838000 -14400 1 EDT}
- {3971397600 -18000 0 EST}
- {3982287600 -14400 1 EDT}
- {4002847200 -18000 0 EST}
- {4013737200 -14400 1 EDT}
- {4034296800 -18000 0 EST}
- {4045186800 -14400 1 EDT}
- {4065746400 -18000 0 EST}
- {4076636400 -14400 1 EDT}
- {4097196000 -18000 0 EST}
+if {![info exists TZData(America/Toronto)]} {
+ LoadTimeZoneFile America/Toronto
}
+set TZData(:America/Nipigon) $TZData(:America/Toronto)
diff --git a/library/tzdata/America/Noronha b/library/tzdata/America/Noronha
index 01fb745..e02c545 100644
--- a/library/tzdata/America/Noronha
+++ b/library/tzdata/America/Noronha
@@ -2,47 +2,47 @@
set TZData(:America/Noronha) {
{-9223372036854775808 -7780 0 LMT}
- {-1767217820 -7200 0 -02}
- {-1206961200 -3600 1 -02}
- {-1191366000 -7200 0 -02}
- {-1175378400 -3600 1 -02}
- {-1159830000 -7200 0 -02}
- {-633823200 -3600 1 -02}
- {-622072800 -7200 0 -02}
- {-602287200 -3600 1 -02}
- {-591836400 -7200 0 -02}
- {-570751200 -3600 1 -02}
- {-560214000 -7200 0 -02}
- {-539128800 -3600 1 -02}
- {-531356400 -7200 0 -02}
- {-191368800 -3600 1 -02}
- {-184201200 -7200 0 -02}
- {-155167200 -3600 1 -02}
- {-150073200 -7200 0 -02}
- {-128901600 -3600 1 -02}
- {-121129200 -7200 0 -02}
- {-99957600 -3600 1 -02}
- {-89593200 -7200 0 -02}
- {-68421600 -3600 1 -02}
- {-57970800 -7200 0 -02}
- {499744800 -3600 1 -02}
- {511232400 -7200 0 -02}
- {530589600 -3600 1 -02}
- {540262800 -7200 0 -02}
- {562125600 -3600 1 -02}
- {571194000 -7200 0 -02}
- {592970400 -3600 1 -02}
- {602038800 -7200 0 -02}
- {624420000 -3600 1 -02}
- {634698000 -7200 0 -02}
- {653533200 -7200 0 -02}
- {938656800 -7200 0 -02}
- {938916000 -3600 1 -02}
- {951613200 -7200 0 -02}
- {970970400 -3600 1 -02}
- {971571600 -7200 0 -02}
- {1000346400 -7200 0 -02}
- {1003024800 -3600 1 -02}
- {1013907600 -7200 0 -02}
- {1033434000 -7200 0 -02}
+ {-1767217820 -7200 0 -0200}
+ {-1206961200 -3600 1 -0100}
+ {-1191366000 -7200 0 -0200}
+ {-1175378400 -3600 1 -0100}
+ {-1159830000 -7200 0 -0200}
+ {-633823200 -3600 1 -0100}
+ {-622072800 -7200 0 -0200}
+ {-602287200 -3600 1 -0100}
+ {-591836400 -7200 0 -0200}
+ {-570751200 -3600 1 -0100}
+ {-560214000 -7200 0 -0200}
+ {-539128800 -3600 1 -0100}
+ {-531356400 -7200 0 -0200}
+ {-191368800 -3600 1 -0100}
+ {-184201200 -7200 0 -0200}
+ {-155167200 -3600 1 -0100}
+ {-150073200 -7200 0 -0200}
+ {-128901600 -3600 1 -0100}
+ {-121129200 -7200 0 -0200}
+ {-99957600 -3600 1 -0100}
+ {-89593200 -7200 0 -0200}
+ {-68421600 -3600 1 -0100}
+ {-57970800 -7200 0 -0200}
+ {499744800 -3600 1 -0100}
+ {511232400 -7200 0 -0200}
+ {530589600 -3600 1 -0100}
+ {540262800 -7200 0 -0200}
+ {562125600 -3600 1 -0100}
+ {571194000 -7200 0 -0200}
+ {592970400 -3600 1 -0100}
+ {602038800 -7200 0 -0200}
+ {624420000 -3600 1 -0100}
+ {634698000 -7200 0 -0200}
+ {653533200 -7200 0 -0200}
+ {938656800 -7200 0 -0200}
+ {938916000 -3600 1 -0100}
+ {951613200 -7200 0 -0200}
+ {970970400 -3600 1 -0100}
+ {971571600 -7200 0 -0200}
+ {1000346400 -7200 0 -0200}
+ {1003024800 -3600 1 -0100}
+ {1013907600 -7200 0 -0200}
+ {1033434000 -7200 0 -0200}
}
diff --git a/library/tzdata/America/Nuuk b/library/tzdata/America/Nuuk
index 8d85a81..aab8c6f 100644
--- a/library/tzdata/America/Nuuk
+++ b/library/tzdata/America/Nuuk
@@ -2,245 +2,245 @@
set TZData(:America/Nuuk) {
{-9223372036854775808 -12416 0 LMT}
- {-1686083584 -10800 0 -03}
- {323845200 -7200 0 -02}
- {338950800 -10800 0 -03}
- {354675600 -7200 1 -02}
- {370400400 -10800 0 -03}
- {386125200 -7200 1 -02}
- {401850000 -10800 0 -03}
- {417574800 -7200 1 -02}
- {433299600 -10800 0 -03}
- {449024400 -7200 1 -02}
- {465354000 -10800 0 -03}
- {481078800 -7200 1 -02}
- {496803600 -10800 0 -03}
- {512528400 -7200 1 -02}
- {528253200 -10800 0 -03}
- {543978000 -7200 1 -02}
- {559702800 -10800 0 -03}
- {575427600 -7200 1 -02}
- {591152400 -10800 0 -03}
- {606877200 -7200 1 -02}
- {622602000 -10800 0 -03}
- {638326800 -7200 1 -02}
- {654656400 -10800 0 -03}
- {670381200 -7200 1 -02}
- {686106000 -10800 0 -03}
- {701830800 -7200 1 -02}
- {717555600 -10800 0 -03}
- {733280400 -7200 1 -02}
- {749005200 -10800 0 -03}
- {764730000 -7200 1 -02}
- {780454800 -10800 0 -03}
- {796179600 -7200 1 -02}
- {811904400 -10800 0 -03}
- {828234000 -7200 1 -02}
- {846378000 -10800 0 -03}
- {859683600 -7200 1 -02}
- {877827600 -10800 0 -03}
- {891133200 -7200 1 -02}
- {909277200 -10800 0 -03}
- {922582800 -7200 1 -02}
- {941331600 -10800 0 -03}
- {954032400 -7200 1 -02}
- {972781200 -10800 0 -03}
- {985482000 -7200 1 -02}
- {1004230800 -10800 0 -03}
- {1017536400 -7200 1 -02}
- {1035680400 -10800 0 -03}
- {1048986000 -7200 1 -02}
- {1067130000 -10800 0 -03}
- {1080435600 -7200 1 -02}
- {1099184400 -10800 0 -03}
- {1111885200 -7200 1 -02}
- {1130634000 -10800 0 -03}
- {1143334800 -7200 1 -02}
- {1162083600 -10800 0 -03}
- {1174784400 -7200 1 -02}
- {1193533200 -10800 0 -03}
- {1206838800 -7200 1 -02}
- {1224982800 -10800 0 -03}
- {1238288400 -7200 1 -02}
- {1256432400 -10800 0 -03}
- {1269738000 -7200 1 -02}
- {1288486800 -10800 0 -03}
- {1301187600 -7200 1 -02}
- {1319936400 -10800 0 -03}
- {1332637200 -7200 1 -02}
- {1351386000 -10800 0 -03}
- {1364691600 -7200 1 -02}
- {1382835600 -10800 0 -03}
- {1396141200 -7200 1 -02}
- {1414285200 -10800 0 -03}
- {1427590800 -7200 1 -02}
- {1445734800 -10800 0 -03}
- {1459040400 -7200 1 -02}
- {1477789200 -10800 0 -03}
- {1490490000 -7200 1 -02}
- {1509238800 -10800 0 -03}
- {1521939600 -7200 1 -02}
- {1540688400 -10800 0 -03}
- {1553994000 -7200 1 -02}
- {1572138000 -10800 0 -03}
- {1585443600 -7200 1 -02}
- {1603587600 -10800 0 -03}
- {1616893200 -7200 1 -02}
- {1635642000 -10800 0 -03}
- {1648342800 -7200 1 -02}
- {1667091600 -10800 0 -03}
- {1679792400 -7200 1 -02}
- {1698541200 -10800 0 -03}
- {1711846800 -7200 1 -02}
- {1729990800 -10800 0 -03}
- {1743296400 -7200 1 -02}
- {1761440400 -10800 0 -03}
- {1774746000 -7200 1 -02}
- {1792890000 -10800 0 -03}
- {1806195600 -7200 1 -02}
- {1824944400 -10800 0 -03}
- {1837645200 -7200 1 -02}
- {1856394000 -10800 0 -03}
- {1869094800 -7200 1 -02}
- {1887843600 -10800 0 -03}
- {1901149200 -7200 1 -02}
- {1919293200 -10800 0 -03}
- {1932598800 -7200 1 -02}
- {1950742800 -10800 0 -03}
- {1964048400 -7200 1 -02}
- {1982797200 -10800 0 -03}
- {1995498000 -7200 1 -02}
- {2014246800 -10800 0 -03}
- {2026947600 -7200 1 -02}
- {2045696400 -10800 0 -03}
- {2058397200 -7200 1 -02}
- {2077146000 -10800 0 -03}
- {2090451600 -7200 1 -02}
- {2108595600 -10800 0 -03}
- {2121901200 -7200 1 -02}
- {2140045200 -10800 0 -03}
- {2153350800 -7200 1 -02}
- {2172099600 -10800 0 -03}
- {2184800400 -7200 1 -02}
- {2203549200 -10800 0 -03}
- {2216250000 -7200 1 -02}
- {2234998800 -10800 0 -03}
- {2248304400 -7200 1 -02}
- {2266448400 -10800 0 -03}
- {2279754000 -7200 1 -02}
- {2297898000 -10800 0 -03}
- {2311203600 -7200 1 -02}
- {2329347600 -10800 0 -03}
- {2342653200 -7200 1 -02}
- {2361402000 -10800 0 -03}
- {2374102800 -7200 1 -02}
- {2392851600 -10800 0 -03}
- {2405552400 -7200 1 -02}
- {2424301200 -10800 0 -03}
- {2437606800 -7200 1 -02}
- {2455750800 -10800 0 -03}
- {2469056400 -7200 1 -02}
- {2487200400 -10800 0 -03}
- {2500506000 -7200 1 -02}
- {2519254800 -10800 0 -03}
- {2531955600 -7200 1 -02}
- {2550704400 -10800 0 -03}
- {2563405200 -7200 1 -02}
- {2582154000 -10800 0 -03}
- {2595459600 -7200 1 -02}
- {2613603600 -10800 0 -03}
- {2626909200 -7200 1 -02}
- {2645053200 -10800 0 -03}
- {2658358800 -7200 1 -02}
- {2676502800 -10800 0 -03}
- {2689808400 -7200 1 -02}
- {2708557200 -10800 0 -03}
- {2721258000 -7200 1 -02}
- {2740006800 -10800 0 -03}
- {2752707600 -7200 1 -02}
- {2771456400 -10800 0 -03}
- {2784762000 -7200 1 -02}
- {2802906000 -10800 0 -03}
- {2816211600 -7200 1 -02}
- {2834355600 -10800 0 -03}
- {2847661200 -7200 1 -02}
- {2866410000 -10800 0 -03}
- {2879110800 -7200 1 -02}
- {2897859600 -10800 0 -03}
- {2910560400 -7200 1 -02}
- {2929309200 -10800 0 -03}
- {2942010000 -7200 1 -02}
- {2960758800 -10800 0 -03}
- {2974064400 -7200 1 -02}
- {2992208400 -10800 0 -03}
- {3005514000 -7200 1 -02}
- {3023658000 -10800 0 -03}
- {3036963600 -7200 1 -02}
- {3055712400 -10800 0 -03}
- {3068413200 -7200 1 -02}
- {3087162000 -10800 0 -03}
- {3099862800 -7200 1 -02}
- {3118611600 -10800 0 -03}
- {3131917200 -7200 1 -02}
- {3150061200 -10800 0 -03}
- {3163366800 -7200 1 -02}
- {3181510800 -10800 0 -03}
- {3194816400 -7200 1 -02}
- {3212960400 -10800 0 -03}
- {3226266000 -7200 1 -02}
- {3245014800 -10800 0 -03}
- {3257715600 -7200 1 -02}
- {3276464400 -10800 0 -03}
- {3289165200 -7200 1 -02}
- {3307914000 -10800 0 -03}
- {3321219600 -7200 1 -02}
- {3339363600 -10800 0 -03}
- {3352669200 -7200 1 -02}
- {3370813200 -10800 0 -03}
- {3384118800 -7200 1 -02}
- {3402867600 -10800 0 -03}
- {3415568400 -7200 1 -02}
- {3434317200 -10800 0 -03}
- {3447018000 -7200 1 -02}
- {3465766800 -10800 0 -03}
- {3479072400 -7200 1 -02}
- {3497216400 -10800 0 -03}
- {3510522000 -7200 1 -02}
- {3528666000 -10800 0 -03}
- {3541971600 -7200 1 -02}
- {3560115600 -10800 0 -03}
- {3573421200 -7200 1 -02}
- {3592170000 -10800 0 -03}
- {3604870800 -7200 1 -02}
- {3623619600 -10800 0 -03}
- {3636320400 -7200 1 -02}
- {3655069200 -10800 0 -03}
- {3668374800 -7200 1 -02}
- {3686518800 -10800 0 -03}
- {3699824400 -7200 1 -02}
- {3717968400 -10800 0 -03}
- {3731274000 -7200 1 -02}
- {3750022800 -10800 0 -03}
- {3762723600 -7200 1 -02}
- {3781472400 -10800 0 -03}
- {3794173200 -7200 1 -02}
- {3812922000 -10800 0 -03}
- {3825622800 -7200 1 -02}
- {3844371600 -10800 0 -03}
- {3857677200 -7200 1 -02}
- {3875821200 -10800 0 -03}
- {3889126800 -7200 1 -02}
- {3907270800 -10800 0 -03}
- {3920576400 -7200 1 -02}
- {3939325200 -10800 0 -03}
- {3952026000 -7200 1 -02}
- {3970774800 -10800 0 -03}
- {3983475600 -7200 1 -02}
- {4002224400 -10800 0 -03}
- {4015530000 -7200 1 -02}
- {4033674000 -10800 0 -03}
- {4046979600 -7200 1 -02}
- {4065123600 -10800 0 -03}
- {4078429200 -7200 1 -02}
- {4096573200 -10800 0 -03}
+ {-1686083584 -10800 0 -0300}
+ {323845200 -7200 0 -0200}
+ {338950800 -10800 0 -0300}
+ {354675600 -7200 1 -0200}
+ {370400400 -10800 0 -0300}
+ {386125200 -7200 1 -0200}
+ {401850000 -10800 0 -0300}
+ {417574800 -7200 1 -0200}
+ {433299600 -10800 0 -0300}
+ {449024400 -7200 1 -0200}
+ {465354000 -10800 0 -0300}
+ {481078800 -7200 1 -0200}
+ {496803600 -10800 0 -0300}
+ {512528400 -7200 1 -0200}
+ {528253200 -10800 0 -0300}
+ {543978000 -7200 1 -0200}
+ {559702800 -10800 0 -0300}
+ {575427600 -7200 1 -0200}
+ {591152400 -10800 0 -0300}
+ {606877200 -7200 1 -0200}
+ {622602000 -10800 0 -0300}
+ {638326800 -7200 1 -0200}
+ {654656400 -10800 0 -0300}
+ {670381200 -7200 1 -0200}
+ {686106000 -10800 0 -0300}
+ {701830800 -7200 1 -0200}
+ {717555600 -10800 0 -0300}
+ {733280400 -7200 1 -0200}
+ {749005200 -10800 0 -0300}
+ {764730000 -7200 1 -0200}
+ {780454800 -10800 0 -0300}
+ {796179600 -7200 1 -0200}
+ {811904400 -10800 0 -0300}
+ {828234000 -7200 1 -0200}
+ {846378000 -10800 0 -0300}
+ {859683600 -7200 1 -0200}
+ {877827600 -10800 0 -0300}
+ {891133200 -7200 1 -0200}
+ {909277200 -10800 0 -0300}
+ {922582800 -7200 1 -0200}
+ {941331600 -10800 0 -0300}
+ {954032400 -7200 1 -0200}
+ {972781200 -10800 0 -0300}
+ {985482000 -7200 1 -0200}
+ {1004230800 -10800 0 -0300}
+ {1017536400 -7200 1 -0200}
+ {1035680400 -10800 0 -0300}
+ {1048986000 -7200 1 -0200}
+ {1067130000 -10800 0 -0300}
+ {1080435600 -7200 1 -0200}
+ {1099184400 -10800 0 -0300}
+ {1111885200 -7200 1 -0200}
+ {1130634000 -10800 0 -0300}
+ {1143334800 -7200 1 -0200}
+ {1162083600 -10800 0 -0300}
+ {1174784400 -7200 1 -0200}
+ {1193533200 -10800 0 -0300}
+ {1206838800 -7200 1 -0200}
+ {1224982800 -10800 0 -0300}
+ {1238288400 -7200 1 -0200}
+ {1256432400 -10800 0 -0300}
+ {1269738000 -7200 1 -0200}
+ {1288486800 -10800 0 -0300}
+ {1301187600 -7200 1 -0200}
+ {1319936400 -10800 0 -0300}
+ {1332637200 -7200 1 -0200}
+ {1351386000 -10800 0 -0300}
+ {1364691600 -7200 1 -0200}
+ {1382835600 -10800 0 -0300}
+ {1396141200 -7200 1 -0200}
+ {1414285200 -10800 0 -0300}
+ {1427590800 -7200 1 -0200}
+ {1445734800 -10800 0 -0300}
+ {1459040400 -7200 1 -0200}
+ {1477789200 -10800 0 -0300}
+ {1490490000 -7200 1 -0200}
+ {1509238800 -10800 0 -0300}
+ {1521939600 -7200 1 -0200}
+ {1540688400 -10800 0 -0300}
+ {1553994000 -7200 1 -0200}
+ {1572138000 -10800 0 -0300}
+ {1585443600 -7200 1 -0200}
+ {1603587600 -10800 0 -0300}
+ {1616893200 -7200 1 -0200}
+ {1635642000 -10800 0 -0300}
+ {1648342800 -7200 1 -0200}
+ {1667091600 -10800 0 -0300}
+ {1679792400 -7200 0 -0200}
+ {1698541200 -7200 0 -0200}
+ {1711846800 -3600 1 -0100}
+ {1729990800 -7200 0 -0200}
+ {1743296400 -3600 1 -0100}
+ {1761440400 -7200 0 -0200}
+ {1774746000 -3600 1 -0100}
+ {1792890000 -7200 0 -0200}
+ {1806195600 -3600 1 -0100}
+ {1824944400 -7200 0 -0200}
+ {1837645200 -3600 1 -0100}
+ {1856394000 -7200 0 -0200}
+ {1869094800 -3600 1 -0100}
+ {1887843600 -7200 0 -0200}
+ {1901149200 -3600 1 -0100}
+ {1919293200 -7200 0 -0200}
+ {1932598800 -3600 1 -0100}
+ {1950742800 -7200 0 -0200}
+ {1964048400 -3600 1 -0100}
+ {1982797200 -7200 0 -0200}
+ {1995498000 -3600 1 -0100}
+ {2014246800 -7200 0 -0200}
+ {2026947600 -3600 1 -0100}
+ {2045696400 -7200 0 -0200}
+ {2058397200 -3600 1 -0100}
+ {2077146000 -7200 0 -0200}
+ {2090451600 -3600 1 -0100}
+ {2108595600 -7200 0 -0200}
+ {2121901200 -3600 1 -0100}
+ {2140045200 -7200 0 -0200}
+ {2153350800 -3600 1 -0100}
+ {2172099600 -7200 0 -0200}
+ {2184800400 -3600 1 -0100}
+ {2203549200 -7200 0 -0200}
+ {2216250000 -3600 1 -0100}
+ {2234998800 -7200 0 -0200}
+ {2248304400 -3600 1 -0100}
+ {2266448400 -7200 0 -0200}
+ {2279754000 -3600 1 -0100}
+ {2297898000 -7200 0 -0200}
+ {2311203600 -3600 1 -0100}
+ {2329347600 -7200 0 -0200}
+ {2342653200 -3600 1 -0100}
+ {2361402000 -7200 0 -0200}
+ {2374102800 -3600 1 -0100}
+ {2392851600 -7200 0 -0200}
+ {2405552400 -3600 1 -0100}
+ {2424301200 -7200 0 -0200}
+ {2437606800 -3600 1 -0100}
+ {2455750800 -7200 0 -0200}
+ {2469056400 -3600 1 -0100}
+ {2487200400 -7200 0 -0200}
+ {2500506000 -3600 1 -0100}
+ {2519254800 -7200 0 -0200}
+ {2531955600 -3600 1 -0100}
+ {2550704400 -7200 0 -0200}
+ {2563405200 -3600 1 -0100}
+ {2582154000 -7200 0 -0200}
+ {2595459600 -3600 1 -0100}
+ {2613603600 -7200 0 -0200}
+ {2626909200 -3600 1 -0100}
+ {2645053200 -7200 0 -0200}
+ {2658358800 -3600 1 -0100}
+ {2676502800 -7200 0 -0200}
+ {2689808400 -3600 1 -0100}
+ {2708557200 -7200 0 -0200}
+ {2721258000 -3600 1 -0100}
+ {2740006800 -7200 0 -0200}
+ {2752707600 -3600 1 -0100}
+ {2771456400 -7200 0 -0200}
+ {2784762000 -3600 1 -0100}
+ {2802906000 -7200 0 -0200}
+ {2816211600 -3600 1 -0100}
+ {2834355600 -7200 0 -0200}
+ {2847661200 -3600 1 -0100}
+ {2866410000 -7200 0 -0200}
+ {2879110800 -3600 1 -0100}
+ {2897859600 -7200 0 -0200}
+ {2910560400 -3600 1 -0100}
+ {2929309200 -7200 0 -0200}
+ {2942010000 -3600 1 -0100}
+ {2960758800 -7200 0 -0200}
+ {2974064400 -3600 1 -0100}
+ {2992208400 -7200 0 -0200}
+ {3005514000 -3600 1 -0100}
+ {3023658000 -7200 0 -0200}
+ {3036963600 -3600 1 -0100}
+ {3055712400 -7200 0 -0200}
+ {3068413200 -3600 1 -0100}
+ {3087162000 -7200 0 -0200}
+ {3099862800 -3600 1 -0100}
+ {3118611600 -7200 0 -0200}
+ {3131917200 -3600 1 -0100}
+ {3150061200 -7200 0 -0200}
+ {3163366800 -3600 1 -0100}
+ {3181510800 -7200 0 -0200}
+ {3194816400 -3600 1 -0100}
+ {3212960400 -7200 0 -0200}
+ {3226266000 -3600 1 -0100}
+ {3245014800 -7200 0 -0200}
+ {3257715600 -3600 1 -0100}
+ {3276464400 -7200 0 -0200}
+ {3289165200 -3600 1 -0100}
+ {3307914000 -7200 0 -0200}
+ {3321219600 -3600 1 -0100}
+ {3339363600 -7200 0 -0200}
+ {3352669200 -3600 1 -0100}
+ {3370813200 -7200 0 -0200}
+ {3384118800 -3600 1 -0100}
+ {3402867600 -7200 0 -0200}
+ {3415568400 -3600 1 -0100}
+ {3434317200 -7200 0 -0200}
+ {3447018000 -3600 1 -0100}
+ {3465766800 -7200 0 -0200}
+ {3479072400 -3600 1 -0100}
+ {3497216400 -7200 0 -0200}
+ {3510522000 -3600 1 -0100}
+ {3528666000 -7200 0 -0200}
+ {3541971600 -3600 1 -0100}
+ {3560115600 -7200 0 -0200}
+ {3573421200 -3600 1 -0100}
+ {3592170000 -7200 0 -0200}
+ {3604870800 -3600 1 -0100}
+ {3623619600 -7200 0 -0200}
+ {3636320400 -3600 1 -0100}
+ {3655069200 -7200 0 -0200}
+ {3668374800 -3600 1 -0100}
+ {3686518800 -7200 0 -0200}
+ {3699824400 -3600 1 -0100}
+ {3717968400 -7200 0 -0200}
+ {3731274000 -3600 1 -0100}
+ {3750022800 -7200 0 -0200}
+ {3762723600 -3600 1 -0100}
+ {3781472400 -7200 0 -0200}
+ {3794173200 -3600 1 -0100}
+ {3812922000 -7200 0 -0200}
+ {3825622800 -3600 1 -0100}
+ {3844371600 -7200 0 -0200}
+ {3857677200 -3600 1 -0100}
+ {3875821200 -7200 0 -0200}
+ {3889126800 -3600 1 -0100}
+ {3907270800 -7200 0 -0200}
+ {3920576400 -3600 1 -0100}
+ {3939325200 -7200 0 -0200}
+ {3952026000 -3600 1 -0100}
+ {3970774800 -7200 0 -0200}
+ {3983475600 -3600 1 -0100}
+ {4002224400 -7200 0 -0200}
+ {4015530000 -3600 1 -0100}
+ {4033674000 -7200 0 -0200}
+ {4046979600 -3600 1 -0100}
+ {4065123600 -7200 0 -0200}
+ {4078429200 -3600 1 -0100}
+ {4096573200 -7200 0 -0200}
}
diff --git a/library/tzdata/America/Ojinaga b/library/tzdata/America/Ojinaga
index c01cfde..ba24a6b 100644
--- a/library/tzdata/America/Ojinaga
+++ b/library/tzdata/America/Ojinaga
@@ -3,9 +3,9 @@
set TZData(:America/Ojinaga) {
{-9223372036854775808 -25060 0 LMT}
{-1514739600 -25200 0 MST}
- {-1343066400 -21600 0 CST}
+ {-1343149200 -21600 0 CST}
{-1234807200 -25200 0 MST}
- {-1220292000 -21600 1 MDT}
+ {-1220461200 -21600 1 MDT}
{-1207159200 -25200 0 MST}
{-1191344400 -21600 0 CST}
{820476000 -21600 0 CST}
@@ -64,159 +64,160 @@ set TZData(:America/Ojinaga) {
{1615712400 -21600 1 MDT}
{1636272000 -25200 0 MST}
{1647162000 -21600 1 MDT}
- {1667721600 -25200 0 MST}
- {1678611600 -21600 1 MDT}
- {1699171200 -25200 0 MST}
- {1710061200 -21600 1 MDT}
- {1730620800 -25200 0 MST}
- {1741510800 -21600 1 MDT}
- {1762070400 -25200 0 MST}
- {1772960400 -21600 1 MDT}
- {1793520000 -25200 0 MST}
- {1805014800 -21600 1 MDT}
- {1825574400 -25200 0 MST}
- {1836464400 -21600 1 MDT}
- {1857024000 -25200 0 MST}
- {1867914000 -21600 1 MDT}
- {1888473600 -25200 0 MST}
- {1899363600 -21600 1 MDT}
- {1919923200 -25200 0 MST}
- {1930813200 -21600 1 MDT}
- {1951372800 -25200 0 MST}
- {1962867600 -21600 1 MDT}
- {1983427200 -25200 0 MST}
- {1994317200 -21600 1 MDT}
- {2014876800 -25200 0 MST}
- {2025766800 -21600 1 MDT}
- {2046326400 -25200 0 MST}
- {2057216400 -21600 1 MDT}
- {2077776000 -25200 0 MST}
- {2088666000 -21600 1 MDT}
- {2109225600 -25200 0 MST}
- {2120115600 -21600 1 MDT}
- {2140675200 -25200 0 MST}
- {2152170000 -21600 1 MDT}
- {2172729600 -25200 0 MST}
- {2183619600 -21600 1 MDT}
- {2204179200 -25200 0 MST}
- {2215069200 -21600 1 MDT}
- {2235628800 -25200 0 MST}
- {2246518800 -21600 1 MDT}
- {2267078400 -25200 0 MST}
- {2277968400 -21600 1 MDT}
- {2298528000 -25200 0 MST}
- {2309418000 -21600 1 MDT}
- {2329977600 -25200 0 MST}
- {2341472400 -21600 1 MDT}
- {2362032000 -25200 0 MST}
- {2372922000 -21600 1 MDT}
- {2393481600 -25200 0 MST}
- {2404371600 -21600 1 MDT}
- {2424931200 -25200 0 MST}
- {2435821200 -21600 1 MDT}
- {2456380800 -25200 0 MST}
- {2467270800 -21600 1 MDT}
- {2487830400 -25200 0 MST}
- {2499325200 -21600 1 MDT}
- {2519884800 -25200 0 MST}
- {2530774800 -21600 1 MDT}
- {2551334400 -25200 0 MST}
- {2562224400 -21600 1 MDT}
- {2582784000 -25200 0 MST}
- {2593674000 -21600 1 MDT}
- {2614233600 -25200 0 MST}
- {2625123600 -21600 1 MDT}
- {2645683200 -25200 0 MST}
- {2656573200 -21600 1 MDT}
- {2677132800 -25200 0 MST}
- {2688627600 -21600 1 MDT}
- {2709187200 -25200 0 MST}
- {2720077200 -21600 1 MDT}
- {2740636800 -25200 0 MST}
- {2751526800 -21600 1 MDT}
- {2772086400 -25200 0 MST}
- {2782976400 -21600 1 MDT}
- {2803536000 -25200 0 MST}
- {2814426000 -21600 1 MDT}
- {2834985600 -25200 0 MST}
- {2846480400 -21600 1 MDT}
- {2867040000 -25200 0 MST}
- {2877930000 -21600 1 MDT}
- {2898489600 -25200 0 MST}
- {2909379600 -21600 1 MDT}
- {2929939200 -25200 0 MST}
- {2940829200 -21600 1 MDT}
- {2961388800 -25200 0 MST}
- {2972278800 -21600 1 MDT}
- {2992838400 -25200 0 MST}
- {3003728400 -21600 1 MDT}
- {3024288000 -25200 0 MST}
- {3035782800 -21600 1 MDT}
- {3056342400 -25200 0 MST}
- {3067232400 -21600 1 MDT}
- {3087792000 -25200 0 MST}
- {3098682000 -21600 1 MDT}
- {3119241600 -25200 0 MST}
- {3130131600 -21600 1 MDT}
- {3150691200 -25200 0 MST}
- {3161581200 -21600 1 MDT}
- {3182140800 -25200 0 MST}
- {3193030800 -21600 1 MDT}
- {3213590400 -25200 0 MST}
- {3225085200 -21600 1 MDT}
- {3245644800 -25200 0 MST}
- {3256534800 -21600 1 MDT}
- {3277094400 -25200 0 MST}
- {3287984400 -21600 1 MDT}
- {3308544000 -25200 0 MST}
- {3319434000 -21600 1 MDT}
- {3339993600 -25200 0 MST}
- {3350883600 -21600 1 MDT}
- {3371443200 -25200 0 MST}
- {3382938000 -21600 1 MDT}
- {3403497600 -25200 0 MST}
- {3414387600 -21600 1 MDT}
- {3434947200 -25200 0 MST}
- {3445837200 -21600 1 MDT}
- {3466396800 -25200 0 MST}
- {3477286800 -21600 1 MDT}
- {3497846400 -25200 0 MST}
- {3508736400 -21600 1 MDT}
- {3529296000 -25200 0 MST}
- {3540186000 -21600 1 MDT}
- {3560745600 -25200 0 MST}
- {3572240400 -21600 1 MDT}
- {3592800000 -25200 0 MST}
- {3603690000 -21600 1 MDT}
- {3624249600 -25200 0 MST}
- {3635139600 -21600 1 MDT}
- {3655699200 -25200 0 MST}
- {3666589200 -21600 1 MDT}
- {3687148800 -25200 0 MST}
- {3698038800 -21600 1 MDT}
- {3718598400 -25200 0 MST}
- {3730093200 -21600 1 MDT}
- {3750652800 -25200 0 MST}
- {3761542800 -21600 1 MDT}
- {3782102400 -25200 0 MST}
- {3792992400 -21600 1 MDT}
- {3813552000 -25200 0 MST}
- {3824442000 -21600 1 MDT}
- {3845001600 -25200 0 MST}
- {3855891600 -21600 1 MDT}
- {3876451200 -25200 0 MST}
- {3887341200 -21600 1 MDT}
- {3907900800 -25200 0 MST}
- {3919395600 -21600 1 MDT}
- {3939955200 -25200 0 MST}
- {3950845200 -21600 1 MDT}
- {3971404800 -25200 0 MST}
- {3982294800 -21600 1 MDT}
- {4002854400 -25200 0 MST}
- {4013744400 -21600 1 MDT}
- {4034304000 -25200 0 MST}
- {4045194000 -21600 1 MDT}
- {4065753600 -25200 0 MST}
- {4076643600 -21600 1 MDT}
- {4097203200 -25200 0 MST}
+ {1667120400 -21600 0 CST}
+ {1669788000 -21600 0 CST}
+ {1678608000 -18000 1 CDT}
+ {1699167600 -21600 0 CST}
+ {1710057600 -18000 1 CDT}
+ {1730617200 -21600 0 CST}
+ {1741507200 -18000 1 CDT}
+ {1762066800 -21600 0 CST}
+ {1772956800 -18000 1 CDT}
+ {1793516400 -21600 0 CST}
+ {1805011200 -18000 1 CDT}
+ {1825570800 -21600 0 CST}
+ {1836460800 -18000 1 CDT}
+ {1857020400 -21600 0 CST}
+ {1867910400 -18000 1 CDT}
+ {1888470000 -21600 0 CST}
+ {1899360000 -18000 1 CDT}
+ {1919919600 -21600 0 CST}
+ {1930809600 -18000 1 CDT}
+ {1951369200 -21600 0 CST}
+ {1962864000 -18000 1 CDT}
+ {1983423600 -21600 0 CST}
+ {1994313600 -18000 1 CDT}
+ {2014873200 -21600 0 CST}
+ {2025763200 -18000 1 CDT}
+ {2046322800 -21600 0 CST}
+ {2057212800 -18000 1 CDT}
+ {2077772400 -21600 0 CST}
+ {2088662400 -18000 1 CDT}
+ {2109222000 -21600 0 CST}
+ {2120112000 -18000 1 CDT}
+ {2140671600 -21600 0 CST}
+ {2152166400 -18000 1 CDT}
+ {2172726000 -21600 0 CST}
+ {2183616000 -18000 1 CDT}
+ {2204175600 -21600 0 CST}
+ {2215065600 -18000 1 CDT}
+ {2235625200 -21600 0 CST}
+ {2246515200 -18000 1 CDT}
+ {2267074800 -21600 0 CST}
+ {2277964800 -18000 1 CDT}
+ {2298524400 -21600 0 CST}
+ {2309414400 -18000 1 CDT}
+ {2329974000 -21600 0 CST}
+ {2341468800 -18000 1 CDT}
+ {2362028400 -21600 0 CST}
+ {2372918400 -18000 1 CDT}
+ {2393478000 -21600 0 CST}
+ {2404368000 -18000 1 CDT}
+ {2424927600 -21600 0 CST}
+ {2435817600 -18000 1 CDT}
+ {2456377200 -21600 0 CST}
+ {2467267200 -18000 1 CDT}
+ {2487826800 -21600 0 CST}
+ {2499321600 -18000 1 CDT}
+ {2519881200 -21600 0 CST}
+ {2530771200 -18000 1 CDT}
+ {2551330800 -21600 0 CST}
+ {2562220800 -18000 1 CDT}
+ {2582780400 -21600 0 CST}
+ {2593670400 -18000 1 CDT}
+ {2614230000 -21600 0 CST}
+ {2625120000 -18000 1 CDT}
+ {2645679600 -21600 0 CST}
+ {2656569600 -18000 1 CDT}
+ {2677129200 -21600 0 CST}
+ {2688624000 -18000 1 CDT}
+ {2709183600 -21600 0 CST}
+ {2720073600 -18000 1 CDT}
+ {2740633200 -21600 0 CST}
+ {2751523200 -18000 1 CDT}
+ {2772082800 -21600 0 CST}
+ {2782972800 -18000 1 CDT}
+ {2803532400 -21600 0 CST}
+ {2814422400 -18000 1 CDT}
+ {2834982000 -21600 0 CST}
+ {2846476800 -18000 1 CDT}
+ {2867036400 -21600 0 CST}
+ {2877926400 -18000 1 CDT}
+ {2898486000 -21600 0 CST}
+ {2909376000 -18000 1 CDT}
+ {2929935600 -21600 0 CST}
+ {2940825600 -18000 1 CDT}
+ {2961385200 -21600 0 CST}
+ {2972275200 -18000 1 CDT}
+ {2992834800 -21600 0 CST}
+ {3003724800 -18000 1 CDT}
+ {3024284400 -21600 0 CST}
+ {3035779200 -18000 1 CDT}
+ {3056338800 -21600 0 CST}
+ {3067228800 -18000 1 CDT}
+ {3087788400 -21600 0 CST}
+ {3098678400 -18000 1 CDT}
+ {3119238000 -21600 0 CST}
+ {3130128000 -18000 1 CDT}
+ {3150687600 -21600 0 CST}
+ {3161577600 -18000 1 CDT}
+ {3182137200 -21600 0 CST}
+ {3193027200 -18000 1 CDT}
+ {3213586800 -21600 0 CST}
+ {3225081600 -18000 1 CDT}
+ {3245641200 -21600 0 CST}
+ {3256531200 -18000 1 CDT}
+ {3277090800 -21600 0 CST}
+ {3287980800 -18000 1 CDT}
+ {3308540400 -21600 0 CST}
+ {3319430400 -18000 1 CDT}
+ {3339990000 -21600 0 CST}
+ {3350880000 -18000 1 CDT}
+ {3371439600 -21600 0 CST}
+ {3382934400 -18000 1 CDT}
+ {3403494000 -21600 0 CST}
+ {3414384000 -18000 1 CDT}
+ {3434943600 -21600 0 CST}
+ {3445833600 -18000 1 CDT}
+ {3466393200 -21600 0 CST}
+ {3477283200 -18000 1 CDT}
+ {3497842800 -21600 0 CST}
+ {3508732800 -18000 1 CDT}
+ {3529292400 -21600 0 CST}
+ {3540182400 -18000 1 CDT}
+ {3560742000 -21600 0 CST}
+ {3572236800 -18000 1 CDT}
+ {3592796400 -21600 0 CST}
+ {3603686400 -18000 1 CDT}
+ {3624246000 -21600 0 CST}
+ {3635136000 -18000 1 CDT}
+ {3655695600 -21600 0 CST}
+ {3666585600 -18000 1 CDT}
+ {3687145200 -21600 0 CST}
+ {3698035200 -18000 1 CDT}
+ {3718594800 -21600 0 CST}
+ {3730089600 -18000 1 CDT}
+ {3750649200 -21600 0 CST}
+ {3761539200 -18000 1 CDT}
+ {3782098800 -21600 0 CST}
+ {3792988800 -18000 1 CDT}
+ {3813548400 -21600 0 CST}
+ {3824438400 -18000 1 CDT}
+ {3844998000 -21600 0 CST}
+ {3855888000 -18000 1 CDT}
+ {3876447600 -21600 0 CST}
+ {3887337600 -18000 1 CDT}
+ {3907897200 -21600 0 CST}
+ {3919392000 -18000 1 CDT}
+ {3939951600 -21600 0 CST}
+ {3950841600 -18000 1 CDT}
+ {3971401200 -21600 0 CST}
+ {3982291200 -18000 1 CDT}
+ {4002850800 -21600 0 CST}
+ {4013740800 -18000 1 CDT}
+ {4034300400 -21600 0 CST}
+ {4045190400 -18000 1 CDT}
+ {4065750000 -21600 0 CST}
+ {4076640000 -18000 1 CDT}
+ {4097199600 -21600 0 CST}
}
diff --git a/library/tzdata/America/Pangnirtung b/library/tzdata/America/Pangnirtung
index 14d8516..b7db25d 100644
--- a/library/tzdata/America/Pangnirtung
+++ b/library/tzdata/America/Pangnirtung
@@ -1,252 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Pangnirtung) {
- {-9223372036854775808 0 0 -00}
- {-1546300800 -14400 0 AST}
- {-880221600 -10800 1 AWT}
- {-769395600 -10800 1 APT}
- {-765399600 -14400 0 AST}
- {-147902400 -7200 1 ADDT}
- {-131572800 -14400 0 AST}
- {325663200 -10800 1 ADT}
- {341384400 -14400 0 AST}
- {357112800 -10800 1 ADT}
- {372834000 -14400 0 AST}
- {388562400 -10800 1 ADT}
- {404888400 -14400 0 AST}
- {420012000 -10800 1 ADT}
- {436338000 -14400 0 AST}
- {452066400 -10800 1 ADT}
- {467787600 -14400 0 AST}
- {483516000 -10800 1 ADT}
- {499237200 -14400 0 AST}
- {514965600 -10800 1 ADT}
- {530686800 -14400 0 AST}
- {544600800 -10800 1 ADT}
- {562136400 -14400 0 AST}
- {576050400 -10800 1 ADT}
- {594190800 -14400 0 AST}
- {607500000 -10800 1 ADT}
- {625640400 -14400 0 AST}
- {638949600 -10800 1 ADT}
- {657090000 -14400 0 AST}
- {671004000 -10800 1 ADT}
- {688539600 -14400 0 AST}
- {702453600 -10800 1 ADT}
- {719989200 -14400 0 AST}
- {733903200 -10800 1 ADT}
- {752043600 -14400 0 AST}
- {765352800 -10800 1 ADT}
- {783493200 -14400 0 AST}
- {796802400 -18000 0 EST}
- {796806000 -14400 1 EDT}
- {814946400 -18000 0 EST}
- {828860400 -14400 1 EDT}
- {846396000 -18000 0 EST}
- {860310000 -14400 1 EDT}
- {877845600 -18000 0 EST}
- {891759600 -14400 1 EDT}
- {909295200 -18000 0 EST}
- {923209200 -14400 1 EDT}
- {941353200 -21600 0 CST}
- {954662400 -18000 1 CDT}
- {972806400 -18000 0 EST}
- {986108400 -14400 1 EDT}
- {1004248800 -18000 0 EST}
- {1018162800 -14400 1 EDT}
- {1035698400 -18000 0 EST}
- {1049612400 -14400 1 EDT}
- {1067148000 -18000 0 EST}
- {1081062000 -14400 1 EDT}
- {1099202400 -18000 0 EST}
- {1112511600 -14400 1 EDT}
- {1130652000 -18000 0 EST}
- {1143961200 -14400 1 EDT}
- {1162101600 -18000 0 EST}
- {1173596400 -14400 1 EDT}
- {1194156000 -18000 0 EST}
- {1205046000 -14400 1 EDT}
- {1225605600 -18000 0 EST}
- {1236495600 -14400 1 EDT}
- {1257055200 -18000 0 EST}
- {1268550000 -14400 1 EDT}
- {1289109600 -18000 0 EST}
- {1299999600 -14400 1 EDT}
- {1320559200 -18000 0 EST}
- {1331449200 -14400 1 EDT}
- {1352008800 -18000 0 EST}
- {1362898800 -14400 1 EDT}
- {1383458400 -18000 0 EST}
- {1394348400 -14400 1 EDT}
- {1414908000 -18000 0 EST}
- {1425798000 -14400 1 EDT}
- {1446357600 -18000 0 EST}
- {1457852400 -14400 1 EDT}
- {1478412000 -18000 0 EST}
- {1489302000 -14400 1 EDT}
- {1509861600 -18000 0 EST}
- {1520751600 -14400 1 EDT}
- {1541311200 -18000 0 EST}
- {1552201200 -14400 1 EDT}
- {1572760800 -18000 0 EST}
- {1583650800 -14400 1 EDT}
- {1604210400 -18000 0 EST}
- {1615705200 -14400 1 EDT}
- {1636264800 -18000 0 EST}
- {1647154800 -14400 1 EDT}
- {1667714400 -18000 0 EST}
- {1678604400 -14400 1 EDT}
- {1699164000 -18000 0 EST}
- {1710054000 -14400 1 EDT}
- {1730613600 -18000 0 EST}
- {1741503600 -14400 1 EDT}
- {1762063200 -18000 0 EST}
- {1772953200 -14400 1 EDT}
- {1793512800 -18000 0 EST}
- {1805007600 -14400 1 EDT}
- {1825567200 -18000 0 EST}
- {1836457200 -14400 1 EDT}
- {1857016800 -18000 0 EST}
- {1867906800 -14400 1 EDT}
- {1888466400 -18000 0 EST}
- {1899356400 -14400 1 EDT}
- {1919916000 -18000 0 EST}
- {1930806000 -14400 1 EDT}
- {1951365600 -18000 0 EST}
- {1962860400 -14400 1 EDT}
- {1983420000 -18000 0 EST}
- {1994310000 -14400 1 EDT}
- {2014869600 -18000 0 EST}
- {2025759600 -14400 1 EDT}
- {2046319200 -18000 0 EST}
- {2057209200 -14400 1 EDT}
- {2077768800 -18000 0 EST}
- {2088658800 -14400 1 EDT}
- {2109218400 -18000 0 EST}
- {2120108400 -14400 1 EDT}
- {2140668000 -18000 0 EST}
- {2152162800 -14400 1 EDT}
- {2172722400 -18000 0 EST}
- {2183612400 -14400 1 EDT}
- {2204172000 -18000 0 EST}
- {2215062000 -14400 1 EDT}
- {2235621600 -18000 0 EST}
- {2246511600 -14400 1 EDT}
- {2267071200 -18000 0 EST}
- {2277961200 -14400 1 EDT}
- {2298520800 -18000 0 EST}
- {2309410800 -14400 1 EDT}
- {2329970400 -18000 0 EST}
- {2341465200 -14400 1 EDT}
- {2362024800 -18000 0 EST}
- {2372914800 -14400 1 EDT}
- {2393474400 -18000 0 EST}
- {2404364400 -14400 1 EDT}
- {2424924000 -18000 0 EST}
- {2435814000 -14400 1 EDT}
- {2456373600 -18000 0 EST}
- {2467263600 -14400 1 EDT}
- {2487823200 -18000 0 EST}
- {2499318000 -14400 1 EDT}
- {2519877600 -18000 0 EST}
- {2530767600 -14400 1 EDT}
- {2551327200 -18000 0 EST}
- {2562217200 -14400 1 EDT}
- {2582776800 -18000 0 EST}
- {2593666800 -14400 1 EDT}
- {2614226400 -18000 0 EST}
- {2625116400 -14400 1 EDT}
- {2645676000 -18000 0 EST}
- {2656566000 -14400 1 EDT}
- {2677125600 -18000 0 EST}
- {2688620400 -14400 1 EDT}
- {2709180000 -18000 0 EST}
- {2720070000 -14400 1 EDT}
- {2740629600 -18000 0 EST}
- {2751519600 -14400 1 EDT}
- {2772079200 -18000 0 EST}
- {2782969200 -14400 1 EDT}
- {2803528800 -18000 0 EST}
- {2814418800 -14400 1 EDT}
- {2834978400 -18000 0 EST}
- {2846473200 -14400 1 EDT}
- {2867032800 -18000 0 EST}
- {2877922800 -14400 1 EDT}
- {2898482400 -18000 0 EST}
- {2909372400 -14400 1 EDT}
- {2929932000 -18000 0 EST}
- {2940822000 -14400 1 EDT}
- {2961381600 -18000 0 EST}
- {2972271600 -14400 1 EDT}
- {2992831200 -18000 0 EST}
- {3003721200 -14400 1 EDT}
- {3024280800 -18000 0 EST}
- {3035775600 -14400 1 EDT}
- {3056335200 -18000 0 EST}
- {3067225200 -14400 1 EDT}
- {3087784800 -18000 0 EST}
- {3098674800 -14400 1 EDT}
- {3119234400 -18000 0 EST}
- {3130124400 -14400 1 EDT}
- {3150684000 -18000 0 EST}
- {3161574000 -14400 1 EDT}
- {3182133600 -18000 0 EST}
- {3193023600 -14400 1 EDT}
- {3213583200 -18000 0 EST}
- {3225078000 -14400 1 EDT}
- {3245637600 -18000 0 EST}
- {3256527600 -14400 1 EDT}
- {3277087200 -18000 0 EST}
- {3287977200 -14400 1 EDT}
- {3308536800 -18000 0 EST}
- {3319426800 -14400 1 EDT}
- {3339986400 -18000 0 EST}
- {3350876400 -14400 1 EDT}
- {3371436000 -18000 0 EST}
- {3382930800 -14400 1 EDT}
- {3403490400 -18000 0 EST}
- {3414380400 -14400 1 EDT}
- {3434940000 -18000 0 EST}
- {3445830000 -14400 1 EDT}
- {3466389600 -18000 0 EST}
- {3477279600 -14400 1 EDT}
- {3497839200 -18000 0 EST}
- {3508729200 -14400 1 EDT}
- {3529288800 -18000 0 EST}
- {3540178800 -14400 1 EDT}
- {3560738400 -18000 0 EST}
- {3572233200 -14400 1 EDT}
- {3592792800 -18000 0 EST}
- {3603682800 -14400 1 EDT}
- {3624242400 -18000 0 EST}
- {3635132400 -14400 1 EDT}
- {3655692000 -18000 0 EST}
- {3666582000 -14400 1 EDT}
- {3687141600 -18000 0 EST}
- {3698031600 -14400 1 EDT}
- {3718591200 -18000 0 EST}
- {3730086000 -14400 1 EDT}
- {3750645600 -18000 0 EST}
- {3761535600 -14400 1 EDT}
- {3782095200 -18000 0 EST}
- {3792985200 -14400 1 EDT}
- {3813544800 -18000 0 EST}
- {3824434800 -14400 1 EDT}
- {3844994400 -18000 0 EST}
- {3855884400 -14400 1 EDT}
- {3876444000 -18000 0 EST}
- {3887334000 -14400 1 EDT}
- {3907893600 -18000 0 EST}
- {3919388400 -14400 1 EDT}
- {3939948000 -18000 0 EST}
- {3950838000 -14400 1 EDT}
- {3971397600 -18000 0 EST}
- {3982287600 -14400 1 EDT}
- {4002847200 -18000 0 EST}
- {4013737200 -14400 1 EDT}
- {4034296800 -18000 0 EST}
- {4045186800 -14400 1 EDT}
- {4065746400 -18000 0 EST}
- {4076636400 -14400 1 EDT}
- {4097196000 -18000 0 EST}
+if {![info exists TZData(America/Iqaluit)]} {
+ LoadTimeZoneFile America/Iqaluit
}
+set TZData(:America/Pangnirtung) $TZData(:America/Iqaluit)
diff --git a/library/tzdata/America/Paramaribo b/library/tzdata/America/Paramaribo
index 7a80f1d..c287c38 100644
--- a/library/tzdata/America/Paramaribo
+++ b/library/tzdata/America/Paramaribo
@@ -4,6 +4,6 @@ set TZData(:America/Paramaribo) {
{-9223372036854775808 -13240 0 LMT}
{-1861906760 -13252 0 PMT}
{-1104524348 -13236 0 PMT}
- {-765317964 -12600 0 -0330}
- {465449400 -10800 0 -03}
+ {-765317964 -12600 0 -0430}
+ {465449400 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Porto_Velho b/library/tzdata/America/Porto_Velho
index 8d7c8fd..26dc81b 100644
--- a/library/tzdata/America/Porto_Velho
+++ b/library/tzdata/America/Porto_Velho
@@ -2,34 +2,34 @@
set TZData(:America/Porto_Velho) {
{-9223372036854775808 -15336 0 LMT}
- {-1767210264 -14400 0 -04}
- {-1206954000 -10800 1 -04}
- {-1191358800 -14400 0 -04}
- {-1175371200 -10800 1 -04}
- {-1159822800 -14400 0 -04}
- {-633816000 -10800 1 -04}
- {-622065600 -14400 0 -04}
- {-602280000 -10800 1 -04}
- {-591829200 -14400 0 -04}
- {-570744000 -10800 1 -04}
- {-560206800 -14400 0 -04}
- {-539121600 -10800 1 -04}
- {-531349200 -14400 0 -04}
- {-191361600 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-155160000 -10800 1 -04}
- {-150066000 -14400 0 -04}
- {-128894400 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-99950400 -10800 1 -04}
- {-89586000 -14400 0 -04}
- {-68414400 -10800 1 -04}
- {-57963600 -14400 0 -04}
- {499752000 -10800 1 -04}
- {511239600 -14400 0 -04}
- {530596800 -10800 1 -04}
- {540270000 -14400 0 -04}
- {562132800 -10800 1 -04}
- {571201200 -14400 0 -04}
- {590036400 -14400 0 -04}
+ {-1767210264 -14400 0 -0400}
+ {-1206954000 -10800 1 -0300}
+ {-1191358800 -14400 0 -0400}
+ {-1175371200 -10800 1 -0300}
+ {-1159822800 -14400 0 -0400}
+ {-633816000 -10800 1 -0300}
+ {-622065600 -14400 0 -0400}
+ {-602280000 -10800 1 -0300}
+ {-591829200 -14400 0 -0400}
+ {-570744000 -10800 1 -0300}
+ {-560206800 -14400 0 -0400}
+ {-539121600 -10800 1 -0300}
+ {-531349200 -14400 0 -0400}
+ {-191361600 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-155160000 -10800 1 -0300}
+ {-150066000 -14400 0 -0400}
+ {-128894400 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-99950400 -10800 1 -0300}
+ {-89586000 -14400 0 -0400}
+ {-68414400 -10800 1 -0300}
+ {-57963600 -14400 0 -0400}
+ {499752000 -10800 1 -0300}
+ {511239600 -14400 0 -0400}
+ {530596800 -10800 1 -0300}
+ {540270000 -14400 0 -0400}
+ {562132800 -10800 1 -0300}
+ {571201200 -14400 0 -0400}
+ {590036400 -14400 0 -0400}
}
diff --git a/library/tzdata/America/Punta_Arenas b/library/tzdata/America/Punta_Arenas
index 8b06e6a..0589191 100644
--- a/library/tzdata/America/Punta_Arenas
+++ b/library/tzdata/America/Punta_Arenas
@@ -3,121 +3,121 @@
set TZData(:America/Punta_Arenas) {
{-9223372036854775808 -17020 0 LMT}
{-2524504580 -16965 0 SMT}
- {-1892661435 -18000 0 -05}
+ {-1892661435 -18000 0 -0500}
{-1688410800 -16965 0 SMT}
- {-1619205435 -14400 0 -04}
+ {-1619205435 -14400 0 -0400}
{-1593806400 -16965 0 SMT}
- {-1335986235 -18000 0 -05}
- {-1335985200 -14400 1 -05}
- {-1317585600 -18000 0 -05}
- {-1304362800 -14400 1 -05}
- {-1286049600 -18000 0 -05}
- {-1272826800 -14400 1 -05}
- {-1254513600 -18000 0 -05}
- {-1241290800 -14400 1 -05}
- {-1222977600 -18000 0 -05}
- {-1209754800 -14400 1 -05}
- {-1191355200 -18000 0 -05}
- {-1178132400 -14400 0 -04}
- {-870552000 -18000 0 -05}
- {-865278000 -14400 0 -04}
- {-736632000 -14400 1 -04}
- {-718056000 -18000 0 -05}
- {-713649600 -14400 0 -04}
- {-36619200 -10800 1 -04}
- {-23922000 -14400 0 -04}
- {-3355200 -10800 1 -04}
- {7527600 -14400 0 -04}
- {24465600 -10800 1 -04}
- {37767600 -14400 0 -04}
- {55915200 -10800 1 -04}
- {69217200 -14400 0 -04}
- {87969600 -10800 1 -04}
- {100666800 -14400 0 -04}
- {118209600 -10800 1 -04}
- {132116400 -14400 0 -04}
- {150868800 -10800 1 -04}
- {163566000 -14400 0 -04}
- {182318400 -10800 1 -04}
- {195620400 -14400 0 -04}
- {213768000 -10800 1 -04}
- {227070000 -14400 0 -04}
- {245217600 -10800 1 -04}
- {258519600 -14400 0 -04}
- {277272000 -10800 1 -04}
- {289969200 -14400 0 -04}
- {308721600 -10800 1 -04}
- {321418800 -14400 0 -04}
- {340171200 -10800 1 -04}
- {353473200 -14400 0 -04}
- {371620800 -10800 1 -04}
- {384922800 -14400 0 -04}
- {403070400 -10800 1 -04}
- {416372400 -14400 0 -04}
- {434520000 -10800 1 -04}
- {447822000 -14400 0 -04}
- {466574400 -10800 1 -04}
- {479271600 -14400 0 -04}
- {498024000 -10800 1 -04}
- {510721200 -14400 0 -04}
- {529473600 -10800 1 -04}
- {545194800 -14400 0 -04}
- {560923200 -10800 1 -04}
- {574225200 -14400 0 -04}
- {592372800 -10800 1 -04}
- {605674800 -14400 0 -04}
- {624427200 -10800 1 -04}
- {637124400 -14400 0 -04}
- {653457600 -10800 1 -04}
- {668574000 -14400 0 -04}
- {687326400 -10800 1 -04}
- {700628400 -14400 0 -04}
- {718776000 -10800 1 -04}
- {732078000 -14400 0 -04}
- {750225600 -10800 1 -04}
- {763527600 -14400 0 -04}
- {781675200 -10800 1 -04}
- {794977200 -14400 0 -04}
- {813729600 -10800 1 -04}
- {826426800 -14400 0 -04}
- {845179200 -10800 1 -04}
- {859690800 -14400 0 -04}
- {876628800 -10800 1 -04}
- {889930800 -14400 0 -04}
- {906868800 -10800 1 -04}
- {923194800 -14400 0 -04}
- {939528000 -10800 1 -04}
- {952830000 -14400 0 -04}
- {971582400 -10800 1 -04}
- {984279600 -14400 0 -04}
- {1003032000 -10800 1 -04}
- {1015729200 -14400 0 -04}
- {1034481600 -10800 1 -04}
- {1047178800 -14400 0 -04}
- {1065931200 -10800 1 -04}
- {1079233200 -14400 0 -04}
- {1097380800 -10800 1 -04}
- {1110682800 -14400 0 -04}
- {1128830400 -10800 1 -04}
- {1142132400 -14400 0 -04}
- {1160884800 -10800 1 -04}
- {1173582000 -14400 0 -04}
- {1192334400 -10800 1 -04}
- {1206846000 -14400 0 -04}
- {1223784000 -10800 1 -04}
- {1237086000 -14400 0 -04}
- {1255233600 -10800 1 -04}
- {1270350000 -14400 0 -04}
- {1286683200 -10800 1 -04}
- {1304823600 -14400 0 -04}
- {1313899200 -10800 1 -04}
- {1335668400 -14400 0 -04}
- {1346558400 -10800 1 -04}
- {1367118000 -14400 0 -04}
- {1378612800 -10800 1 -04}
- {1398567600 -14400 0 -04}
- {1410062400 -10800 1 -04}
- {1463281200 -14400 0 -04}
- {1471147200 -10800 1 -04}
- {1480820400 -10800 0 -03}
+ {-1335986235 -18000 0 -0500}
+ {-1335985200 -14400 1 -0400}
+ {-1317585600 -18000 0 -0500}
+ {-1304362800 -14400 1 -0400}
+ {-1286049600 -18000 0 -0500}
+ {-1272826800 -14400 1 -0400}
+ {-1254513600 -18000 0 -0500}
+ {-1241290800 -14400 1 -0400}
+ {-1222977600 -18000 0 -0500}
+ {-1209754800 -14400 1 -0400}
+ {-1191355200 -18000 0 -0500}
+ {-1178132400 -14400 0 -0400}
+ {-870552000 -18000 0 -0500}
+ {-865278000 -14400 0 -0400}
+ {-736632000 -14400 1 -0400}
+ {-718056000 -18000 0 -0500}
+ {-713649600 -14400 0 -0400}
+ {-36619200 -10800 1 -0300}
+ {-23922000 -14400 0 -0400}
+ {-3355200 -10800 1 -0300}
+ {7527600 -14400 0 -0400}
+ {24465600 -10800 1 -0300}
+ {37767600 -14400 0 -0400}
+ {55915200 -10800 1 -0300}
+ {69217200 -14400 0 -0400}
+ {87969600 -10800 1 -0300}
+ {100666800 -14400 0 -0400}
+ {118209600 -10800 1 -0300}
+ {132116400 -14400 0 -0400}
+ {150868800 -10800 1 -0300}
+ {163566000 -14400 0 -0400}
+ {182318400 -10800 1 -0300}
+ {195620400 -14400 0 -0400}
+ {213768000 -10800 1 -0300}
+ {227070000 -14400 0 -0400}
+ {245217600 -10800 1 -0300}
+ {258519600 -14400 0 -0400}
+ {277272000 -10800 1 -0300}
+ {289969200 -14400 0 -0400}
+ {308721600 -10800 1 -0300}
+ {321418800 -14400 0 -0400}
+ {340171200 -10800 1 -0300}
+ {353473200 -14400 0 -0400}
+ {371620800 -10800 1 -0300}
+ {384922800 -14400 0 -0400}
+ {403070400 -10800 1 -0300}
+ {416372400 -14400 0 -0400}
+ {434520000 -10800 1 -0300}
+ {447822000 -14400 0 -0400}
+ {466574400 -10800 1 -0300}
+ {479271600 -14400 0 -0400}
+ {498024000 -10800 1 -0300}
+ {510721200 -14400 0 -0400}
+ {529473600 -10800 1 -0300}
+ {545194800 -14400 0 -0400}
+ {560923200 -10800 1 -0300}
+ {574225200 -14400 0 -0400}
+ {592372800 -10800 1 -0300}
+ {605674800 -14400 0 -0400}
+ {624427200 -10800 1 -0300}
+ {637124400 -14400 0 -0400}
+ {653457600 -10800 1 -0300}
+ {668574000 -14400 0 -0400}
+ {687326400 -10800 1 -0300}
+ {700628400 -14400 0 -0400}
+ {718776000 -10800 1 -0300}
+ {732078000 -14400 0 -0400}
+ {750225600 -10800 1 -0300}
+ {763527600 -14400 0 -0400}
+ {781675200 -10800 1 -0300}
+ {794977200 -14400 0 -0400}
+ {813729600 -10800 1 -0300}
+ {826426800 -14400 0 -0400}
+ {845179200 -10800 1 -0300}
+ {859690800 -14400 0 -0400}
+ {876628800 -10800 1 -0300}
+ {889930800 -14400 0 -0400}
+ {906868800 -10800 1 -0300}
+ {923194800 -14400 0 -0400}
+ {939528000 -10800 1 -0300}
+ {952830000 -14400 0 -0400}
+ {971582400 -10800 1 -0300}
+ {984279600 -14400 0 -0400}
+ {1003032000 -10800 1 -0300}
+ {1015729200 -14400 0 -0400}
+ {1034481600 -10800 1 -0300}
+ {1047178800 -14400 0 -0400}
+ {1065931200 -10800 1 -0300}
+ {1079233200 -14400 0 -0400}
+ {1097380800 -10800 1 -0300}
+ {1110682800 -14400 0 -0400}
+ {1128830400 -10800 1 -0300}
+ {1142132400 -14400 0 -0400}
+ {1160884800 -10800 1 -0300}
+ {1173582000 -14400 0 -0400}
+ {1192334400 -10800 1 -0300}
+ {1206846000 -14400 0 -0400}
+ {1223784000 -10800 1 -0300}
+ {1237086000 -14400 0 -0400}
+ {1255233600 -10800 1 -0300}
+ {1270350000 -14400 0 -0400}
+ {1286683200 -10800 1 -0300}
+ {1304823600 -14400 0 -0400}
+ {1313899200 -10800 1 -0300}
+ {1335668400 -14400 0 -0400}
+ {1346558400 -10800 1 -0300}
+ {1367118000 -14400 0 -0400}
+ {1378612800 -10800 1 -0300}
+ {1398567600 -14400 0 -0400}
+ {1410062400 -10800 1 -0300}
+ {1463281200 -14400 0 -0400}
+ {1471147200 -10800 1 -0300}
+ {1480820400 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Rainy_River b/library/tzdata/America/Rainy_River
index a2b11aa..17fccb4 100644
--- a/library/tzdata/America/Rainy_River
+++ b/library/tzdata/America/Rainy_River
@@ -1,264 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Rainy_River) {
- {-9223372036854775808 -22696 0 LMT}
- {-2366732504 -21600 0 CST}
- {-1632067200 -18000 1 CDT}
- {-1615136400 -21600 0 CST}
- {-923248800 -18000 1 CDT}
- {-880214400 -18000 0 CWT}
- {-769395600 -18000 1 CPT}
- {-765392400 -21600 0 CST}
- {136368000 -18000 1 CDT}
- {152089200 -21600 0 CST}
- {167817600 -18000 1 CDT}
- {183538800 -21600 0 CST}
- {199267200 -18000 1 CDT}
- {215593200 -21600 0 CST}
- {230716800 -18000 1 CDT}
- {247042800 -21600 0 CST}
- {262771200 -18000 1 CDT}
- {278492400 -21600 0 CST}
- {294220800 -18000 1 CDT}
- {309942000 -21600 0 CST}
- {325670400 -18000 1 CDT}
- {341391600 -21600 0 CST}
- {357120000 -18000 1 CDT}
- {372841200 -21600 0 CST}
- {388569600 -18000 1 CDT}
- {404895600 -21600 0 CST}
- {420019200 -18000 1 CDT}
- {436345200 -21600 0 CST}
- {452073600 -18000 1 CDT}
- {467794800 -21600 0 CST}
- {483523200 -18000 1 CDT}
- {499244400 -21600 0 CST}
- {514972800 -18000 1 CDT}
- {530694000 -21600 0 CST}
- {544608000 -18000 1 CDT}
- {562143600 -21600 0 CST}
- {576057600 -18000 1 CDT}
- {594198000 -21600 0 CST}
- {607507200 -18000 1 CDT}
- {625647600 -21600 0 CST}
- {638956800 -18000 1 CDT}
- {657097200 -21600 0 CST}
- {671011200 -18000 1 CDT}
- {688546800 -21600 0 CST}
- {702460800 -18000 1 CDT}
- {719996400 -21600 0 CST}
- {733910400 -18000 1 CDT}
- {752050800 -21600 0 CST}
- {765360000 -18000 1 CDT}
- {783500400 -21600 0 CST}
- {796809600 -18000 1 CDT}
- {814950000 -21600 0 CST}
- {828864000 -18000 1 CDT}
- {846399600 -21600 0 CST}
- {860313600 -18000 1 CDT}
- {877849200 -21600 0 CST}
- {891763200 -18000 1 CDT}
- {909298800 -21600 0 CST}
- {923212800 -18000 1 CDT}
- {941353200 -21600 0 CST}
- {954662400 -18000 1 CDT}
- {972802800 -21600 0 CST}
- {986112000 -18000 1 CDT}
- {1004252400 -21600 0 CST}
- {1018166400 -18000 1 CDT}
- {1035702000 -21600 0 CST}
- {1049616000 -18000 1 CDT}
- {1067151600 -21600 0 CST}
- {1081065600 -18000 1 CDT}
- {1099206000 -21600 0 CST}
- {1112515200 -18000 1 CDT}
- {1130655600 -21600 0 CST}
- {1143964800 -18000 1 CDT}
- {1162105200 -21600 0 CST}
- {1173600000 -18000 1 CDT}
- {1194159600 -21600 0 CST}
- {1205049600 -18000 1 CDT}
- {1225609200 -21600 0 CST}
- {1236499200 -18000 1 CDT}
- {1257058800 -21600 0 CST}
- {1268553600 -18000 1 CDT}
- {1289113200 -21600 0 CST}
- {1300003200 -18000 1 CDT}
- {1320562800 -21600 0 CST}
- {1331452800 -18000 1 CDT}
- {1352012400 -21600 0 CST}
- {1362902400 -18000 1 CDT}
- {1383462000 -21600 0 CST}
- {1394352000 -18000 1 CDT}
- {1414911600 -21600 0 CST}
- {1425801600 -18000 1 CDT}
- {1446361200 -21600 0 CST}
- {1457856000 -18000 1 CDT}
- {1478415600 -21600 0 CST}
- {1489305600 -18000 1 CDT}
- {1509865200 -21600 0 CST}
- {1520755200 -18000 1 CDT}
- {1541314800 -21600 0 CST}
- {1552204800 -18000 1 CDT}
- {1572764400 -21600 0 CST}
- {1583654400 -18000 1 CDT}
- {1604214000 -21600 0 CST}
- {1615708800 -18000 1 CDT}
- {1636268400 -21600 0 CST}
- {1647158400 -18000 1 CDT}
- {1667718000 -21600 0 CST}
- {1678608000 -18000 1 CDT}
- {1699167600 -21600 0 CST}
- {1710057600 -18000 1 CDT}
- {1730617200 -21600 0 CST}
- {1741507200 -18000 1 CDT}
- {1762066800 -21600 0 CST}
- {1772956800 -18000 1 CDT}
- {1793516400 -21600 0 CST}
- {1805011200 -18000 1 CDT}
- {1825570800 -21600 0 CST}
- {1836460800 -18000 1 CDT}
- {1857020400 -21600 0 CST}
- {1867910400 -18000 1 CDT}
- {1888470000 -21600 0 CST}
- {1899360000 -18000 1 CDT}
- {1919919600 -21600 0 CST}
- {1930809600 -18000 1 CDT}
- {1951369200 -21600 0 CST}
- {1962864000 -18000 1 CDT}
- {1983423600 -21600 0 CST}
- {1994313600 -18000 1 CDT}
- {2014873200 -21600 0 CST}
- {2025763200 -18000 1 CDT}
- {2046322800 -21600 0 CST}
- {2057212800 -18000 1 CDT}
- {2077772400 -21600 0 CST}
- {2088662400 -18000 1 CDT}
- {2109222000 -21600 0 CST}
- {2120112000 -18000 1 CDT}
- {2140671600 -21600 0 CST}
- {2152166400 -18000 1 CDT}
- {2172726000 -21600 0 CST}
- {2183616000 -18000 1 CDT}
- {2204175600 -21600 0 CST}
- {2215065600 -18000 1 CDT}
- {2235625200 -21600 0 CST}
- {2246515200 -18000 1 CDT}
- {2267074800 -21600 0 CST}
- {2277964800 -18000 1 CDT}
- {2298524400 -21600 0 CST}
- {2309414400 -18000 1 CDT}
- {2329974000 -21600 0 CST}
- {2341468800 -18000 1 CDT}
- {2362028400 -21600 0 CST}
- {2372918400 -18000 1 CDT}
- {2393478000 -21600 0 CST}
- {2404368000 -18000 1 CDT}
- {2424927600 -21600 0 CST}
- {2435817600 -18000 1 CDT}
- {2456377200 -21600 0 CST}
- {2467267200 -18000 1 CDT}
- {2487826800 -21600 0 CST}
- {2499321600 -18000 1 CDT}
- {2519881200 -21600 0 CST}
- {2530771200 -18000 1 CDT}
- {2551330800 -21600 0 CST}
- {2562220800 -18000 1 CDT}
- {2582780400 -21600 0 CST}
- {2593670400 -18000 1 CDT}
- {2614230000 -21600 0 CST}
- {2625120000 -18000 1 CDT}
- {2645679600 -21600 0 CST}
- {2656569600 -18000 1 CDT}
- {2677129200 -21600 0 CST}
- {2688624000 -18000 1 CDT}
- {2709183600 -21600 0 CST}
- {2720073600 -18000 1 CDT}
- {2740633200 -21600 0 CST}
- {2751523200 -18000 1 CDT}
- {2772082800 -21600 0 CST}
- {2782972800 -18000 1 CDT}
- {2803532400 -21600 0 CST}
- {2814422400 -18000 1 CDT}
- {2834982000 -21600 0 CST}
- {2846476800 -18000 1 CDT}
- {2867036400 -21600 0 CST}
- {2877926400 -18000 1 CDT}
- {2898486000 -21600 0 CST}
- {2909376000 -18000 1 CDT}
- {2929935600 -21600 0 CST}
- {2940825600 -18000 1 CDT}
- {2961385200 -21600 0 CST}
- {2972275200 -18000 1 CDT}
- {2992834800 -21600 0 CST}
- {3003724800 -18000 1 CDT}
- {3024284400 -21600 0 CST}
- {3035779200 -18000 1 CDT}
- {3056338800 -21600 0 CST}
- {3067228800 -18000 1 CDT}
- {3087788400 -21600 0 CST}
- {3098678400 -18000 1 CDT}
- {3119238000 -21600 0 CST}
- {3130128000 -18000 1 CDT}
- {3150687600 -21600 0 CST}
- {3161577600 -18000 1 CDT}
- {3182137200 -21600 0 CST}
- {3193027200 -18000 1 CDT}
- {3213586800 -21600 0 CST}
- {3225081600 -18000 1 CDT}
- {3245641200 -21600 0 CST}
- {3256531200 -18000 1 CDT}
- {3277090800 -21600 0 CST}
- {3287980800 -18000 1 CDT}
- {3308540400 -21600 0 CST}
- {3319430400 -18000 1 CDT}
- {3339990000 -21600 0 CST}
- {3350880000 -18000 1 CDT}
- {3371439600 -21600 0 CST}
- {3382934400 -18000 1 CDT}
- {3403494000 -21600 0 CST}
- {3414384000 -18000 1 CDT}
- {3434943600 -21600 0 CST}
- {3445833600 -18000 1 CDT}
- {3466393200 -21600 0 CST}
- {3477283200 -18000 1 CDT}
- {3497842800 -21600 0 CST}
- {3508732800 -18000 1 CDT}
- {3529292400 -21600 0 CST}
- {3540182400 -18000 1 CDT}
- {3560742000 -21600 0 CST}
- {3572236800 -18000 1 CDT}
- {3592796400 -21600 0 CST}
- {3603686400 -18000 1 CDT}
- {3624246000 -21600 0 CST}
- {3635136000 -18000 1 CDT}
- {3655695600 -21600 0 CST}
- {3666585600 -18000 1 CDT}
- {3687145200 -21600 0 CST}
- {3698035200 -18000 1 CDT}
- {3718594800 -21600 0 CST}
- {3730089600 -18000 1 CDT}
- {3750649200 -21600 0 CST}
- {3761539200 -18000 1 CDT}
- {3782098800 -21600 0 CST}
- {3792988800 -18000 1 CDT}
- {3813548400 -21600 0 CST}
- {3824438400 -18000 1 CDT}
- {3844998000 -21600 0 CST}
- {3855888000 -18000 1 CDT}
- {3876447600 -21600 0 CST}
- {3887337600 -18000 1 CDT}
- {3907897200 -21600 0 CST}
- {3919392000 -18000 1 CDT}
- {3939951600 -21600 0 CST}
- {3950841600 -18000 1 CDT}
- {3971401200 -21600 0 CST}
- {3982291200 -18000 1 CDT}
- {4002850800 -21600 0 CST}
- {4013740800 -18000 1 CDT}
- {4034300400 -21600 0 CST}
- {4045190400 -18000 1 CDT}
- {4065750000 -21600 0 CST}
- {4076640000 -18000 1 CDT}
- {4097199600 -21600 0 CST}
+if {![info exists TZData(America/Winnipeg)]} {
+ LoadTimeZoneFile America/Winnipeg
}
+set TZData(:America/Rainy_River) $TZData(:America/Winnipeg)
diff --git a/library/tzdata/America/Rankin_Inlet b/library/tzdata/America/Rankin_Inlet
index 9ce9f8d..0f6db70 100644
--- a/library/tzdata/America/Rankin_Inlet
+++ b/library/tzdata/America/Rankin_Inlet
@@ -3,8 +3,22 @@
set TZData(:America/Rankin_Inlet) {
{-9223372036854775808 0 0 -00}
{-410227200 -21600 0 CST}
- {-147895200 -14400 1 CDDT}
- {-131565600 -21600 0 CST}
+ {73468800 -18000 1 CDT}
+ {89190000 -21600 0 CST}
+ {104918400 -18000 1 CDT}
+ {120639600 -21600 0 CST}
+ {136368000 -18000 1 CDT}
+ {152089200 -21600 0 CST}
+ {167817600 -18000 1 CDT}
+ {183538800 -21600 0 CST}
+ {199267200 -18000 1 CDT}
+ {215593200 -21600 0 CST}
+ {230716800 -18000 1 CDT}
+ {247042800 -21600 0 CST}
+ {262771200 -18000 1 CDT}
+ {278492400 -21600 0 CST}
+ {294220800 -18000 1 CDT}
+ {309942000 -21600 0 CST}
{325670400 -18000 1 CDT}
{341391600 -21600 0 CST}
{357120000 -18000 1 CDT}
diff --git a/library/tzdata/America/Recife b/library/tzdata/America/Recife
index db0a445..078bb83 100644
--- a/library/tzdata/America/Recife
+++ b/library/tzdata/America/Recife
@@ -2,47 +2,47 @@
set TZData(:America/Recife) {
{-9223372036854775808 -8376 0 LMT}
- {-1767217224 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-191365200 -7200 1 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {592974000 -7200 1 -03}
- {602042400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {634701600 -10800 0 -03}
- {653536800 -10800 0 -03}
- {938660400 -10800 0 -03}
- {938919600 -7200 1 -03}
- {951616800 -10800 0 -03}
- {970974000 -7200 1 -03}
- {971575200 -10800 0 -03}
- {1000350000 -10800 0 -03}
- {1003028400 -7200 1 -03}
- {1013911200 -10800 0 -03}
- {1033437600 -10800 0 -03}
+ {-1767217224 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-191365200 -7200 1 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {592974000 -7200 1 -0200}
+ {602042400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {634701600 -10800 0 -0300}
+ {653536800 -10800 0 -0300}
+ {938660400 -10800 0 -0300}
+ {938919600 -7200 1 -0200}
+ {951616800 -10800 0 -0300}
+ {970974000 -7200 1 -0200}
+ {971575200 -10800 0 -0300}
+ {1000350000 -10800 0 -0300}
+ {1003028400 -7200 1 -0200}
+ {1013911200 -10800 0 -0300}
+ {1033437600 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Resolute b/library/tzdata/America/Resolute
index a9881b4..27e7300 100644
--- a/library/tzdata/America/Resolute
+++ b/library/tzdata/America/Resolute
@@ -3,8 +3,22 @@
set TZData(:America/Resolute) {
{-9223372036854775808 0 0 -00}
{-704937600 -21600 0 CST}
- {-147895200 -14400 1 CDDT}
- {-131565600 -21600 0 CST}
+ {73468800 -18000 1 CDT}
+ {89190000 -21600 0 CST}
+ {104918400 -18000 1 CDT}
+ {120639600 -21600 0 CST}
+ {136368000 -18000 1 CDT}
+ {152089200 -21600 0 CST}
+ {167817600 -18000 1 CDT}
+ {183538800 -21600 0 CST}
+ {199267200 -18000 1 CDT}
+ {215593200 -21600 0 CST}
+ {230716800 -18000 1 CDT}
+ {247042800 -21600 0 CST}
+ {262771200 -18000 1 CDT}
+ {278492400 -21600 0 CST}
+ {294220800 -18000 1 CDT}
+ {309942000 -21600 0 CST}
{325670400 -18000 1 CDT}
{341391600 -21600 0 CST}
{357120000 -18000 1 CDT}
diff --git a/library/tzdata/America/Rio_Branco b/library/tzdata/America/Rio_Branco
index 088800b..1e7425f 100644
--- a/library/tzdata/America/Rio_Branco
+++ b/library/tzdata/America/Rio_Branco
@@ -2,36 +2,36 @@
set TZData(:America/Rio_Branco) {
{-9223372036854775808 -16272 0 LMT}
- {-1767209328 -18000 0 -05}
- {-1206950400 -14400 1 -05}
- {-1191355200 -18000 0 -05}
- {-1175367600 -14400 1 -05}
- {-1159819200 -18000 0 -05}
- {-633812400 -14400 1 -05}
- {-622062000 -18000 0 -05}
- {-602276400 -14400 1 -05}
- {-591825600 -18000 0 -05}
- {-570740400 -14400 1 -05}
- {-560203200 -18000 0 -05}
- {-539118000 -14400 1 -05}
- {-531345600 -18000 0 -05}
- {-191358000 -14400 1 -05}
- {-184190400 -18000 0 -05}
- {-155156400 -14400 1 -05}
- {-150062400 -18000 0 -05}
- {-128890800 -14400 1 -05}
- {-121118400 -18000 0 -05}
- {-99946800 -14400 1 -05}
- {-89582400 -18000 0 -05}
- {-68410800 -14400 1 -05}
- {-57960000 -18000 0 -05}
- {499755600 -14400 1 -05}
- {511243200 -18000 0 -05}
- {530600400 -14400 1 -05}
- {540273600 -18000 0 -05}
- {562136400 -14400 1 -05}
- {571204800 -18000 0 -05}
- {590040000 -18000 0 -05}
- {1214283600 -14400 0 -04}
- {1384056000 -18000 0 -05}
+ {-1767209328 -18000 0 -0500}
+ {-1206950400 -14400 1 -0400}
+ {-1191355200 -18000 0 -0500}
+ {-1175367600 -14400 1 -0400}
+ {-1159819200 -18000 0 -0500}
+ {-633812400 -14400 1 -0400}
+ {-622062000 -18000 0 -0500}
+ {-602276400 -14400 1 -0400}
+ {-591825600 -18000 0 -0500}
+ {-570740400 -14400 1 -0400}
+ {-560203200 -18000 0 -0500}
+ {-539118000 -14400 1 -0400}
+ {-531345600 -18000 0 -0500}
+ {-191358000 -14400 1 -0400}
+ {-184190400 -18000 0 -0500}
+ {-155156400 -14400 1 -0400}
+ {-150062400 -18000 0 -0500}
+ {-128890800 -14400 1 -0400}
+ {-121118400 -18000 0 -0500}
+ {-99946800 -14400 1 -0400}
+ {-89582400 -18000 0 -0500}
+ {-68410800 -14400 1 -0400}
+ {-57960000 -18000 0 -0500}
+ {499755600 -14400 1 -0400}
+ {511243200 -18000 0 -0500}
+ {530600400 -14400 1 -0400}
+ {540273600 -18000 0 -0500}
+ {562136400 -14400 1 -0400}
+ {571204800 -18000 0 -0500}
+ {590040000 -18000 0 -0500}
+ {1214283600 -14400 0 -0400}
+ {1384056000 -18000 0 -0500}
}
diff --git a/library/tzdata/America/Santarem b/library/tzdata/America/Santarem
index 5fa3551..dfb38c6 100644
--- a/library/tzdata/America/Santarem
+++ b/library/tzdata/America/Santarem
@@ -2,35 +2,35 @@
set TZData(:America/Santarem) {
{-9223372036854775808 -13128 0 LMT}
- {-1767212472 -14400 0 -04}
- {-1206954000 -10800 1 -04}
- {-1191358800 -14400 0 -04}
- {-1175371200 -10800 1 -04}
- {-1159822800 -14400 0 -04}
- {-633816000 -10800 1 -04}
- {-622065600 -14400 0 -04}
- {-602280000 -10800 1 -04}
- {-591829200 -14400 0 -04}
- {-570744000 -10800 1 -04}
- {-560206800 -14400 0 -04}
- {-539121600 -10800 1 -04}
- {-531349200 -14400 0 -04}
- {-191361600 -10800 1 -04}
- {-184194000 -14400 0 -04}
- {-155160000 -10800 1 -04}
- {-150066000 -14400 0 -04}
- {-128894400 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-99950400 -10800 1 -04}
- {-89586000 -14400 0 -04}
- {-68414400 -10800 1 -04}
- {-57963600 -14400 0 -04}
- {499752000 -10800 1 -04}
- {511239600 -14400 0 -04}
- {530596800 -10800 1 -04}
- {540270000 -14400 0 -04}
- {562132800 -10800 1 -04}
- {571201200 -14400 0 -04}
- {590036400 -14400 0 -04}
- {1214280000 -10800 0 -03}
+ {-1767212472 -14400 0 -0400}
+ {-1206954000 -10800 1 -0300}
+ {-1191358800 -14400 0 -0400}
+ {-1175371200 -10800 1 -0300}
+ {-1159822800 -14400 0 -0400}
+ {-633816000 -10800 1 -0300}
+ {-622065600 -14400 0 -0400}
+ {-602280000 -10800 1 -0300}
+ {-591829200 -14400 0 -0400}
+ {-570744000 -10800 1 -0300}
+ {-560206800 -14400 0 -0400}
+ {-539121600 -10800 1 -0300}
+ {-531349200 -14400 0 -0400}
+ {-191361600 -10800 1 -0300}
+ {-184194000 -14400 0 -0400}
+ {-155160000 -10800 1 -0300}
+ {-150066000 -14400 0 -0400}
+ {-128894400 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-99950400 -10800 1 -0300}
+ {-89586000 -14400 0 -0400}
+ {-68414400 -10800 1 -0300}
+ {-57963600 -14400 0 -0400}
+ {499752000 -10800 1 -0300}
+ {511239600 -14400 0 -0400}
+ {530596800 -10800 1 -0300}
+ {540270000 -14400 0 -0400}
+ {562132800 -10800 1 -0300}
+ {571201200 -14400 0 -0400}
+ {590036400 -14400 0 -0400}
+ {1214280000 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Santiago b/library/tzdata/America/Santiago
index 13b8b99..786df87 100644
--- a/library/tzdata/America/Santiago
+++ b/library/tzdata/America/Santiago
@@ -3,287 +3,287 @@
set TZData(:America/Santiago) {
{-9223372036854775808 -16965 0 LMT}
{-2524504635 -16965 0 SMT}
- {-1892661435 -18000 0 -05}
+ {-1892661435 -18000 0 -0500}
{-1688410800 -16965 0 SMT}
- {-1619205435 -14400 0 -04}
+ {-1619205435 -14400 0 -0400}
{-1593806400 -16965 0 SMT}
- {-1335986235 -18000 0 -05}
- {-1335985200 -14400 1 -05}
- {-1317585600 -18000 0 -05}
- {-1304362800 -14400 1 -05}
- {-1286049600 -18000 0 -05}
- {-1272826800 -14400 1 -05}
- {-1254513600 -18000 0 -05}
- {-1241290800 -14400 1 -05}
- {-1222977600 -18000 0 -05}
- {-1209754800 -14400 1 -05}
- {-1191355200 -18000 0 -05}
- {-1178132400 -14400 0 -04}
- {-870552000 -18000 0 -05}
- {-865278000 -14400 0 -04}
- {-740520000 -10800 1 -03}
- {-736635600 -14400 1 -04}
- {-718056000 -18000 0 -05}
- {-713649600 -14400 0 -04}
- {-36619200 -10800 1 -04}
- {-23922000 -14400 0 -04}
- {-3355200 -10800 1 -04}
- {7527600 -14400 0 -04}
- {24465600 -10800 1 -04}
- {37767600 -14400 0 -04}
- {55915200 -10800 1 -04}
- {69217200 -14400 0 -04}
- {87969600 -10800 1 -04}
- {100666800 -14400 0 -04}
- {118209600 -10800 1 -04}
- {132116400 -14400 0 -04}
- {150868800 -10800 1 -04}
- {163566000 -14400 0 -04}
- {182318400 -10800 1 -04}
- {195620400 -14400 0 -04}
- {213768000 -10800 1 -04}
- {227070000 -14400 0 -04}
- {245217600 -10800 1 -04}
- {258519600 -14400 0 -04}
- {277272000 -10800 1 -04}
- {289969200 -14400 0 -04}
- {308721600 -10800 1 -04}
- {321418800 -14400 0 -04}
- {340171200 -10800 1 -04}
- {353473200 -14400 0 -04}
- {371620800 -10800 1 -04}
- {384922800 -14400 0 -04}
- {403070400 -10800 1 -04}
- {416372400 -14400 0 -04}
- {434520000 -10800 1 -04}
- {447822000 -14400 0 -04}
- {466574400 -10800 1 -04}
- {479271600 -14400 0 -04}
- {498024000 -10800 1 -04}
- {510721200 -14400 0 -04}
- {529473600 -10800 1 -04}
- {545194800 -14400 0 -04}
- {560923200 -10800 1 -04}
- {574225200 -14400 0 -04}
- {592372800 -10800 1 -04}
- {605674800 -14400 0 -04}
- {624427200 -10800 1 -04}
- {637124400 -14400 0 -04}
- {653457600 -10800 1 -04}
- {668574000 -14400 0 -04}
- {687326400 -10800 1 -04}
- {700628400 -14400 0 -04}
- {718776000 -10800 1 -04}
- {732078000 -14400 0 -04}
- {750225600 -10800 1 -04}
- {763527600 -14400 0 -04}
- {781675200 -10800 1 -04}
- {794977200 -14400 0 -04}
- {813729600 -10800 1 -04}
- {826426800 -14400 0 -04}
- {845179200 -10800 1 -04}
- {859690800 -14400 0 -04}
- {876628800 -10800 1 -04}
- {889930800 -14400 0 -04}
- {906868800 -10800 1 -04}
- {923194800 -14400 0 -04}
- {939528000 -10800 1 -04}
- {952830000 -14400 0 -04}
- {971582400 -10800 1 -04}
- {984279600 -14400 0 -04}
- {1003032000 -10800 1 -04}
- {1015729200 -14400 0 -04}
- {1034481600 -10800 1 -04}
- {1047178800 -14400 0 -04}
- {1065931200 -10800 1 -04}
- {1079233200 -14400 0 -04}
- {1097380800 -10800 1 -04}
- {1110682800 -14400 0 -04}
- {1128830400 -10800 1 -04}
- {1142132400 -14400 0 -04}
- {1160884800 -10800 1 -04}
- {1173582000 -14400 0 -04}
- {1192334400 -10800 1 -04}
- {1206846000 -14400 0 -04}
- {1223784000 -10800 1 -04}
- {1237086000 -14400 0 -04}
- {1255233600 -10800 1 -04}
- {1270350000 -14400 0 -04}
- {1286683200 -10800 1 -04}
- {1304823600 -14400 0 -04}
- {1313899200 -10800 1 -04}
- {1335668400 -14400 0 -04}
- {1346558400 -10800 1 -04}
- {1367118000 -14400 0 -04}
- {1378612800 -10800 1 -04}
- {1398567600 -14400 0 -04}
- {1410062400 -10800 1 -04}
- {1463281200 -14400 0 -04}
- {1471147200 -10800 1 -04}
- {1494730800 -14400 0 -04}
- {1502596800 -10800 1 -04}
- {1526180400 -14400 0 -04}
- {1534046400 -10800 1 -04}
- {1554606000 -14400 0 -04}
- {1567915200 -10800 1 -04}
- {1586055600 -14400 0 -04}
- {1599364800 -10800 1 -04}
- {1617505200 -14400 0 -04}
- {1630814400 -10800 1 -04}
- {1648954800 -14400 0 -04}
- {1662868800 -10800 1 -04}
- {1680404400 -14400 0 -04}
- {1693713600 -10800 1 -04}
- {1712458800 -14400 0 -04}
- {1725768000 -10800 1 -04}
- {1743908400 -14400 0 -04}
- {1757217600 -10800 1 -04}
- {1775358000 -14400 0 -04}
- {1788667200 -10800 1 -04}
- {1806807600 -14400 0 -04}
- {1820116800 -10800 1 -04}
- {1838257200 -14400 0 -04}
- {1851566400 -10800 1 -04}
- {1870311600 -14400 0 -04}
- {1883016000 -10800 1 -04}
- {1901761200 -14400 0 -04}
- {1915070400 -10800 1 -04}
- {1933210800 -14400 0 -04}
- {1946520000 -10800 1 -04}
- {1964660400 -14400 0 -04}
- {1977969600 -10800 1 -04}
- {1996110000 -14400 0 -04}
- {2009419200 -10800 1 -04}
- {2027559600 -14400 0 -04}
- {2040868800 -10800 1 -04}
- {2059614000 -14400 0 -04}
- {2072318400 -10800 1 -04}
- {2091063600 -14400 0 -04}
- {2104372800 -10800 1 -04}
- {2122513200 -14400 0 -04}
- {2135822400 -10800 1 -04}
- {2153962800 -14400 0 -04}
- {2167272000 -10800 1 -04}
- {2185412400 -14400 0 -04}
- {2198721600 -10800 1 -04}
- {2217466800 -14400 0 -04}
- {2230171200 -10800 1 -04}
- {2248916400 -14400 0 -04}
- {2262225600 -10800 1 -04}
- {2280366000 -14400 0 -04}
- {2293675200 -10800 1 -04}
- {2311815600 -14400 0 -04}
- {2325124800 -10800 1 -04}
- {2343265200 -14400 0 -04}
- {2356574400 -10800 1 -04}
- {2374714800 -14400 0 -04}
- {2388024000 -10800 1 -04}
- {2406769200 -14400 0 -04}
- {2419473600 -10800 1 -04}
- {2438218800 -14400 0 -04}
- {2451528000 -10800 1 -04}
- {2469668400 -14400 0 -04}
- {2482977600 -10800 1 -04}
- {2501118000 -14400 0 -04}
- {2514427200 -10800 1 -04}
- {2532567600 -14400 0 -04}
- {2545876800 -10800 1 -04}
- {2564017200 -14400 0 -04}
- {2577326400 -10800 1 -04}
- {2596071600 -14400 0 -04}
- {2609380800 -10800 1 -04}
- {2627521200 -14400 0 -04}
- {2640830400 -10800 1 -04}
- {2658970800 -14400 0 -04}
- {2672280000 -10800 1 -04}
- {2690420400 -14400 0 -04}
- {2703729600 -10800 1 -04}
- {2721870000 -14400 0 -04}
- {2735179200 -10800 1 -04}
- {2753924400 -14400 0 -04}
- {2766628800 -10800 1 -04}
- {2785374000 -14400 0 -04}
- {2798683200 -10800 1 -04}
- {2816823600 -14400 0 -04}
- {2830132800 -10800 1 -04}
- {2848273200 -14400 0 -04}
- {2861582400 -10800 1 -04}
- {2879722800 -14400 0 -04}
- {2893032000 -10800 1 -04}
- {2911172400 -14400 0 -04}
- {2924481600 -10800 1 -04}
- {2943226800 -14400 0 -04}
- {2955931200 -10800 1 -04}
- {2974676400 -14400 0 -04}
- {2987985600 -10800 1 -04}
- {3006126000 -14400 0 -04}
- {3019435200 -10800 1 -04}
- {3037575600 -14400 0 -04}
- {3050884800 -10800 1 -04}
- {3069025200 -14400 0 -04}
- {3082334400 -10800 1 -04}
- {3101079600 -14400 0 -04}
- {3113784000 -10800 1 -04}
- {3132529200 -14400 0 -04}
- {3145838400 -10800 1 -04}
- {3163978800 -14400 0 -04}
- {3177288000 -10800 1 -04}
- {3195428400 -14400 0 -04}
- {3208737600 -10800 1 -04}
- {3226878000 -14400 0 -04}
- {3240187200 -10800 1 -04}
- {3258327600 -14400 0 -04}
- {3271636800 -10800 1 -04}
- {3290382000 -14400 0 -04}
- {3303086400 -10800 1 -04}
- {3321831600 -14400 0 -04}
- {3335140800 -10800 1 -04}
- {3353281200 -14400 0 -04}
- {3366590400 -10800 1 -04}
- {3384730800 -14400 0 -04}
- {3398040000 -10800 1 -04}
- {3416180400 -14400 0 -04}
- {3429489600 -10800 1 -04}
- {3447630000 -14400 0 -04}
- {3460939200 -10800 1 -04}
- {3479684400 -14400 0 -04}
- {3492993600 -10800 1 -04}
- {3511134000 -14400 0 -04}
- {3524443200 -10800 1 -04}
- {3542583600 -14400 0 -04}
- {3555892800 -10800 1 -04}
- {3574033200 -14400 0 -04}
- {3587342400 -10800 1 -04}
- {3605482800 -14400 0 -04}
- {3618792000 -10800 1 -04}
- {3637537200 -14400 0 -04}
- {3650241600 -10800 1 -04}
- {3668986800 -14400 0 -04}
- {3682296000 -10800 1 -04}
- {3700436400 -14400 0 -04}
- {3713745600 -10800 1 -04}
- {3731886000 -14400 0 -04}
- {3745195200 -10800 1 -04}
- {3763335600 -14400 0 -04}
- {3776644800 -10800 1 -04}
- {3794785200 -14400 0 -04}
- {3808094400 -10800 1 -04}
- {3826839600 -14400 0 -04}
- {3839544000 -10800 1 -04}
- {3858289200 -14400 0 -04}
- {3871598400 -10800 1 -04}
- {3889738800 -14400 0 -04}
- {3903048000 -10800 1 -04}
- {3921188400 -14400 0 -04}
- {3934497600 -10800 1 -04}
- {3952638000 -14400 0 -04}
- {3965947200 -10800 1 -04}
- {3984692400 -14400 0 -04}
- {3997396800 -10800 1 -04}
- {4016142000 -14400 0 -04}
- {4029451200 -10800 1 -04}
- {4047591600 -14400 0 -04}
- {4060900800 -10800 1 -04}
- {4079041200 -14400 0 -04}
- {4092350400 -10800 1 -04}
+ {-1335986235 -18000 0 -0500}
+ {-1335985200 -14400 1 -0400}
+ {-1317585600 -18000 0 -0500}
+ {-1304362800 -14400 1 -0400}
+ {-1286049600 -18000 0 -0500}
+ {-1272826800 -14400 1 -0400}
+ {-1254513600 -18000 0 -0500}
+ {-1241290800 -14400 1 -0400}
+ {-1222977600 -18000 0 -0500}
+ {-1209754800 -14400 1 -0400}
+ {-1191355200 -18000 0 -0500}
+ {-1178132400 -14400 0 -0400}
+ {-870552000 -18000 0 -0500}
+ {-865278000 -14400 0 -0400}
+ {-740520000 -10800 1 -0300}
+ {-736635600 -14400 1 -0400}
+ {-718056000 -18000 0 -0500}
+ {-713649600 -14400 0 -0400}
+ {-36619200 -10800 1 -0300}
+ {-23922000 -14400 0 -0400}
+ {-3355200 -10800 1 -0300}
+ {7527600 -14400 0 -0400}
+ {24465600 -10800 1 -0300}
+ {37767600 -14400 0 -0400}
+ {55915200 -10800 1 -0300}
+ {69217200 -14400 0 -0400}
+ {87969600 -10800 1 -0300}
+ {100666800 -14400 0 -0400}
+ {118209600 -10800 1 -0300}
+ {132116400 -14400 0 -0400}
+ {150868800 -10800 1 -0300}
+ {163566000 -14400 0 -0400}
+ {182318400 -10800 1 -0300}
+ {195620400 -14400 0 -0400}
+ {213768000 -10800 1 -0300}
+ {227070000 -14400 0 -0400}
+ {245217600 -10800 1 -0300}
+ {258519600 -14400 0 -0400}
+ {277272000 -10800 1 -0300}
+ {289969200 -14400 0 -0400}
+ {308721600 -10800 1 -0300}
+ {321418800 -14400 0 -0400}
+ {340171200 -10800 1 -0300}
+ {353473200 -14400 0 -0400}
+ {371620800 -10800 1 -0300}
+ {384922800 -14400 0 -0400}
+ {403070400 -10800 1 -0300}
+ {416372400 -14400 0 -0400}
+ {434520000 -10800 1 -0300}
+ {447822000 -14400 0 -0400}
+ {466574400 -10800 1 -0300}
+ {479271600 -14400 0 -0400}
+ {498024000 -10800 1 -0300}
+ {510721200 -14400 0 -0400}
+ {529473600 -10800 1 -0300}
+ {545194800 -14400 0 -0400}
+ {560923200 -10800 1 -0300}
+ {574225200 -14400 0 -0400}
+ {592372800 -10800 1 -0300}
+ {605674800 -14400 0 -0400}
+ {624427200 -10800 1 -0300}
+ {637124400 -14400 0 -0400}
+ {653457600 -10800 1 -0300}
+ {668574000 -14400 0 -0400}
+ {687326400 -10800 1 -0300}
+ {700628400 -14400 0 -0400}
+ {718776000 -10800 1 -0300}
+ {732078000 -14400 0 -0400}
+ {750225600 -10800 1 -0300}
+ {763527600 -14400 0 -0400}
+ {781675200 -10800 1 -0300}
+ {794977200 -14400 0 -0400}
+ {813729600 -10800 1 -0300}
+ {826426800 -14400 0 -0400}
+ {845179200 -10800 1 -0300}
+ {859690800 -14400 0 -0400}
+ {876628800 -10800 1 -0300}
+ {889930800 -14400 0 -0400}
+ {906868800 -10800 1 -0300}
+ {923194800 -14400 0 -0400}
+ {939528000 -10800 1 -0300}
+ {952830000 -14400 0 -0400}
+ {971582400 -10800 1 -0300}
+ {984279600 -14400 0 -0400}
+ {1003032000 -10800 1 -0300}
+ {1015729200 -14400 0 -0400}
+ {1034481600 -10800 1 -0300}
+ {1047178800 -14400 0 -0400}
+ {1065931200 -10800 1 -0300}
+ {1079233200 -14400 0 -0400}
+ {1097380800 -10800 1 -0300}
+ {1110682800 -14400 0 -0400}
+ {1128830400 -10800 1 -0300}
+ {1142132400 -14400 0 -0400}
+ {1160884800 -10800 1 -0300}
+ {1173582000 -14400 0 -0400}
+ {1192334400 -10800 1 -0300}
+ {1206846000 -14400 0 -0400}
+ {1223784000 -10800 1 -0300}
+ {1237086000 -14400 0 -0400}
+ {1255233600 -10800 1 -0300}
+ {1270350000 -14400 0 -0400}
+ {1286683200 -10800 1 -0300}
+ {1304823600 -14400 0 -0400}
+ {1313899200 -10800 1 -0300}
+ {1335668400 -14400 0 -0400}
+ {1346558400 -10800 1 -0300}
+ {1367118000 -14400 0 -0400}
+ {1378612800 -10800 1 -0300}
+ {1398567600 -14400 0 -0400}
+ {1410062400 -10800 1 -0300}
+ {1463281200 -14400 0 -0400}
+ {1471147200 -10800 1 -0300}
+ {1494730800 -14400 0 -0400}
+ {1502596800 -10800 1 -0300}
+ {1526180400 -14400 0 -0400}
+ {1534046400 -10800 1 -0300}
+ {1554606000 -14400 0 -0400}
+ {1567915200 -10800 1 -0300}
+ {1586055600 -14400 0 -0400}
+ {1599364800 -10800 1 -0300}
+ {1617505200 -14400 0 -0400}
+ {1630814400 -10800 1 -0300}
+ {1648954800 -14400 0 -0400}
+ {1662868800 -10800 1 -0300}
+ {1680404400 -14400 0 -0400}
+ {1693713600 -10800 1 -0300}
+ {1712458800 -14400 0 -0400}
+ {1725768000 -10800 1 -0300}
+ {1743908400 -14400 0 -0400}
+ {1757217600 -10800 1 -0300}
+ {1775358000 -14400 0 -0400}
+ {1788667200 -10800 1 -0300}
+ {1806807600 -14400 0 -0400}
+ {1820116800 -10800 1 -0300}
+ {1838257200 -14400 0 -0400}
+ {1851566400 -10800 1 -0300}
+ {1870311600 -14400 0 -0400}
+ {1883016000 -10800 1 -0300}
+ {1901761200 -14400 0 -0400}
+ {1915070400 -10800 1 -0300}
+ {1933210800 -14400 0 -0400}
+ {1946520000 -10800 1 -0300}
+ {1964660400 -14400 0 -0400}
+ {1977969600 -10800 1 -0300}
+ {1996110000 -14400 0 -0400}
+ {2009419200 -10800 1 -0300}
+ {2027559600 -14400 0 -0400}
+ {2040868800 -10800 1 -0300}
+ {2059614000 -14400 0 -0400}
+ {2072318400 -10800 1 -0300}
+ {2091063600 -14400 0 -0400}
+ {2104372800 -10800 1 -0300}
+ {2122513200 -14400 0 -0400}
+ {2135822400 -10800 1 -0300}
+ {2153962800 -14400 0 -0400}
+ {2167272000 -10800 1 -0300}
+ {2185412400 -14400 0 -0400}
+ {2198721600 -10800 1 -0300}
+ {2217466800 -14400 0 -0400}
+ {2230171200 -10800 1 -0300}
+ {2248916400 -14400 0 -0400}
+ {2262225600 -10800 1 -0300}
+ {2280366000 -14400 0 -0400}
+ {2293675200 -10800 1 -0300}
+ {2311815600 -14400 0 -0400}
+ {2325124800 -10800 1 -0300}
+ {2343265200 -14400 0 -0400}
+ {2356574400 -10800 1 -0300}
+ {2374714800 -14400 0 -0400}
+ {2388024000 -10800 1 -0300}
+ {2406769200 -14400 0 -0400}
+ {2419473600 -10800 1 -0300}
+ {2438218800 -14400 0 -0400}
+ {2451528000 -10800 1 -0300}
+ {2469668400 -14400 0 -0400}
+ {2482977600 -10800 1 -0300}
+ {2501118000 -14400 0 -0400}
+ {2514427200 -10800 1 -0300}
+ {2532567600 -14400 0 -0400}
+ {2545876800 -10800 1 -0300}
+ {2564017200 -14400 0 -0400}
+ {2577326400 -10800 1 -0300}
+ {2596071600 -14400 0 -0400}
+ {2609380800 -10800 1 -0300}
+ {2627521200 -14400 0 -0400}
+ {2640830400 -10800 1 -0300}
+ {2658970800 -14400 0 -0400}
+ {2672280000 -10800 1 -0300}
+ {2690420400 -14400 0 -0400}
+ {2703729600 -10800 1 -0300}
+ {2721870000 -14400 0 -0400}
+ {2735179200 -10800 1 -0300}
+ {2753924400 -14400 0 -0400}
+ {2766628800 -10800 1 -0300}
+ {2785374000 -14400 0 -0400}
+ {2798683200 -10800 1 -0300}
+ {2816823600 -14400 0 -0400}
+ {2830132800 -10800 1 -0300}
+ {2848273200 -14400 0 -0400}
+ {2861582400 -10800 1 -0300}
+ {2879722800 -14400 0 -0400}
+ {2893032000 -10800 1 -0300}
+ {2911172400 -14400 0 -0400}
+ {2924481600 -10800 1 -0300}
+ {2943226800 -14400 0 -0400}
+ {2955931200 -10800 1 -0300}
+ {2974676400 -14400 0 -0400}
+ {2987985600 -10800 1 -0300}
+ {3006126000 -14400 0 -0400}
+ {3019435200 -10800 1 -0300}
+ {3037575600 -14400 0 -0400}
+ {3050884800 -10800 1 -0300}
+ {3069025200 -14400 0 -0400}
+ {3082334400 -10800 1 -0300}
+ {3101079600 -14400 0 -0400}
+ {3113784000 -10800 1 -0300}
+ {3132529200 -14400 0 -0400}
+ {3145838400 -10800 1 -0300}
+ {3163978800 -14400 0 -0400}
+ {3177288000 -10800 1 -0300}
+ {3195428400 -14400 0 -0400}
+ {3208737600 -10800 1 -0300}
+ {3226878000 -14400 0 -0400}
+ {3240187200 -10800 1 -0300}
+ {3258327600 -14400 0 -0400}
+ {3271636800 -10800 1 -0300}
+ {3290382000 -14400 0 -0400}
+ {3303086400 -10800 1 -0300}
+ {3321831600 -14400 0 -0400}
+ {3335140800 -10800 1 -0300}
+ {3353281200 -14400 0 -0400}
+ {3366590400 -10800 1 -0300}
+ {3384730800 -14400 0 -0400}
+ {3398040000 -10800 1 -0300}
+ {3416180400 -14400 0 -0400}
+ {3429489600 -10800 1 -0300}
+ {3447630000 -14400 0 -0400}
+ {3460939200 -10800 1 -0300}
+ {3479684400 -14400 0 -0400}
+ {3492993600 -10800 1 -0300}
+ {3511134000 -14400 0 -0400}
+ {3524443200 -10800 1 -0300}
+ {3542583600 -14400 0 -0400}
+ {3555892800 -10800 1 -0300}
+ {3574033200 -14400 0 -0400}
+ {3587342400 -10800 1 -0300}
+ {3605482800 -14400 0 -0400}
+ {3618792000 -10800 1 -0300}
+ {3637537200 -14400 0 -0400}
+ {3650241600 -10800 1 -0300}
+ {3668986800 -14400 0 -0400}
+ {3682296000 -10800 1 -0300}
+ {3700436400 -14400 0 -0400}
+ {3713745600 -10800 1 -0300}
+ {3731886000 -14400 0 -0400}
+ {3745195200 -10800 1 -0300}
+ {3763335600 -14400 0 -0400}
+ {3776644800 -10800 1 -0300}
+ {3794785200 -14400 0 -0400}
+ {3808094400 -10800 1 -0300}
+ {3826839600 -14400 0 -0400}
+ {3839544000 -10800 1 -0300}
+ {3858289200 -14400 0 -0400}
+ {3871598400 -10800 1 -0300}
+ {3889738800 -14400 0 -0400}
+ {3903048000 -10800 1 -0300}
+ {3921188400 -14400 0 -0400}
+ {3934497600 -10800 1 -0300}
+ {3952638000 -14400 0 -0400}
+ {3965947200 -10800 1 -0300}
+ {3984692400 -14400 0 -0400}
+ {3997396800 -10800 1 -0300}
+ {4016142000 -14400 0 -0400}
+ {4029451200 -10800 1 -0300}
+ {4047591600 -14400 0 -0400}
+ {4060900800 -10800 1 -0300}
+ {4079041200 -14400 0 -0400}
+ {4092350400 -10800 1 -0300}
}
diff --git a/library/tzdata/America/Sao_Paulo b/library/tzdata/America/Sao_Paulo
index 77d5d8c..e65e8e6 100644
--- a/library/tzdata/America/Sao_Paulo
+++ b/library/tzdata/America/Sao_Paulo
@@ -2,96 +2,96 @@
set TZData(:America/Sao_Paulo) {
{-9223372036854775808 -11188 0 LMT}
- {-1767214412 -10800 0 -03}
- {-1206957600 -7200 1 -03}
- {-1191362400 -10800 0 -03}
- {-1175374800 -7200 1 -03}
- {-1159826400 -10800 0 -03}
- {-633819600 -7200 1 -03}
- {-622069200 -10800 0 -03}
- {-602283600 -7200 1 -03}
- {-591832800 -10800 0 -03}
- {-570747600 -7200 1 -03}
- {-560210400 -10800 0 -03}
- {-539125200 -7200 1 -03}
- {-531352800 -10800 0 -03}
- {-195429600 -7200 1 -02}
- {-189381600 -7200 0 -03}
- {-184197600 -10800 0 -03}
- {-155163600 -7200 1 -03}
- {-150069600 -10800 0 -03}
- {-128898000 -7200 1 -03}
- {-121125600 -10800 0 -03}
- {-99954000 -7200 1 -03}
- {-89589600 -10800 0 -03}
- {-68418000 -7200 1 -03}
- {-57967200 -10800 0 -03}
- {499748400 -7200 1 -03}
- {511236000 -10800 0 -03}
- {530593200 -7200 1 -03}
- {540266400 -10800 0 -03}
- {562129200 -7200 1 -03}
- {571197600 -10800 0 -03}
- {592974000 -7200 1 -03}
- {602042400 -10800 0 -03}
- {624423600 -7200 1 -03}
- {634701600 -10800 0 -03}
- {656478000 -7200 1 -03}
- {666756000 -10800 0 -03}
- {687927600 -7200 1 -03}
- {697600800 -10800 0 -03}
- {719982000 -7200 1 -03}
- {728445600 -10800 0 -03}
- {750826800 -7200 1 -03}
- {761709600 -10800 0 -03}
- {782276400 -7200 1 -03}
- {793159200 -10800 0 -03}
- {813726000 -7200 1 -03}
- {824004000 -10800 0 -03}
- {844570800 -7200 1 -03}
- {856058400 -10800 0 -03}
- {876106800 -7200 1 -03}
- {888717600 -10800 0 -03}
- {908074800 -7200 1 -03}
- {919562400 -10800 0 -03}
- {938919600 -7200 1 -03}
- {951616800 -10800 0 -03}
- {970974000 -7200 1 -03}
- {982461600 -10800 0 -03}
- {1003028400 -7200 1 -03}
- {1013911200 -10800 0 -03}
- {1036292400 -7200 1 -03}
- {1045360800 -10800 0 -03}
- {1066532400 -7200 1 -03}
- {1076810400 -10800 0 -03}
- {1099364400 -7200 1 -03}
- {1108864800 -10800 0 -03}
- {1129431600 -7200 1 -03}
- {1140314400 -10800 0 -03}
- {1162695600 -7200 1 -03}
- {1172368800 -10800 0 -03}
- {1192330800 -7200 1 -03}
- {1203213600 -10800 0 -03}
- {1224385200 -7200 1 -03}
- {1234663200 -10800 0 -03}
- {1255834800 -7200 1 -03}
- {1266717600 -10800 0 -03}
- {1287284400 -7200 1 -03}
- {1298167200 -10800 0 -03}
- {1318734000 -7200 1 -03}
- {1330221600 -10800 0 -03}
- {1350788400 -7200 1 -03}
- {1361066400 -10800 0 -03}
- {1382238000 -7200 1 -03}
- {1392516000 -10800 0 -03}
- {1413687600 -7200 1 -03}
- {1424570400 -10800 0 -03}
- {1445137200 -7200 1 -03}
- {1456020000 -10800 0 -03}
- {1476586800 -7200 1 -03}
- {1487469600 -10800 0 -03}
- {1508036400 -7200 1 -03}
- {1518919200 -10800 0 -03}
- {1541300400 -7200 1 -03}
- {1550368800 -10800 0 -03}
+ {-1767214412 -10800 0 -0300}
+ {-1206957600 -7200 1 -0200}
+ {-1191362400 -10800 0 -0300}
+ {-1175374800 -7200 1 -0200}
+ {-1159826400 -10800 0 -0300}
+ {-633819600 -7200 1 -0200}
+ {-622069200 -10800 0 -0300}
+ {-602283600 -7200 1 -0200}
+ {-591832800 -10800 0 -0300}
+ {-570747600 -7200 1 -0200}
+ {-560210400 -10800 0 -0300}
+ {-539125200 -7200 1 -0200}
+ {-531352800 -10800 0 -0300}
+ {-195429600 -7200 1 -0200}
+ {-189381600 -7200 0 -0200}
+ {-184197600 -10800 0 -0300}
+ {-155163600 -7200 1 -0200}
+ {-150069600 -10800 0 -0300}
+ {-128898000 -7200 1 -0200}
+ {-121125600 -10800 0 -0300}
+ {-99954000 -7200 1 -0200}
+ {-89589600 -10800 0 -0300}
+ {-68418000 -7200 1 -0200}
+ {-57967200 -10800 0 -0300}
+ {499748400 -7200 1 -0200}
+ {511236000 -10800 0 -0300}
+ {530593200 -7200 1 -0200}
+ {540266400 -10800 0 -0300}
+ {562129200 -7200 1 -0200}
+ {571197600 -10800 0 -0300}
+ {592974000 -7200 1 -0200}
+ {602042400 -10800 0 -0300}
+ {624423600 -7200 1 -0200}
+ {634701600 -10800 0 -0300}
+ {656478000 -7200 1 -0200}
+ {666756000 -10800 0 -0300}
+ {687927600 -7200 1 -0200}
+ {697600800 -10800 0 -0300}
+ {719982000 -7200 1 -0200}
+ {728445600 -10800 0 -0300}
+ {750826800 -7200 1 -0200}
+ {761709600 -10800 0 -0300}
+ {782276400 -7200 1 -0200}
+ {793159200 -10800 0 -0300}
+ {813726000 -7200 1 -0200}
+ {824004000 -10800 0 -0300}
+ {844570800 -7200 1 -0200}
+ {856058400 -10800 0 -0300}
+ {876106800 -7200 1 -0200}
+ {888717600 -10800 0 -0300}
+ {908074800 -7200 1 -0200}
+ {919562400 -10800 0 -0300}
+ {938919600 -7200 1 -0200}
+ {951616800 -10800 0 -0300}
+ {970974000 -7200 1 -0200}
+ {982461600 -10800 0 -0300}
+ {1003028400 -7200 1 -0200}
+ {1013911200 -10800 0 -0300}
+ {1036292400 -7200 1 -0200}
+ {1045360800 -10800 0 -0300}
+ {1066532400 -7200 1 -0200}
+ {1076810400 -10800 0 -0300}
+ {1099364400 -7200 1 -0200}
+ {1108864800 -10800 0 -0300}
+ {1129431600 -7200 1 -0200}
+ {1140314400 -10800 0 -0300}
+ {1162695600 -7200 1 -0200}
+ {1172368800 -10800 0 -0300}
+ {1192330800 -7200 1 -0200}
+ {1203213600 -10800 0 -0300}
+ {1224385200 -7200 1 -0200}
+ {1234663200 -10800 0 -0300}
+ {1255834800 -7200 1 -0200}
+ {1266717600 -10800 0 -0300}
+ {1287284400 -7200 1 -0200}
+ {1298167200 -10800 0 -0300}
+ {1318734000 -7200 1 -0200}
+ {1330221600 -10800 0 -0300}
+ {1350788400 -7200 1 -0200}
+ {1361066400 -10800 0 -0300}
+ {1382238000 -7200 1 -0200}
+ {1392516000 -10800 0 -0300}
+ {1413687600 -7200 1 -0200}
+ {1424570400 -10800 0 -0300}
+ {1445137200 -7200 1 -0200}
+ {1456020000 -10800 0 -0300}
+ {1476586800 -7200 1 -0200}
+ {1487469600 -10800 0 -0300}
+ {1508036400 -7200 1 -0200}
+ {1518919200 -10800 0 -0300}
+ {1541300400 -7200 1 -0200}
+ {1550368800 -10800 0 -0300}
}
diff --git a/library/tzdata/America/Scoresbysund b/library/tzdata/America/Scoresbysund
index 7430635..62eb7d5 100644
--- a/library/tzdata/America/Scoresbysund
+++ b/library/tzdata/America/Scoresbysund
@@ -2,245 +2,245 @@
set TZData(:America/Scoresbysund) {
{-9223372036854775808 -5272 0 LMT}
- {-1686090728 -7200 0 -02}
- {323841600 -3600 0 -01}
- {338961600 -7200 0 -02}
- {354679200 0 0 +00}
- {370400400 -3600 0 -01}
- {386125200 0 1 +00}
- {401850000 -3600 0 -01}
- {417574800 0 1 +00}
- {433299600 -3600 0 -01}
- {449024400 0 1 +00}
- {465354000 -3600 0 -01}
- {481078800 0 1 +00}
- {496803600 -3600 0 -01}
- {512528400 0 1 +00}
- {528253200 -3600 0 -01}
- {543978000 0 1 +00}
- {559702800 -3600 0 -01}
- {575427600 0 1 +00}
- {591152400 -3600 0 -01}
- {606877200 0 1 +00}
- {622602000 -3600 0 -01}
- {638326800 0 1 +00}
- {654656400 -3600 0 -01}
- {670381200 0 1 +00}
- {686106000 -3600 0 -01}
- {701830800 0 1 +00}
- {717555600 -3600 0 -01}
- {733280400 0 1 +00}
- {749005200 -3600 0 -01}
- {764730000 0 1 +00}
- {780454800 -3600 0 -01}
- {796179600 0 1 +00}
- {811904400 -3600 0 -01}
- {828234000 0 1 +00}
- {846378000 -3600 0 -01}
- {859683600 0 1 +00}
- {877827600 -3600 0 -01}
- {891133200 0 1 +00}
- {909277200 -3600 0 -01}
- {922582800 0 1 +00}
- {941331600 -3600 0 -01}
- {954032400 0 1 +00}
- {972781200 -3600 0 -01}
- {985482000 0 1 +00}
- {1004230800 -3600 0 -01}
- {1017536400 0 1 +00}
- {1035680400 -3600 0 -01}
- {1048986000 0 1 +00}
- {1067130000 -3600 0 -01}
- {1080435600 0 1 +00}
- {1099184400 -3600 0 -01}
- {1111885200 0 1 +00}
- {1130634000 -3600 0 -01}
- {1143334800 0 1 +00}
- {1162083600 -3600 0 -01}
- {1174784400 0 1 +00}
- {1193533200 -3600 0 -01}
- {1206838800 0 1 +00}
- {1224982800 -3600 0 -01}
- {1238288400 0 1 +00}
- {1256432400 -3600 0 -01}
- {1269738000 0 1 +00}
- {1288486800 -3600 0 -01}
- {1301187600 0 1 +00}
- {1319936400 -3600 0 -01}
- {1332637200 0 1 +00}
- {1351386000 -3600 0 -01}
- {1364691600 0 1 +00}
- {1382835600 -3600 0 -01}
- {1396141200 0 1 +00}
- {1414285200 -3600 0 -01}
- {1427590800 0 1 +00}
- {1445734800 -3600 0 -01}
- {1459040400 0 1 +00}
- {1477789200 -3600 0 -01}
- {1490490000 0 1 +00}
- {1509238800 -3600 0 -01}
- {1521939600 0 1 +00}
- {1540688400 -3600 0 -01}
- {1553994000 0 1 +00}
- {1572138000 -3600 0 -01}
- {1585443600 0 1 +00}
- {1603587600 -3600 0 -01}
- {1616893200 0 1 +00}
- {1635642000 -3600 0 -01}
- {1648342800 0 1 +00}
- {1667091600 -3600 0 -01}
- {1679792400 0 1 +00}
- {1698541200 -3600 0 -01}
- {1711846800 0 1 +00}
- {1729990800 -3600 0 -01}
- {1743296400 0 1 +00}
- {1761440400 -3600 0 -01}
- {1774746000 0 1 +00}
- {1792890000 -3600 0 -01}
- {1806195600 0 1 +00}
- {1824944400 -3600 0 -01}
- {1837645200 0 1 +00}
- {1856394000 -3600 0 -01}
- {1869094800 0 1 +00}
- {1887843600 -3600 0 -01}
- {1901149200 0 1 +00}
- {1919293200 -3600 0 -01}
- {1932598800 0 1 +00}
- {1950742800 -3600 0 -01}
- {1964048400 0 1 +00}
- {1982797200 -3600 0 -01}
- {1995498000 0 1 +00}
- {2014246800 -3600 0 -01}
- {2026947600 0 1 +00}
- {2045696400 -3600 0 -01}
- {2058397200 0 1 +00}
- {2077146000 -3600 0 -01}
- {2090451600 0 1 +00}
- {2108595600 -3600 0 -01}
- {2121901200 0 1 +00}
- {2140045200 -3600 0 -01}
- {2153350800 0 1 +00}
- {2172099600 -3600 0 -01}
- {2184800400 0 1 +00}
- {2203549200 -3600 0 -01}
- {2216250000 0 1 +00}
- {2234998800 -3600 0 -01}
- {2248304400 0 1 +00}
- {2266448400 -3600 0 -01}
- {2279754000 0 1 +00}
- {2297898000 -3600 0 -01}
- {2311203600 0 1 +00}
- {2329347600 -3600 0 -01}
- {2342653200 0 1 +00}
- {2361402000 -3600 0 -01}
- {2374102800 0 1 +00}
- {2392851600 -3600 0 -01}
- {2405552400 0 1 +00}
- {2424301200 -3600 0 -01}
- {2437606800 0 1 +00}
- {2455750800 -3600 0 -01}
- {2469056400 0 1 +00}
- {2487200400 -3600 0 -01}
- {2500506000 0 1 +00}
- {2519254800 -3600 0 -01}
- {2531955600 0 1 +00}
- {2550704400 -3600 0 -01}
- {2563405200 0 1 +00}
- {2582154000 -3600 0 -01}
- {2595459600 0 1 +00}
- {2613603600 -3600 0 -01}
- {2626909200 0 1 +00}
- {2645053200 -3600 0 -01}
- {2658358800 0 1 +00}
- {2676502800 -3600 0 -01}
- {2689808400 0 1 +00}
- {2708557200 -3600 0 -01}
- {2721258000 0 1 +00}
- {2740006800 -3600 0 -01}
- {2752707600 0 1 +00}
- {2771456400 -3600 0 -01}
- {2784762000 0 1 +00}
- {2802906000 -3600 0 -01}
- {2816211600 0 1 +00}
- {2834355600 -3600 0 -01}
- {2847661200 0 1 +00}
- {2866410000 -3600 0 -01}
- {2879110800 0 1 +00}
- {2897859600 -3600 0 -01}
- {2910560400 0 1 +00}
- {2929309200 -3600 0 -01}
- {2942010000 0 1 +00}
- {2960758800 -3600 0 -01}
- {2974064400 0 1 +00}
- {2992208400 -3600 0 -01}
- {3005514000 0 1 +00}
- {3023658000 -3600 0 -01}
- {3036963600 0 1 +00}
- {3055712400 -3600 0 -01}
- {3068413200 0 1 +00}
- {3087162000 -3600 0 -01}
- {3099862800 0 1 +00}
- {3118611600 -3600 0 -01}
- {3131917200 0 1 +00}
- {3150061200 -3600 0 -01}
- {3163366800 0 1 +00}
- {3181510800 -3600 0 -01}
- {3194816400 0 1 +00}
- {3212960400 -3600 0 -01}
- {3226266000 0 1 +00}
- {3245014800 -3600 0 -01}
- {3257715600 0 1 +00}
- {3276464400 -3600 0 -01}
- {3289165200 0 1 +00}
- {3307914000 -3600 0 -01}
- {3321219600 0 1 +00}
- {3339363600 -3600 0 -01}
- {3352669200 0 1 +00}
- {3370813200 -3600 0 -01}
- {3384118800 0 1 +00}
- {3402867600 -3600 0 -01}
- {3415568400 0 1 +00}
- {3434317200 -3600 0 -01}
- {3447018000 0 1 +00}
- {3465766800 -3600 0 -01}
- {3479072400 0 1 +00}
- {3497216400 -3600 0 -01}
- {3510522000 0 1 +00}
- {3528666000 -3600 0 -01}
- {3541971600 0 1 +00}
- {3560115600 -3600 0 -01}
- {3573421200 0 1 +00}
- {3592170000 -3600 0 -01}
- {3604870800 0 1 +00}
- {3623619600 -3600 0 -01}
- {3636320400 0 1 +00}
- {3655069200 -3600 0 -01}
- {3668374800 0 1 +00}
- {3686518800 -3600 0 -01}
- {3699824400 0 1 +00}
- {3717968400 -3600 0 -01}
- {3731274000 0 1 +00}
- {3750022800 -3600 0 -01}
- {3762723600 0 1 +00}
- {3781472400 -3600 0 -01}
- {3794173200 0 1 +00}
- {3812922000 -3600 0 -01}
- {3825622800 0 1 +00}
- {3844371600 -3600 0 -01}
- {3857677200 0 1 +00}
- {3875821200 -3600 0 -01}
- {3889126800 0 1 +00}
- {3907270800 -3600 0 -01}
- {3920576400 0 1 +00}
- {3939325200 -3600 0 -01}
- {3952026000 0 1 +00}
- {3970774800 -3600 0 -01}
- {3983475600 0 1 +00}
- {4002224400 -3600 0 -01}
- {4015530000 0 1 +00}
- {4033674000 -3600 0 -01}
- {4046979600 0 1 +00}
- {4065123600 -3600 0 -01}
- {4078429200 0 1 +00}
- {4096573200 -3600 0 -01}
+ {-1686090728 -7200 0 -0200}
+ {323841600 -3600 0 -0100}
+ {338961600 -7200 0 -0200}
+ {354679200 0 0 +0000}
+ {370400400 -3600 0 -0100}
+ {386125200 0 1 +0000}
+ {401850000 -3600 0 -0100}
+ {417574800 0 1 +0000}
+ {433299600 -3600 0 -0100}
+ {449024400 0 1 +0000}
+ {465354000 -3600 0 -0100}
+ {481078800 0 1 +0000}
+ {496803600 -3600 0 -0100}
+ {512528400 0 1 +0000}
+ {528253200 -3600 0 -0100}
+ {543978000 0 1 +0000}
+ {559702800 -3600 0 -0100}
+ {575427600 0 1 +0000}
+ {591152400 -3600 0 -0100}
+ {606877200 0 1 +0000}
+ {622602000 -3600 0 -0100}
+ {638326800 0 1 +0000}
+ {654656400 -3600 0 -0100}
+ {670381200 0 1 +0000}
+ {686106000 -3600 0 -0100}
+ {701830800 0 1 +0000}
+ {717555600 -3600 0 -0100}
+ {733280400 0 1 +0000}
+ {749005200 -3600 0 -0100}
+ {764730000 0 1 +0000}
+ {780454800 -3600 0 -0100}
+ {796179600 0 1 +0000}
+ {811904400 -3600 0 -0100}
+ {828234000 0 1 +0000}
+ {846378000 -3600 0 -0100}
+ {859683600 0 1 +0000}
+ {877827600 -3600 0 -0100}
+ {891133200 0 1 +0000}
+ {909277200 -3600 0 -0100}
+ {922582800 0 1 +0000}
+ {941331600 -3600 0 -0100}
+ {954032400 0 1 +0000}
+ {972781200 -3600 0 -0100}
+ {985482000 0 1 +0000}
+ {1004230800 -3600 0 -0100}
+ {1017536400 0 1 +0000}
+ {1035680400 -3600 0 -0100}
+ {1048986000 0 1 +0000}
+ {1067130000 -3600 0 -0100}
+ {1080435600 0 1 +0000}
+ {1099184400 -3600 0 -0100}
+ {1111885200 0 1 +0000}
+ {1130634000 -3600 0 -0100}
+ {1143334800 0 1 +0000}
+ {1162083600 -3600 0 -0100}
+ {1174784400 0 1 +0000}
+ {1193533200 -3600 0 -0100}
+ {1206838800 0 1 +0000}
+ {1224982800 -3600 0 -0100}
+ {1238288400 0 1 +0000}
+ {1256432400 -3600 0 -0100}
+ {1269738000 0 1 +0000}
+ {1288486800 -3600 0 -0100}
+ {1301187600 0 1 +0000}
+ {1319936400 -3600 0 -0100}
+ {1332637200 0 1 +0000}
+ {1351386000 -3600 0 -0100}
+ {1364691600 0 1 +0000}
+ {1382835600 -3600 0 -0100}
+ {1396141200 0 1 +0000}
+ {1414285200 -3600 0 -0100}
+ {1427590800 0 1 +0000}
+ {1445734800 -3600 0 -0100}
+ {1459040400 0 1 +0000}
+ {1477789200 -3600 0 -0100}
+ {1490490000 0 1 +0000}
+ {1509238800 -3600 0 -0100}
+ {1521939600 0 1 +0000}
+ {1540688400 -3600 0 -0100}
+ {1553994000 0 1 +0000}
+ {1572138000 -3600 0 -0100}
+ {1585443600 0 1 +0000}
+ {1603587600 -3600 0 -0100}
+ {1616893200 0 1 +0000}
+ {1635642000 -3600 0 -0100}
+ {1648342800 0 1 +0000}
+ {1667091600 -3600 0 -0100}
+ {1679792400 0 1 +0000}
+ {1698541200 -3600 0 -0100}
+ {1711846800 -3600 0 -0100}
+ {1729990800 -7200 0 -0200}
+ {1743296400 -3600 1 -0100}
+ {1761440400 -7200 0 -0200}
+ {1774746000 -3600 1 -0100}
+ {1792890000 -7200 0 -0200}
+ {1806195600 -3600 1 -0100}
+ {1824944400 -7200 0 -0200}
+ {1837645200 -3600 1 -0100}
+ {1856394000 -7200 0 -0200}
+ {1869094800 -3600 1 -0100}
+ {1887843600 -7200 0 -0200}
+ {1901149200 -3600 1 -0100}
+ {1919293200 -7200 0 -0200}
+ {1932598800 -3600 1 -0100}
+ {1950742800 -7200 0 -0200}
+ {1964048400 -3600 1 -0100}
+ {1982797200 -7200 0 -0200}
+ {1995498000 -3600 1 -0100}
+ {2014246800 -7200 0 -0200}
+ {2026947600 -3600 1 -0100}
+ {2045696400 -7200 0 -0200}
+ {2058397200 -3600 1 -0100}
+ {2077146000 -7200 0 -0200}
+ {2090451600 -3600 1 -0100}
+ {2108595600 -7200 0 -0200}
+ {2121901200 -3600 1 -0100}
+ {2140045200 -7200 0 -0200}
+ {2153350800 -3600 1 -0100}
+ {2172099600 -7200 0 -0200}
+ {2184800400 -3600 1 -0100}
+ {2203549200 -7200 0 -0200}
+ {2216250000 -3600 1 -0100}
+ {2234998800 -7200 0 -0200}
+ {2248304400 -3600 1 -0100}
+ {2266448400 -7200 0 -0200}
+ {2279754000 -3600 1 -0100}
+ {2297898000 -7200 0 -0200}
+ {2311203600 -3600 1 -0100}
+ {2329347600 -7200 0 -0200}
+ {2342653200 -3600 1 -0100}
+ {2361402000 -7200 0 -0200}
+ {2374102800 -3600 1 -0100}
+ {2392851600 -7200 0 -0200}
+ {2405552400 -3600 1 -0100}
+ {2424301200 -7200 0 -0200}
+ {2437606800 -3600 1 -0100}
+ {2455750800 -7200 0 -0200}
+ {2469056400 -3600 1 -0100}
+ {2487200400 -7200 0 -0200}
+ {2500506000 -3600 1 -0100}
+ {2519254800 -7200 0 -0200}
+ {2531955600 -3600 1 -0100}
+ {2550704400 -7200 0 -0200}
+ {2563405200 -3600 1 -0100}
+ {2582154000 -7200 0 -0200}
+ {2595459600 -3600 1 -0100}
+ {2613603600 -7200 0 -0200}
+ {2626909200 -3600 1 -0100}
+ {2645053200 -7200 0 -0200}
+ {2658358800 -3600 1 -0100}
+ {2676502800 -7200 0 -0200}
+ {2689808400 -3600 1 -0100}
+ {2708557200 -7200 0 -0200}
+ {2721258000 -3600 1 -0100}
+ {2740006800 -7200 0 -0200}
+ {2752707600 -3600 1 -0100}
+ {2771456400 -7200 0 -0200}
+ {2784762000 -3600 1 -0100}
+ {2802906000 -7200 0 -0200}
+ {2816211600 -3600 1 -0100}
+ {2834355600 -7200 0 -0200}
+ {2847661200 -3600 1 -0100}
+ {2866410000 -7200 0 -0200}
+ {2879110800 -3600 1 -0100}
+ {2897859600 -7200 0 -0200}
+ {2910560400 -3600 1 -0100}
+ {2929309200 -7200 0 -0200}
+ {2942010000 -3600 1 -0100}
+ {2960758800 -7200 0 -0200}
+ {2974064400 -3600 1 -0100}
+ {2992208400 -7200 0 -0200}
+ {3005514000 -3600 1 -0100}
+ {3023658000 -7200 0 -0200}
+ {3036963600 -3600 1 -0100}
+ {3055712400 -7200 0 -0200}
+ {3068413200 -3600 1 -0100}
+ {3087162000 -7200 0 -0200}
+ {3099862800 -3600 1 -0100}
+ {3118611600 -7200 0 -0200}
+ {3131917200 -3600 1 -0100}
+ {3150061200 -7200 0 -0200}
+ {3163366800 -3600 1 -0100}
+ {3181510800 -7200 0 -0200}
+ {3194816400 -3600 1 -0100}
+ {3212960400 -7200 0 -0200}
+ {3226266000 -3600 1 -0100}
+ {3245014800 -7200 0 -0200}
+ {3257715600 -3600 1 -0100}
+ {3276464400 -7200 0 -0200}
+ {3289165200 -3600 1 -0100}
+ {3307914000 -7200 0 -0200}
+ {3321219600 -3600 1 -0100}
+ {3339363600 -7200 0 -0200}
+ {3352669200 -3600 1 -0100}
+ {3370813200 -7200 0 -0200}
+ {3384118800 -3600 1 -0100}
+ {3402867600 -7200 0 -0200}
+ {3415568400 -3600 1 -0100}
+ {3434317200 -7200 0 -0200}
+ {3447018000 -3600 1 -0100}
+ {3465766800 -7200 0 -0200}
+ {3479072400 -3600 1 -0100}
+ {3497216400 -7200 0 -0200}
+ {3510522000 -3600 1 -0100}
+ {3528666000 -7200 0 -0200}
+ {3541971600 -3600 1 -0100}
+ {3560115600 -7200 0 -0200}
+ {3573421200 -3600 1 -0100}
+ {3592170000 -7200 0 -0200}
+ {3604870800 -3600 1 -0100}
+ {3623619600 -7200 0 -0200}
+ {3636320400 -3600 1 -0100}
+ {3655069200 -7200 0 -0200}
+ {3668374800 -3600 1 -0100}
+ {3686518800 -7200 0 -0200}
+ {3699824400 -3600 1 -0100}
+ {3717968400 -7200 0 -0200}
+ {3731274000 -3600 1 -0100}
+ {3750022800 -7200 0 -0200}
+ {3762723600 -3600 1 -0100}
+ {3781472400 -7200 0 -0200}
+ {3794173200 -3600 1 -0100}
+ {3812922000 -7200 0 -0200}
+ {3825622800 -3600 1 -0100}
+ {3844371600 -7200 0 -0200}
+ {3857677200 -3600 1 -0100}
+ {3875821200 -7200 0 -0200}
+ {3889126800 -3600 1 -0100}
+ {3907270800 -7200 0 -0200}
+ {3920576400 -3600 1 -0100}
+ {3939325200 -7200 0 -0200}
+ {3952026000 -3600 1 -0100}
+ {3970774800 -7200 0 -0200}
+ {3983475600 -3600 1 -0100}
+ {4002224400 -7200 0 -0200}
+ {4015530000 -3600 1 -0100}
+ {4033674000 -7200 0 -0200}
+ {4046979600 -3600 1 -0100}
+ {4065123600 -7200 0 -0200}
+ {4078429200 -3600 1 -0100}
+ {4096573200 -7200 0 -0200}
}
diff --git a/library/tzdata/America/Thunder_Bay b/library/tzdata/America/Thunder_Bay
index 8a454be..4761beb 100644
--- a/library/tzdata/America/Thunder_Bay
+++ b/library/tzdata/America/Thunder_Bay
@@ -1,272 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Thunder_Bay) {
- {-9223372036854775808 -21420 0 LMT}
- {-2366733780 -21600 0 CST}
- {-1893434400 -18000 0 EST}
- {-883594800 -18000 0 EST}
- {-880218000 -14400 1 EWT}
- {-769395600 -14400 1 EPT}
- {-765396000 -18000 0 EST}
- {18000 -18000 0 EST}
- {9961200 -14400 1 EDT}
- {25682400 -18000 0 EST}
- {41410800 -14400 1 EDT}
- {57736800 -18000 0 EST}
- {73465200 -14400 1 EDT}
- {89186400 -18000 0 EST}
- {94712400 -18000 0 EST}
- {126248400 -18000 0 EST}
- {136364400 -14400 1 EDT}
- {152085600 -18000 0 EST}
- {167814000 -14400 1 EDT}
- {183535200 -18000 0 EST}
- {199263600 -14400 1 EDT}
- {215589600 -18000 0 EST}
- {230713200 -14400 1 EDT}
- {247039200 -18000 0 EST}
- {262767600 -14400 1 EDT}
- {278488800 -18000 0 EST}
- {294217200 -14400 1 EDT}
- {309938400 -18000 0 EST}
- {325666800 -14400 1 EDT}
- {341388000 -18000 0 EST}
- {357116400 -14400 1 EDT}
- {372837600 -18000 0 EST}
- {388566000 -14400 1 EDT}
- {404892000 -18000 0 EST}
- {420015600 -14400 1 EDT}
- {436341600 -18000 0 EST}
- {452070000 -14400 1 EDT}
- {467791200 -18000 0 EST}
- {483519600 -14400 1 EDT}
- {499240800 -18000 0 EST}
- {514969200 -14400 1 EDT}
- {530690400 -18000 0 EST}
- {544604400 -14400 1 EDT}
- {562140000 -18000 0 EST}
- {576054000 -14400 1 EDT}
- {594194400 -18000 0 EST}
- {607503600 -14400 1 EDT}
- {625644000 -18000 0 EST}
- {638953200 -14400 1 EDT}
- {657093600 -18000 0 EST}
- {671007600 -14400 1 EDT}
- {688543200 -18000 0 EST}
- {702457200 -14400 1 EDT}
- {719992800 -18000 0 EST}
- {733906800 -14400 1 EDT}
- {752047200 -18000 0 EST}
- {765356400 -14400 1 EDT}
- {783496800 -18000 0 EST}
- {796806000 -14400 1 EDT}
- {814946400 -18000 0 EST}
- {828860400 -14400 1 EDT}
- {846396000 -18000 0 EST}
- {860310000 -14400 1 EDT}
- {877845600 -18000 0 EST}
- {891759600 -14400 1 EDT}
- {909295200 -18000 0 EST}
- {923209200 -14400 1 EDT}
- {941349600 -18000 0 EST}
- {954658800 -14400 1 EDT}
- {972799200 -18000 0 EST}
- {986108400 -14400 1 EDT}
- {1004248800 -18000 0 EST}
- {1018162800 -14400 1 EDT}
- {1035698400 -18000 0 EST}
- {1049612400 -14400 1 EDT}
- {1067148000 -18000 0 EST}
- {1081062000 -14400 1 EDT}
- {1099202400 -18000 0 EST}
- {1112511600 -14400 1 EDT}
- {1130652000 -18000 0 EST}
- {1143961200 -14400 1 EDT}
- {1162101600 -18000 0 EST}
- {1173596400 -14400 1 EDT}
- {1194156000 -18000 0 EST}
- {1205046000 -14400 1 EDT}
- {1225605600 -18000 0 EST}
- {1236495600 -14400 1 EDT}
- {1257055200 -18000 0 EST}
- {1268550000 -14400 1 EDT}
- {1289109600 -18000 0 EST}
- {1299999600 -14400 1 EDT}
- {1320559200 -18000 0 EST}
- {1331449200 -14400 1 EDT}
- {1352008800 -18000 0 EST}
- {1362898800 -14400 1 EDT}
- {1383458400 -18000 0 EST}
- {1394348400 -14400 1 EDT}
- {1414908000 -18000 0 EST}
- {1425798000 -14400 1 EDT}
- {1446357600 -18000 0 EST}
- {1457852400 -14400 1 EDT}
- {1478412000 -18000 0 EST}
- {1489302000 -14400 1 EDT}
- {1509861600 -18000 0 EST}
- {1520751600 -14400 1 EDT}
- {1541311200 -18000 0 EST}
- {1552201200 -14400 1 EDT}
- {1572760800 -18000 0 EST}
- {1583650800 -14400 1 EDT}
- {1604210400 -18000 0 EST}
- {1615705200 -14400 1 EDT}
- {1636264800 -18000 0 EST}
- {1647154800 -14400 1 EDT}
- {1667714400 -18000 0 EST}
- {1678604400 -14400 1 EDT}
- {1699164000 -18000 0 EST}
- {1710054000 -14400 1 EDT}
- {1730613600 -18000 0 EST}
- {1741503600 -14400 1 EDT}
- {1762063200 -18000 0 EST}
- {1772953200 -14400 1 EDT}
- {1793512800 -18000 0 EST}
- {1805007600 -14400 1 EDT}
- {1825567200 -18000 0 EST}
- {1836457200 -14400 1 EDT}
- {1857016800 -18000 0 EST}
- {1867906800 -14400 1 EDT}
- {1888466400 -18000 0 EST}
- {1899356400 -14400 1 EDT}
- {1919916000 -18000 0 EST}
- {1930806000 -14400 1 EDT}
- {1951365600 -18000 0 EST}
- {1962860400 -14400 1 EDT}
- {1983420000 -18000 0 EST}
- {1994310000 -14400 1 EDT}
- {2014869600 -18000 0 EST}
- {2025759600 -14400 1 EDT}
- {2046319200 -18000 0 EST}
- {2057209200 -14400 1 EDT}
- {2077768800 -18000 0 EST}
- {2088658800 -14400 1 EDT}
- {2109218400 -18000 0 EST}
- {2120108400 -14400 1 EDT}
- {2140668000 -18000 0 EST}
- {2152162800 -14400 1 EDT}
- {2172722400 -18000 0 EST}
- {2183612400 -14400 1 EDT}
- {2204172000 -18000 0 EST}
- {2215062000 -14400 1 EDT}
- {2235621600 -18000 0 EST}
- {2246511600 -14400 1 EDT}
- {2267071200 -18000 0 EST}
- {2277961200 -14400 1 EDT}
- {2298520800 -18000 0 EST}
- {2309410800 -14400 1 EDT}
- {2329970400 -18000 0 EST}
- {2341465200 -14400 1 EDT}
- {2362024800 -18000 0 EST}
- {2372914800 -14400 1 EDT}
- {2393474400 -18000 0 EST}
- {2404364400 -14400 1 EDT}
- {2424924000 -18000 0 EST}
- {2435814000 -14400 1 EDT}
- {2456373600 -18000 0 EST}
- {2467263600 -14400 1 EDT}
- {2487823200 -18000 0 EST}
- {2499318000 -14400 1 EDT}
- {2519877600 -18000 0 EST}
- {2530767600 -14400 1 EDT}
- {2551327200 -18000 0 EST}
- {2562217200 -14400 1 EDT}
- {2582776800 -18000 0 EST}
- {2593666800 -14400 1 EDT}
- {2614226400 -18000 0 EST}
- {2625116400 -14400 1 EDT}
- {2645676000 -18000 0 EST}
- {2656566000 -14400 1 EDT}
- {2677125600 -18000 0 EST}
- {2688620400 -14400 1 EDT}
- {2709180000 -18000 0 EST}
- {2720070000 -14400 1 EDT}
- {2740629600 -18000 0 EST}
- {2751519600 -14400 1 EDT}
- {2772079200 -18000 0 EST}
- {2782969200 -14400 1 EDT}
- {2803528800 -18000 0 EST}
- {2814418800 -14400 1 EDT}
- {2834978400 -18000 0 EST}
- {2846473200 -14400 1 EDT}
- {2867032800 -18000 0 EST}
- {2877922800 -14400 1 EDT}
- {2898482400 -18000 0 EST}
- {2909372400 -14400 1 EDT}
- {2929932000 -18000 0 EST}
- {2940822000 -14400 1 EDT}
- {2961381600 -18000 0 EST}
- {2972271600 -14400 1 EDT}
- {2992831200 -18000 0 EST}
- {3003721200 -14400 1 EDT}
- {3024280800 -18000 0 EST}
- {3035775600 -14400 1 EDT}
- {3056335200 -18000 0 EST}
- {3067225200 -14400 1 EDT}
- {3087784800 -18000 0 EST}
- {3098674800 -14400 1 EDT}
- {3119234400 -18000 0 EST}
- {3130124400 -14400 1 EDT}
- {3150684000 -18000 0 EST}
- {3161574000 -14400 1 EDT}
- {3182133600 -18000 0 EST}
- {3193023600 -14400 1 EDT}
- {3213583200 -18000 0 EST}
- {3225078000 -14400 1 EDT}
- {3245637600 -18000 0 EST}
- {3256527600 -14400 1 EDT}
- {3277087200 -18000 0 EST}
- {3287977200 -14400 1 EDT}
- {3308536800 -18000 0 EST}
- {3319426800 -14400 1 EDT}
- {3339986400 -18000 0 EST}
- {3350876400 -14400 1 EDT}
- {3371436000 -18000 0 EST}
- {3382930800 -14400 1 EDT}
- {3403490400 -18000 0 EST}
- {3414380400 -14400 1 EDT}
- {3434940000 -18000 0 EST}
- {3445830000 -14400 1 EDT}
- {3466389600 -18000 0 EST}
- {3477279600 -14400 1 EDT}
- {3497839200 -18000 0 EST}
- {3508729200 -14400 1 EDT}
- {3529288800 -18000 0 EST}
- {3540178800 -14400 1 EDT}
- {3560738400 -18000 0 EST}
- {3572233200 -14400 1 EDT}
- {3592792800 -18000 0 EST}
- {3603682800 -14400 1 EDT}
- {3624242400 -18000 0 EST}
- {3635132400 -14400 1 EDT}
- {3655692000 -18000 0 EST}
- {3666582000 -14400 1 EDT}
- {3687141600 -18000 0 EST}
- {3698031600 -14400 1 EDT}
- {3718591200 -18000 0 EST}
- {3730086000 -14400 1 EDT}
- {3750645600 -18000 0 EST}
- {3761535600 -14400 1 EDT}
- {3782095200 -18000 0 EST}
- {3792985200 -14400 1 EDT}
- {3813544800 -18000 0 EST}
- {3824434800 -14400 1 EDT}
- {3844994400 -18000 0 EST}
- {3855884400 -14400 1 EDT}
- {3876444000 -18000 0 EST}
- {3887334000 -14400 1 EDT}
- {3907893600 -18000 0 EST}
- {3919388400 -14400 1 EDT}
- {3939948000 -18000 0 EST}
- {3950838000 -14400 1 EDT}
- {3971397600 -18000 0 EST}
- {3982287600 -14400 1 EDT}
- {4002847200 -18000 0 EST}
- {4013737200 -14400 1 EDT}
- {4034296800 -18000 0 EST}
- {4045186800 -14400 1 EDT}
- {4065746400 -18000 0 EST}
- {4076636400 -14400 1 EDT}
- {4097196000 -18000 0 EST}
+if {![info exists TZData(America/Toronto)]} {
+ LoadTimeZoneFile America/Toronto
}
+set TZData(:America/Thunder_Bay) $TZData(:America/Toronto)
diff --git a/library/tzdata/America/Tijuana b/library/tzdata/America/Tijuana
index 186fe7d..0144bf65 100644
--- a/library/tzdata/America/Tijuana
+++ b/library/tzdata/America/Tijuana
@@ -4,15 +4,21 @@ set TZData(:America/Tijuana) {
{-9223372036854775808 -28084 0 LMT}
{-1514739600 -25200 0 MST}
{-1451667600 -28800 0 PST}
- {-1343062800 -25200 0 MST}
+ {-1343145600 -25200 0 MST}
{-1234803600 -28800 0 PST}
{-1222963200 -25200 1 PDT}
{-1207242000 -28800 0 PST}
{-873820800 -25200 1 PWT}
{-769395600 -25200 1 PPT}
- {-761677200 -28800 0 PST}
+ {-761418000 -28800 0 PST}
{-686073600 -25200 1 PDT}
{-661539600 -28800 0 PST}
+ {-620755200 -25200 1 PDT}
+ {-608144400 -28800 0 PST}
+ {-589384800 -25200 1 PDT}
+ {-576082800 -28800 0 PST}
+ {-557935200 -25200 1 PDT}
+ {-544633200 -28800 0 PST}
{-504892800 -28800 0 PST}
{-495039600 -25200 1 PDT}
{-481734000 -28800 0 PST}
diff --git a/library/tzdata/America/Toronto b/library/tzdata/America/Toronto
index 09bf786..63b7a82 100644
--- a/library/tzdata/America/Toronto
+++ b/library/tzdata/America/Toronto
@@ -55,12 +55,12 @@ set TZData(:America/Toronto) {
{-757364400 -18000 0 EST}
{-747248400 -14400 1 EDT}
{-733946400 -18000 0 EST}
- {-715806000 -14400 1 EDT}
- {-702504000 -18000 0 EST}
- {-684356400 -14400 1 EDT}
- {-671054400 -18000 0 EST}
- {-652906800 -14400 1 EDT}
- {-634161600 -18000 0 EST}
+ {-715798800 -14400 1 EDT}
+ {-702496800 -18000 0 EST}
+ {-684349200 -14400 1 EDT}
+ {-671047200 -18000 0 EST}
+ {-652899600 -14400 1 EDT}
+ {-634154400 -18000 0 EST}
{-620845200 -14400 1 EDT}
{-602704800 -18000 0 EST}
{-589395600 -14400 1 EDT}
diff --git a/library/tzdata/America/Whitehorse b/library/tzdata/America/Whitehorse
index 498a203..602ecd1 100644
--- a/library/tzdata/America/Whitehorse
+++ b/library/tzdata/America/Whitehorse
@@ -10,8 +10,10 @@ set TZData(:America/Whitehorse) {
{-880203600 -28800 1 YWT}
{-769395600 -28800 1 YPT}
{-765381600 -32400 0 YST}
+ {-157734000 -32400 0 YST}
{-147884400 -25200 1 YDDT}
{-131554800 -32400 0 YST}
+ {-121273200 -28800 0 PST}
{315561600 -28800 0 PST}
{325677600 -25200 1 PDT}
{341398800 -28800 0 PST}
diff --git a/library/tzdata/America/Yellowknife b/library/tzdata/America/Yellowknife
index c6c4ed5..69e171d 100644
--- a/library/tzdata/America/Yellowknife
+++ b/library/tzdata/America/Yellowknife
@@ -1,252 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:America/Yellowknife) {
- {-9223372036854775808 0 0 -00}
- {-1104537600 -25200 0 MST}
- {-880210800 -21600 1 MWT}
- {-769395600 -21600 1 MPT}
- {-765388800 -25200 0 MST}
- {-147891600 -18000 1 MDDT}
- {-131562000 -25200 0 MST}
- {315558000 -25200 0 MST}
- {325674000 -21600 1 MDT}
- {341395200 -25200 0 MST}
- {357123600 -21600 1 MDT}
- {372844800 -25200 0 MST}
- {388573200 -21600 1 MDT}
- {404899200 -25200 0 MST}
- {420022800 -21600 1 MDT}
- {436348800 -25200 0 MST}
- {452077200 -21600 1 MDT}
- {467798400 -25200 0 MST}
- {483526800 -21600 1 MDT}
- {499248000 -25200 0 MST}
- {514976400 -21600 1 MDT}
- {530697600 -25200 0 MST}
- {544611600 -21600 1 MDT}
- {562147200 -25200 0 MST}
- {576061200 -21600 1 MDT}
- {594201600 -25200 0 MST}
- {607510800 -21600 1 MDT}
- {625651200 -25200 0 MST}
- {638960400 -21600 1 MDT}
- {657100800 -25200 0 MST}
- {671014800 -21600 1 MDT}
- {688550400 -25200 0 MST}
- {702464400 -21600 1 MDT}
- {720000000 -25200 0 MST}
- {733914000 -21600 1 MDT}
- {752054400 -25200 0 MST}
- {765363600 -21600 1 MDT}
- {783504000 -25200 0 MST}
- {796813200 -21600 1 MDT}
- {814953600 -25200 0 MST}
- {828867600 -21600 1 MDT}
- {846403200 -25200 0 MST}
- {860317200 -21600 1 MDT}
- {877852800 -25200 0 MST}
- {891766800 -21600 1 MDT}
- {909302400 -25200 0 MST}
- {923216400 -21600 1 MDT}
- {941356800 -25200 0 MST}
- {954666000 -21600 1 MDT}
- {972806400 -25200 0 MST}
- {986115600 -21600 1 MDT}
- {1004256000 -25200 0 MST}
- {1018170000 -21600 1 MDT}
- {1035705600 -25200 0 MST}
- {1049619600 -21600 1 MDT}
- {1067155200 -25200 0 MST}
- {1081069200 -21600 1 MDT}
- {1099209600 -25200 0 MST}
- {1112518800 -21600 1 MDT}
- {1130659200 -25200 0 MST}
- {1143968400 -21600 1 MDT}
- {1162108800 -25200 0 MST}
- {1173603600 -21600 1 MDT}
- {1194163200 -25200 0 MST}
- {1205053200 -21600 1 MDT}
- {1225612800 -25200 0 MST}
- {1236502800 -21600 1 MDT}
- {1257062400 -25200 0 MST}
- {1268557200 -21600 1 MDT}
- {1289116800 -25200 0 MST}
- {1300006800 -21600 1 MDT}
- {1320566400 -25200 0 MST}
- {1331456400 -21600 1 MDT}
- {1352016000 -25200 0 MST}
- {1362906000 -21600 1 MDT}
- {1383465600 -25200 0 MST}
- {1394355600 -21600 1 MDT}
- {1414915200 -25200 0 MST}
- {1425805200 -21600 1 MDT}
- {1446364800 -25200 0 MST}
- {1457859600 -21600 1 MDT}
- {1478419200 -25200 0 MST}
- {1489309200 -21600 1 MDT}
- {1509868800 -25200 0 MST}
- {1520758800 -21600 1 MDT}
- {1541318400 -25200 0 MST}
- {1552208400 -21600 1 MDT}
- {1572768000 -25200 0 MST}
- {1583658000 -21600 1 MDT}
- {1604217600 -25200 0 MST}
- {1615712400 -21600 1 MDT}
- {1636272000 -25200 0 MST}
- {1647162000 -21600 1 MDT}
- {1667721600 -25200 0 MST}
- {1678611600 -21600 1 MDT}
- {1699171200 -25200 0 MST}
- {1710061200 -21600 1 MDT}
- {1730620800 -25200 0 MST}
- {1741510800 -21600 1 MDT}
- {1762070400 -25200 0 MST}
- {1772960400 -21600 1 MDT}
- {1793520000 -25200 0 MST}
- {1805014800 -21600 1 MDT}
- {1825574400 -25200 0 MST}
- {1836464400 -21600 1 MDT}
- {1857024000 -25200 0 MST}
- {1867914000 -21600 1 MDT}
- {1888473600 -25200 0 MST}
- {1899363600 -21600 1 MDT}
- {1919923200 -25200 0 MST}
- {1930813200 -21600 1 MDT}
- {1951372800 -25200 0 MST}
- {1962867600 -21600 1 MDT}
- {1983427200 -25200 0 MST}
- {1994317200 -21600 1 MDT}
- {2014876800 -25200 0 MST}
- {2025766800 -21600 1 MDT}
- {2046326400 -25200 0 MST}
- {2057216400 -21600 1 MDT}
- {2077776000 -25200 0 MST}
- {2088666000 -21600 1 MDT}
- {2109225600 -25200 0 MST}
- {2120115600 -21600 1 MDT}
- {2140675200 -25200 0 MST}
- {2152170000 -21600 1 MDT}
- {2172729600 -25200 0 MST}
- {2183619600 -21600 1 MDT}
- {2204179200 -25200 0 MST}
- {2215069200 -21600 1 MDT}
- {2235628800 -25200 0 MST}
- {2246518800 -21600 1 MDT}
- {2267078400 -25200 0 MST}
- {2277968400 -21600 1 MDT}
- {2298528000 -25200 0 MST}
- {2309418000 -21600 1 MDT}
- {2329977600 -25200 0 MST}
- {2341472400 -21600 1 MDT}
- {2362032000 -25200 0 MST}
- {2372922000 -21600 1 MDT}
- {2393481600 -25200 0 MST}
- {2404371600 -21600 1 MDT}
- {2424931200 -25200 0 MST}
- {2435821200 -21600 1 MDT}
- {2456380800 -25200 0 MST}
- {2467270800 -21600 1 MDT}
- {2487830400 -25200 0 MST}
- {2499325200 -21600 1 MDT}
- {2519884800 -25200 0 MST}
- {2530774800 -21600 1 MDT}
- {2551334400 -25200 0 MST}
- {2562224400 -21600 1 MDT}
- {2582784000 -25200 0 MST}
- {2593674000 -21600 1 MDT}
- {2614233600 -25200 0 MST}
- {2625123600 -21600 1 MDT}
- {2645683200 -25200 0 MST}
- {2656573200 -21600 1 MDT}
- {2677132800 -25200 0 MST}
- {2688627600 -21600 1 MDT}
- {2709187200 -25200 0 MST}
- {2720077200 -21600 1 MDT}
- {2740636800 -25200 0 MST}
- {2751526800 -21600 1 MDT}
- {2772086400 -25200 0 MST}
- {2782976400 -21600 1 MDT}
- {2803536000 -25200 0 MST}
- {2814426000 -21600 1 MDT}
- {2834985600 -25200 0 MST}
- {2846480400 -21600 1 MDT}
- {2867040000 -25200 0 MST}
- {2877930000 -21600 1 MDT}
- {2898489600 -25200 0 MST}
- {2909379600 -21600 1 MDT}
- {2929939200 -25200 0 MST}
- {2940829200 -21600 1 MDT}
- {2961388800 -25200 0 MST}
- {2972278800 -21600 1 MDT}
- {2992838400 -25200 0 MST}
- {3003728400 -21600 1 MDT}
- {3024288000 -25200 0 MST}
- {3035782800 -21600 1 MDT}
- {3056342400 -25200 0 MST}
- {3067232400 -21600 1 MDT}
- {3087792000 -25200 0 MST}
- {3098682000 -21600 1 MDT}
- {3119241600 -25200 0 MST}
- {3130131600 -21600 1 MDT}
- {3150691200 -25200 0 MST}
- {3161581200 -21600 1 MDT}
- {3182140800 -25200 0 MST}
- {3193030800 -21600 1 MDT}
- {3213590400 -25200 0 MST}
- {3225085200 -21600 1 MDT}
- {3245644800 -25200 0 MST}
- {3256534800 -21600 1 MDT}
- {3277094400 -25200 0 MST}
- {3287984400 -21600 1 MDT}
- {3308544000 -25200 0 MST}
- {3319434000 -21600 1 MDT}
- {3339993600 -25200 0 MST}
- {3350883600 -21600 1 MDT}
- {3371443200 -25200 0 MST}
- {3382938000 -21600 1 MDT}
- {3403497600 -25200 0 MST}
- {3414387600 -21600 1 MDT}
- {3434947200 -25200 0 MST}
- {3445837200 -21600 1 MDT}
- {3466396800 -25200 0 MST}
- {3477286800 -21600 1 MDT}
- {3497846400 -25200 0 MST}
- {3508736400 -21600 1 MDT}
- {3529296000 -25200 0 MST}
- {3540186000 -21600 1 MDT}
- {3560745600 -25200 0 MST}
- {3572240400 -21600 1 MDT}
- {3592800000 -25200 0 MST}
- {3603690000 -21600 1 MDT}
- {3624249600 -25200 0 MST}
- {3635139600 -21600 1 MDT}
- {3655699200 -25200 0 MST}
- {3666589200 -21600 1 MDT}
- {3687148800 -25200 0 MST}
- {3698038800 -21600 1 MDT}
- {3718598400 -25200 0 MST}
- {3730093200 -21600 1 MDT}
- {3750652800 -25200 0 MST}
- {3761542800 -21600 1 MDT}
- {3782102400 -25200 0 MST}
- {3792992400 -21600 1 MDT}
- {3813552000 -25200 0 MST}
- {3824442000 -21600 1 MDT}
- {3845001600 -25200 0 MST}
- {3855891600 -21600 1 MDT}
- {3876451200 -25200 0 MST}
- {3887341200 -21600 1 MDT}
- {3907900800 -25200 0 MST}
- {3919395600 -21600 1 MDT}
- {3939955200 -25200 0 MST}
- {3950845200 -21600 1 MDT}
- {3971404800 -25200 0 MST}
- {3982294800 -21600 1 MDT}
- {4002854400 -25200 0 MST}
- {4013744400 -21600 1 MDT}
- {4034304000 -25200 0 MST}
- {4045194000 -21600 1 MDT}
- {4065753600 -25200 0 MST}
- {4076643600 -21600 1 MDT}
- {4097203200 -25200 0 MST}
+if {![info exists TZData(America/Edmonton)]} {
+ LoadTimeZoneFile America/Edmonton
}
+set TZData(:America/Yellowknife) $TZData(:America/Edmonton)
diff --git a/library/tzdata/Antarctica/Casey b/library/tzdata/Antarctica/Casey
index 56935e3..cb73b16 100644
--- a/library/tzdata/Antarctica/Casey
+++ b/library/tzdata/Antarctica/Casey
@@ -2,16 +2,21 @@
set TZData(:Antarctica/Casey) {
{-9223372036854775808 0 0 -00}
- {-31536000 28800 0 +08}
- {1255802400 39600 0 +11}
- {1267714800 28800 0 +08}
- {1319738400 39600 0 +11}
- {1329843600 28800 0 +08}
- {1477065600 39600 0 +11}
- {1520701200 28800 0 +08}
- {1538856000 39600 0 +11}
- {1552752000 28800 0 +08}
- {1570129200 39600 0 +11}
- {1583596800 28800 0 +08}
- {1601740860 39600 0 +11}
+ {-31536000 28800 0 +0800}
+ {1255802400 39600 0 +1100}
+ {1267714800 28800 0 +0800}
+ {1319738400 39600 0 +1100}
+ {1329843600 28800 0 +0800}
+ {1477065600 39600 0 +1100}
+ {1520701200 28800 0 +0800}
+ {1538856000 39600 0 +1100}
+ {1552752000 28800 0 +0800}
+ {1570129200 39600 0 +1100}
+ {1583596800 28800 0 +0800}
+ {1601740860 39600 0 +1100}
+ {1615640400 28800 0 +0800}
+ {1633190460 39600 0 +1100}
+ {1647090000 28800 0 +0800}
+ {1664640060 39600 0 +1100}
+ {1678291200 28800 0 +0800}
}
diff --git a/library/tzdata/Antarctica/Davis b/library/tzdata/Antarctica/Davis
index 9bb178b..f16cdc2 100644
--- a/library/tzdata/Antarctica/Davis
+++ b/library/tzdata/Antarctica/Davis
@@ -2,11 +2,11 @@
set TZData(:Antarctica/Davis) {
{-9223372036854775808 0 0 -00}
- {-409190400 25200 0 +07}
+ {-409190400 25200 0 +0700}
{-163062000 0 0 -00}
- {-28857600 25200 0 +07}
- {1255806000 18000 0 +05}
- {1268251200 25200 0 +07}
- {1319742000 18000 0 +05}
- {1329854400 25200 0 +07}
+ {-28857600 25200 0 +0700}
+ {1255806000 18000 0 +0500}
+ {1268251200 25200 0 +0700}
+ {1319742000 18000 0 +0500}
+ {1329854400 25200 0 +0700}
}
diff --git a/library/tzdata/Antarctica/Mawson b/library/tzdata/Antarctica/Mawson
index 4828b1a..9211803 100644
--- a/library/tzdata/Antarctica/Mawson
+++ b/library/tzdata/Antarctica/Mawson
@@ -2,6 +2,6 @@
set TZData(:Antarctica/Mawson) {
{-9223372036854775808 0 0 -00}
- {-501206400 21600 0 +06}
- {1255809600 18000 0 +05}
+ {-501206400 21600 0 +0600}
+ {1255809600 18000 0 +0500}
}
diff --git a/library/tzdata/Antarctica/Palmer b/library/tzdata/Antarctica/Palmer
index f450e3b..2e2af6d 100644
--- a/library/tzdata/Antarctica/Palmer
+++ b/library/tzdata/Antarctica/Palmer
@@ -2,86 +2,86 @@
set TZData(:Antarctica/Palmer) {
{-9223372036854775808 0 0 -00}
- {-157766400 -14400 0 -04}
- {-152654400 -14400 0 -04}
- {-132955200 -10800 1 -04}
- {-121122000 -14400 0 -04}
- {-101419200 -10800 1 -04}
- {-86821200 -14400 0 -04}
- {-71092800 -10800 1 -04}
- {-54766800 -14400 0 -04}
- {-39038400 -10800 1 -04}
- {-23317200 -14400 0 -04}
- {-7588800 -10800 0 -03}
- {128142000 -7200 1 -03}
- {136605600 -10800 0 -03}
- {389070000 -14400 0 -04}
- {403070400 -10800 1 -04}
- {416372400 -14400 0 -04}
- {434520000 -10800 1 -04}
- {447822000 -14400 0 -04}
- {466574400 -10800 1 -04}
- {479271600 -14400 0 -04}
- {498024000 -10800 1 -04}
- {510721200 -14400 0 -04}
- {529473600 -10800 1 -04}
- {545194800 -14400 0 -04}
- {560923200 -10800 1 -04}
- {574225200 -14400 0 -04}
- {592372800 -10800 1 -04}
- {605674800 -14400 0 -04}
- {624427200 -10800 1 -04}
- {637124400 -14400 0 -04}
- {653457600 -10800 1 -04}
- {668574000 -14400 0 -04}
- {687326400 -10800 1 -04}
- {700628400 -14400 0 -04}
- {718776000 -10800 1 -04}
- {732078000 -14400 0 -04}
- {750225600 -10800 1 -04}
- {763527600 -14400 0 -04}
- {781675200 -10800 1 -04}
- {794977200 -14400 0 -04}
- {813729600 -10800 1 -04}
- {826426800 -14400 0 -04}
- {845179200 -10800 1 -04}
- {859690800 -14400 0 -04}
- {876628800 -10800 1 -04}
- {889930800 -14400 0 -04}
- {906868800 -10800 1 -04}
- {923194800 -14400 0 -04}
- {939528000 -10800 1 -04}
- {952830000 -14400 0 -04}
- {971582400 -10800 1 -04}
- {984279600 -14400 0 -04}
- {1003032000 -10800 1 -04}
- {1015729200 -14400 0 -04}
- {1034481600 -10800 1 -04}
- {1047178800 -14400 0 -04}
- {1065931200 -10800 1 -04}
- {1079233200 -14400 0 -04}
- {1097380800 -10800 1 -04}
- {1110682800 -14400 0 -04}
- {1128830400 -10800 1 -04}
- {1142132400 -14400 0 -04}
- {1160884800 -10800 1 -04}
- {1173582000 -14400 0 -04}
- {1192334400 -10800 1 -04}
- {1206846000 -14400 0 -04}
- {1223784000 -10800 1 -04}
- {1237086000 -14400 0 -04}
- {1255233600 -10800 1 -04}
- {1270350000 -14400 0 -04}
- {1286683200 -10800 1 -04}
- {1304823600 -14400 0 -04}
- {1313899200 -10800 1 -04}
- {1335668400 -14400 0 -04}
- {1346558400 -10800 1 -04}
- {1367118000 -14400 0 -04}
- {1378612800 -10800 1 -04}
- {1398567600 -14400 0 -04}
- {1410062400 -10800 1 -04}
- {1463281200 -14400 0 -04}
- {1471147200 -10800 1 -04}
- {1480820400 -10800 0 -03}
+ {-157766400 -14400 0 -0400}
+ {-152654400 -14400 0 -0400}
+ {-132955200 -10800 1 -0300}
+ {-121122000 -14400 0 -0400}
+ {-101419200 -10800 1 -0300}
+ {-86821200 -14400 0 -0400}
+ {-71092800 -10800 1 -0300}
+ {-54766800 -14400 0 -0400}
+ {-39038400 -10800 1 -0300}
+ {-23317200 -14400 0 -0400}
+ {-7588800 -10800 0 -0300}
+ {128142000 -7200 1 -0200}
+ {136605600 -10800 0 -0300}
+ {389070000 -14400 0 -0400}
+ {403070400 -10800 1 -0300}
+ {416372400 -14400 0 -0400}
+ {434520000 -10800 1 -0300}
+ {447822000 -14400 0 -0400}
+ {466574400 -10800 1 -0300}
+ {479271600 -14400 0 -0400}
+ {498024000 -10800 1 -0300}
+ {510721200 -14400 0 -0400}
+ {529473600 -10800 1 -0300}
+ {545194800 -14400 0 -0400}
+ {560923200 -10800 1 -0300}
+ {574225200 -14400 0 -0400}
+ {592372800 -10800 1 -0300}
+ {605674800 -14400 0 -0400}
+ {624427200 -10800 1 -0300}
+ {637124400 -14400 0 -0400}
+ {653457600 -10800 1 -0300}
+ {668574000 -14400 0 -0400}
+ {687326400 -10800 1 -0300}
+ {700628400 -14400 0 -0400}
+ {718776000 -10800 1 -0300}
+ {732078000 -14400 0 -0400}
+ {750225600 -10800 1 -0300}
+ {763527600 -14400 0 -0400}
+ {781675200 -10800 1 -0300}
+ {794977200 -14400 0 -0400}
+ {813729600 -10800 1 -0300}
+ {826426800 -14400 0 -0400}
+ {845179200 -10800 1 -0300}
+ {859690800 -14400 0 -0400}
+ {876628800 -10800 1 -0300}
+ {889930800 -14400 0 -0400}
+ {906868800 -10800 1 -0300}
+ {923194800 -14400 0 -0400}
+ {939528000 -10800 1 -0300}
+ {952830000 -14400 0 -0400}
+ {971582400 -10800 1 -0300}
+ {984279600 -14400 0 -0400}
+ {1003032000 -10800 1 -0300}
+ {1015729200 -14400 0 -0400}
+ {1034481600 -10800 1 -0300}
+ {1047178800 -14400 0 -0400}
+ {1065931200 -10800 1 -0300}
+ {1079233200 -14400 0 -0400}
+ {1097380800 -10800 1 -0300}
+ {1110682800 -14400 0 -0400}
+ {1128830400 -10800 1 -0300}
+ {1142132400 -14400 0 -0400}
+ {1160884800 -10800 1 -0300}
+ {1173582000 -14400 0 -0400}
+ {1192334400 -10800 1 -0300}
+ {1206846000 -14400 0 -0400}
+ {1223784000 -10800 1 -0300}
+ {1237086000 -14400 0 -0400}
+ {1255233600 -10800 1 -0300}
+ {1270350000 -14400 0 -0400}
+ {1286683200 -10800 1 -0300}
+ {1304823600 -14400 0 -0400}
+ {1313899200 -10800 1 -0300}
+ {1335668400 -14400 0 -0400}
+ {1346558400 -10800 1 -0300}
+ {1367118000 -14400 0 -0400}
+ {1378612800 -10800 1 -0300}
+ {1398567600 -14400 0 -0400}
+ {1410062400 -10800 1 -0300}
+ {1463281200 -14400 0 -0400}
+ {1471147200 -10800 1 -0300}
+ {1480820400 -10800 0 -0300}
}
diff --git a/library/tzdata/Antarctica/Rothera b/library/tzdata/Antarctica/Rothera
index 7f0134f..56d85f6 100644
--- a/library/tzdata/Antarctica/Rothera
+++ b/library/tzdata/Antarctica/Rothera
@@ -2,5 +2,5 @@
set TZData(:Antarctica/Rothera) {
{-9223372036854775808 0 0 -00}
- {218246400 -10800 0 -03}
+ {218246400 -10800 0 -0300}
}
diff --git a/library/tzdata/Antarctica/Vostok b/library/tzdata/Antarctica/Vostok
index 1a19a5d..cd37630 100644
--- a/library/tzdata/Antarctica/Vostok
+++ b/library/tzdata/Antarctica/Vostok
@@ -1,5 +1,9 @@
# created by tools/tclZIC.tcl - do not edit
-if {![info exists TZData(Asia/Urumqi)]} {
- LoadTimeZoneFile Asia/Urumqi
+
+set TZData(:Antarctica/Vostok) {
+ {-9223372036854775808 0 0 -00}
+ {-380073600 25200 0 +0700}
+ {760035600 0 0 -00}
+ {783648000 25200 0 +0700}
+ {1702839600 18000 0 +0500}
}
-set TZData(:Antarctica/Vostok) $TZData(:Asia/Urumqi)
diff --git a/library/tzdata/Asia/Almaty b/library/tzdata/Asia/Almaty
index f42935d..01c189c 100644
--- a/library/tzdata/Asia/Almaty
+++ b/library/tzdata/Asia/Almaty
@@ -2,56 +2,57 @@
set TZData(:Asia/Almaty) {
{-9223372036854775808 18468 0 LMT}
- {-1441170468 18000 0 +05}
- {-1247547600 21600 0 +06}
- {354909600 25200 1 +06}
- {370717200 21600 0 +06}
- {386445600 25200 1 +06}
- {402253200 21600 0 +06}
- {417981600 25200 1 +06}
- {433789200 21600 0 +06}
- {449604000 25200 1 +06}
- {465336000 21600 0 +06}
- {481060800 25200 1 +06}
- {496785600 21600 0 +06}
- {512510400 25200 1 +06}
- {528235200 21600 0 +06}
- {543960000 25200 1 +06}
- {559684800 21600 0 +06}
- {575409600 25200 1 +06}
- {591134400 21600 0 +06}
- {606859200 25200 1 +06}
- {622584000 21600 0 +06}
- {638308800 25200 1 +06}
- {654638400 21600 0 +06}
- {670363200 18000 0 +05}
- {670366800 21600 1 +05}
- {686091600 18000 0 +05}
- {695768400 21600 0 +06}
- {701812800 25200 1 +06}
- {717537600 21600 0 +06}
- {733262400 25200 1 +06}
- {748987200 21600 0 +06}
- {764712000 25200 1 +06}
- {780436800 21600 0 +06}
- {796161600 25200 1 +06}
- {811886400 21600 0 +06}
- {828216000 25200 1 +06}
- {846360000 21600 0 +06}
- {859665600 25200 1 +06}
- {877809600 21600 0 +06}
- {891115200 25200 1 +06}
- {909259200 21600 0 +06}
- {922564800 25200 1 +06}
- {941313600 21600 0 +06}
- {954014400 25200 1 +06}
- {972763200 21600 0 +06}
- {985464000 25200 1 +06}
- {1004212800 21600 0 +06}
- {1017518400 25200 1 +06}
- {1035662400 21600 0 +06}
- {1048968000 25200 1 +06}
- {1067112000 21600 0 +06}
- {1080417600 25200 1 +06}
- {1099166400 21600 0 +06}
+ {-1441170468 18000 0 +0500}
+ {-1247547600 21600 0 +0600}
+ {354909600 25200 1 +0700}
+ {370717200 21600 0 +0600}
+ {386445600 25200 1 +0700}
+ {402253200 21600 0 +0600}
+ {417981600 25200 1 +0700}
+ {433789200 21600 0 +0600}
+ {449604000 25200 1 +0700}
+ {465336000 21600 0 +0600}
+ {481060800 25200 1 +0700}
+ {496785600 21600 0 +0600}
+ {512510400 25200 1 +0700}
+ {528235200 21600 0 +0600}
+ {543960000 25200 1 +0700}
+ {559684800 21600 0 +0600}
+ {575409600 25200 1 +0700}
+ {591134400 21600 0 +0600}
+ {606859200 25200 1 +0700}
+ {622584000 21600 0 +0600}
+ {638308800 25200 1 +0700}
+ {654638400 21600 0 +0600}
+ {670363200 18000 0 +0500}
+ {670366800 21600 1 +0600}
+ {686091600 18000 0 +0500}
+ {695768400 21600 0 +0600}
+ {701812800 25200 1 +0700}
+ {717537600 21600 0 +0600}
+ {733262400 25200 1 +0700}
+ {748987200 21600 0 +0600}
+ {764712000 25200 1 +0700}
+ {780436800 21600 0 +0600}
+ {796161600 25200 1 +0700}
+ {811886400 21600 0 +0600}
+ {828216000 25200 1 +0700}
+ {846360000 21600 0 +0600}
+ {859665600 25200 1 +0700}
+ {877809600 21600 0 +0600}
+ {891115200 25200 1 +0700}
+ {909259200 21600 0 +0600}
+ {922564800 25200 1 +0700}
+ {941313600 21600 0 +0600}
+ {954014400 25200 1 +0700}
+ {972763200 21600 0 +0600}
+ {985464000 25200 1 +0700}
+ {1004212800 21600 0 +0600}
+ {1017518400 25200 1 +0700}
+ {1035662400 21600 0 +0600}
+ {1048968000 25200 1 +0700}
+ {1067112000 21600 0 +0600}
+ {1080417600 25200 1 +0700}
+ {1099166400 21600 0 +0600}
+ {1709229600 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Amman b/library/tzdata/Asia/Amman
index 05cba69..34c9a4b 100644
--- a/library/tzdata/Asia/Amman
+++ b/library/tzdata/Asia/Amman
@@ -88,5 +88,5 @@ set TZData(:Asia/Amman) {
{1616709600 10800 1 EEST}
{1635458400 7200 0 EET}
{1645740000 10800 1 EEST}
- {1666908000 10800 0 +03}
+ {1666908000 10800 0 +0300}
}
diff --git a/library/tzdata/Asia/Anadyr b/library/tzdata/Asia/Anadyr
index d1314c6..659ba00 100644
--- a/library/tzdata/Asia/Anadyr
+++ b/library/tzdata/Asia/Anadyr
@@ -2,71 +2,71 @@
set TZData(:Asia/Anadyr) {
{-9223372036854775808 42596 0 LMT}
- {-1441194596 43200 0 +12}
- {-1247572800 46800 0 +14}
- {354884400 50400 1 +14}
- {370692000 46800 0 +13}
- {386420400 43200 0 +13}
- {386424000 46800 1 +13}
- {402231600 43200 0 +12}
- {417960000 46800 1 +13}
- {433767600 43200 0 +12}
- {449582400 46800 1 +13}
- {465314400 43200 0 +12}
- {481039200 46800 1 +13}
- {496764000 43200 0 +12}
- {512488800 46800 1 +13}
- {528213600 43200 0 +12}
- {543938400 46800 1 +13}
- {559663200 43200 0 +12}
- {575388000 46800 1 +13}
- {591112800 43200 0 +12}
- {606837600 46800 1 +13}
- {622562400 43200 0 +12}
- {638287200 46800 1 +13}
- {654616800 43200 0 +12}
- {670341600 39600 0 +12}
- {670345200 43200 1 +12}
- {686070000 39600 0 +11}
- {695746800 43200 0 +13}
- {701791200 46800 1 +13}
- {717516000 43200 0 +12}
- {733240800 46800 1 +13}
- {748965600 43200 0 +12}
- {764690400 46800 1 +13}
- {780415200 43200 0 +12}
- {796140000 46800 1 +13}
- {811864800 43200 0 +12}
- {828194400 46800 1 +13}
- {846338400 43200 0 +12}
- {859644000 46800 1 +13}
- {877788000 43200 0 +12}
- {891093600 46800 1 +13}
- {909237600 43200 0 +12}
- {922543200 46800 1 +13}
- {941292000 43200 0 +12}
- {953992800 46800 1 +13}
- {972741600 43200 0 +12}
- {985442400 46800 1 +13}
- {1004191200 43200 0 +12}
- {1017496800 46800 1 +13}
- {1035640800 43200 0 +12}
- {1048946400 46800 1 +13}
- {1067090400 43200 0 +12}
- {1080396000 46800 1 +13}
- {1099144800 43200 0 +12}
- {1111845600 46800 1 +13}
- {1130594400 43200 0 +12}
- {1143295200 46800 1 +13}
- {1162044000 43200 0 +12}
- {1174744800 46800 1 +13}
- {1193493600 43200 0 +12}
- {1206799200 46800 1 +13}
- {1224943200 43200 0 +12}
- {1238248800 46800 1 +13}
- {1256392800 43200 0 +12}
- {1269698400 39600 0 +12}
- {1269702000 43200 1 +12}
- {1288450800 39600 0 +11}
- {1301151600 43200 0 +12}
+ {-1441194596 43200 0 +1200}
+ {-1247572800 46800 0 +1300}
+ {354884400 50400 1 +1400}
+ {370692000 46800 0 +1300}
+ {386420400 43200 0 +1200}
+ {386424000 46800 1 +1300}
+ {402231600 43200 0 +1200}
+ {417960000 46800 1 +1300}
+ {433767600 43200 0 +1200}
+ {449582400 46800 1 +1300}
+ {465314400 43200 0 +1200}
+ {481039200 46800 1 +1300}
+ {496764000 43200 0 +1200}
+ {512488800 46800 1 +1300}
+ {528213600 43200 0 +1200}
+ {543938400 46800 1 +1300}
+ {559663200 43200 0 +1200}
+ {575388000 46800 1 +1300}
+ {591112800 43200 0 +1200}
+ {606837600 46800 1 +1300}
+ {622562400 43200 0 +1200}
+ {638287200 46800 1 +1300}
+ {654616800 43200 0 +1200}
+ {670341600 39600 0 +1100}
+ {670345200 43200 1 +1200}
+ {686070000 39600 0 +1100}
+ {695746800 43200 0 +1200}
+ {701791200 46800 1 +1300}
+ {717516000 43200 0 +1200}
+ {733240800 46800 1 +1300}
+ {748965600 43200 0 +1200}
+ {764690400 46800 1 +1300}
+ {780415200 43200 0 +1200}
+ {796140000 46800 1 +1300}
+ {811864800 43200 0 +1200}
+ {828194400 46800 1 +1300}
+ {846338400 43200 0 +1200}
+ {859644000 46800 1 +1300}
+ {877788000 43200 0 +1200}
+ {891093600 46800 1 +1300}
+ {909237600 43200 0 +1200}
+ {922543200 46800 1 +1300}
+ {941292000 43200 0 +1200}
+ {953992800 46800 1 +1300}
+ {972741600 43200 0 +1200}
+ {985442400 46800 1 +1300}
+ {1004191200 43200 0 +1200}
+ {1017496800 46800 1 +1300}
+ {1035640800 43200 0 +1200}
+ {1048946400 46800 1 +1300}
+ {1067090400 43200 0 +1200}
+ {1080396000 46800 1 +1300}
+ {1099144800 43200 0 +1200}
+ {1111845600 46800 1 +1300}
+ {1130594400 43200 0 +1200}
+ {1143295200 46800 1 +1300}
+ {1162044000 43200 0 +1200}
+ {1174744800 46800 1 +1300}
+ {1193493600 43200 0 +1200}
+ {1206799200 46800 1 +1300}
+ {1224943200 43200 0 +1200}
+ {1238248800 46800 1 +1300}
+ {1256392800 43200 0 +1200}
+ {1269698400 39600 0 +1100}
+ {1269702000 43200 1 +1200}
+ {1288450800 39600 0 +1100}
+ {1301151600 43200 0 +1200}
}
diff --git a/library/tzdata/Asia/Aqtau b/library/tzdata/Asia/Aqtau
index 41da2ca..872a7fd 100644
--- a/library/tzdata/Asia/Aqtau
+++ b/library/tzdata/Asia/Aqtau
@@ -2,57 +2,57 @@
set TZData(:Asia/Aqtau) {
{-9223372036854775808 12064 0 LMT}
- {-1441164064 14400 0 +04}
- {-1247544000 18000 0 +05}
- {370724400 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 14400 0 +04}
- {670370400 18000 1 +04}
- {686095200 14400 0 +04}
- {695772000 18000 0 +05}
- {701816400 21600 1 +05}
- {717541200 18000 0 +05}
- {733266000 21600 1 +05}
- {748990800 18000 0 +05}
- {764715600 21600 1 +05}
- {780440400 18000 0 +04}
- {780444000 14400 0 +04}
- {796168800 18000 1 +04}
- {811893600 14400 0 +04}
- {828223200 18000 1 +04}
- {846367200 14400 0 +04}
- {859672800 18000 1 +04}
- {877816800 14400 0 +04}
- {891122400 18000 1 +04}
- {909266400 14400 0 +04}
- {922572000 18000 1 +04}
- {941320800 14400 0 +04}
- {954021600 18000 1 +04}
- {972770400 14400 0 +04}
- {985471200 18000 1 +04}
- {1004220000 14400 0 +04}
- {1017525600 18000 1 +04}
- {1035669600 14400 0 +04}
- {1048975200 18000 1 +04}
- {1067119200 14400 0 +04}
- {1080424800 18000 1 +04}
- {1099173600 18000 0 +05}
+ {-1441164064 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {370724400 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {695772000 18000 0 +0500}
+ {701816400 21600 1 +0600}
+ {717541200 18000 0 +0500}
+ {733266000 21600 1 +0600}
+ {748990800 18000 0 +0500}
+ {764715600 21600 1 +0600}
+ {780440400 18000 0 +0500}
+ {780444000 14400 0 +0400}
+ {796168800 18000 1 +0500}
+ {811893600 14400 0 +0400}
+ {828223200 18000 1 +0500}
+ {846367200 14400 0 +0400}
+ {859672800 18000 1 +0500}
+ {877816800 14400 0 +0400}
+ {891122400 18000 1 +0500}
+ {909266400 14400 0 +0400}
+ {922572000 18000 1 +0500}
+ {941320800 14400 0 +0400}
+ {954021600 18000 1 +0500}
+ {972770400 14400 0 +0400}
+ {985471200 18000 1 +0500}
+ {1004220000 14400 0 +0400}
+ {1017525600 18000 1 +0500}
+ {1035669600 14400 0 +0400}
+ {1048975200 18000 1 +0500}
+ {1067119200 14400 0 +0400}
+ {1080424800 18000 1 +0500}
+ {1099173600 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Aqtobe b/library/tzdata/Asia/Aqtobe
index 2316e68..e654608 100644
--- a/library/tzdata/Asia/Aqtobe
+++ b/library/tzdata/Asia/Aqtobe
@@ -2,57 +2,57 @@
set TZData(:Asia/Aqtobe) {
{-9223372036854775808 13720 0 LMT}
- {-1441165720 14400 0 +04}
- {-1247544000 18000 0 +05}
- {354913200 21600 1 +06}
- {370720800 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 14400 0 +04}
- {670370400 18000 1 +04}
- {686095200 14400 0 +04}
- {695772000 18000 0 +05}
- {701816400 21600 1 +05}
- {717541200 18000 0 +05}
- {733266000 21600 1 +05}
- {748990800 18000 0 +05}
- {764715600 21600 1 +05}
- {780440400 18000 0 +05}
- {796165200 21600 1 +05}
- {811890000 18000 0 +05}
- {828219600 21600 1 +05}
- {846363600 18000 0 +05}
- {859669200 21600 1 +05}
- {877813200 18000 0 +05}
- {891118800 21600 1 +05}
- {909262800 18000 0 +05}
- {922568400 21600 1 +05}
- {941317200 18000 0 +05}
- {954018000 21600 1 +05}
- {972766800 18000 0 +05}
- {985467600 21600 1 +05}
- {1004216400 18000 0 +05}
- {1017522000 21600 1 +05}
- {1035666000 18000 0 +05}
- {1048971600 21600 1 +05}
- {1067115600 18000 0 +05}
- {1080421200 21600 1 +05}
- {1099170000 18000 0 +05}
+ {-1441165720 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {695772000 18000 0 +0500}
+ {701816400 21600 1 +0600}
+ {717541200 18000 0 +0500}
+ {733266000 21600 1 +0600}
+ {748990800 18000 0 +0500}
+ {764715600 21600 1 +0600}
+ {780440400 18000 0 +0500}
+ {796165200 21600 1 +0600}
+ {811890000 18000 0 +0500}
+ {828219600 21600 1 +0600}
+ {846363600 18000 0 +0500}
+ {859669200 21600 1 +0600}
+ {877813200 18000 0 +0500}
+ {891118800 21600 1 +0600}
+ {909262800 18000 0 +0500}
+ {922568400 21600 1 +0600}
+ {941317200 18000 0 +0500}
+ {954018000 21600 1 +0600}
+ {972766800 18000 0 +0500}
+ {985467600 21600 1 +0600}
+ {1004216400 18000 0 +0500}
+ {1017522000 21600 1 +0600}
+ {1035666000 18000 0 +0500}
+ {1048971600 21600 1 +0600}
+ {1067115600 18000 0 +0500}
+ {1080421200 21600 1 +0600}
+ {1099170000 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Ashgabat b/library/tzdata/Asia/Ashgabat
index feb7725..5f494a5 100644
--- a/library/tzdata/Asia/Ashgabat
+++ b/library/tzdata/Asia/Ashgabat
@@ -2,30 +2,30 @@
set TZData(:Asia/Ashgabat) {
{-9223372036854775808 14012 0 LMT}
- {-1441166012 14400 0 +04}
- {-1247544000 18000 0 +05}
- {354913200 21600 1 +05}
- {370720800 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 14400 0 +04}
- {670370400 18000 1 +04}
- {686095200 14400 0 +04}
- {695772000 18000 0 +05}
+ {-1441166012 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {695772000 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Atyrau b/library/tzdata/Asia/Atyrau
index b6d8253..cc945b4 100644
--- a/library/tzdata/Asia/Atyrau
+++ b/library/tzdata/Asia/Atyrau
@@ -2,57 +2,57 @@
set TZData(:Asia/Atyrau) {
{-9223372036854775808 12464 0 LMT}
- {-1441164464 10800 0 +03}
- {-1247540400 18000 0 +05}
- {370724400 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 14400 0 +04}
- {670370400 18000 1 +04}
- {686095200 14400 0 +04}
- {695772000 18000 0 +05}
- {701816400 21600 1 +05}
- {717541200 18000 0 +05}
- {733266000 21600 1 +05}
- {748990800 18000 0 +05}
- {764715600 21600 1 +05}
- {780440400 18000 0 +05}
- {796165200 21600 1 +05}
- {811890000 18000 0 +05}
- {828219600 21600 1 +05}
- {846363600 18000 0 +05}
- {859669200 21600 1 +05}
- {877813200 18000 0 +05}
- {891118800 21600 1 +05}
- {909262800 18000 0 +05}
- {922568400 14400 0 +04}
- {922572000 18000 1 +04}
- {941320800 14400 0 +04}
- {954021600 18000 1 +04}
- {972770400 14400 0 +04}
- {985471200 18000 1 +04}
- {1004220000 14400 0 +04}
- {1017525600 18000 1 +04}
- {1035669600 14400 0 +04}
- {1048975200 18000 1 +04}
- {1067119200 14400 0 +04}
- {1080424800 18000 1 +04}
- {1099173600 18000 0 +05}
+ {-1441164464 10800 0 +0300}
+ {-1247540400 18000 0 +0500}
+ {370724400 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {695772000 18000 0 +0500}
+ {701816400 21600 1 +0600}
+ {717541200 18000 0 +0500}
+ {733266000 21600 1 +0600}
+ {748990800 18000 0 +0500}
+ {764715600 21600 1 +0600}
+ {780440400 18000 0 +0500}
+ {796165200 21600 1 +0600}
+ {811890000 18000 0 +0500}
+ {828219600 21600 1 +0600}
+ {846363600 18000 0 +0500}
+ {859669200 21600 1 +0600}
+ {877813200 18000 0 +0500}
+ {891118800 21600 1 +0600}
+ {909262800 18000 0 +0500}
+ {922568400 14400 0 +0400}
+ {922572000 18000 1 +0500}
+ {941320800 14400 0 +0400}
+ {954021600 18000 1 +0500}
+ {972770400 14400 0 +0400}
+ {985471200 18000 1 +0500}
+ {1004220000 14400 0 +0400}
+ {1017525600 18000 1 +0500}
+ {1035669600 14400 0 +0400}
+ {1048975200 18000 1 +0500}
+ {1067119200 14400 0 +0400}
+ {1080424800 18000 1 +0500}
+ {1099173600 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Baghdad b/library/tzdata/Asia/Baghdad
index c76a6a1..e5c64d0 100644
--- a/library/tzdata/Asia/Baghdad
+++ b/library/tzdata/Asia/Baghdad
@@ -3,57 +3,57 @@
set TZData(:Asia/Baghdad) {
{-9223372036854775808 10660 0 LMT}
{-2524532260 10656 0 BMT}
- {-1641005856 10800 0 +03}
- {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}
+ {-1641005856 10800 0 +0300}
+ {389048400 14400 0 +0400}
+ {402264000 10800 0 +0300}
+ {417906000 14400 1 +0400}
+ {433800000 10800 0 +0300}
+ {449614800 14400 1 +0400}
+ {465422400 10800 0 +0300}
+ {481150800 14400 1 +0400}
+ {496792800 10800 0 +0300}
+ {512517600 14400 1 +0400}
+ {528242400 10800 0 +0300}
+ {543967200 14400 1 +0400}
+ {559692000 10800 0 +0300}
+ {575416800 14400 1 +0400}
+ {591141600 10800 0 +0300}
+ {606866400 14400 1 +0400}
+ {622591200 10800 0 +0300}
+ {638316000 14400 1 +0400}
+ {654645600 10800 0 +0300}
+ {670464000 14400 1 +0400}
+ {686275200 10800 0 +0300}
+ {702086400 14400 1 +0400}
+ {717897600 10800 0 +0300}
+ {733622400 14400 1 +0400}
+ {749433600 10800 0 +0300}
+ {765158400 14400 1 +0400}
+ {780969600 10800 0 +0300}
+ {796694400 14400 1 +0400}
+ {812505600 10800 0 +0300}
+ {828316800 14400 1 +0400}
+ {844128000 10800 0 +0300}
+ {859852800 14400 1 +0400}
+ {875664000 10800 0 +0300}
+ {891388800 14400 1 +0400}
+ {907200000 10800 0 +0300}
+ {922924800 14400 1 +0400}
+ {938736000 10800 0 +0300}
+ {954547200 14400 1 +0400}
+ {970358400 10800 0 +0300}
+ {986083200 14400 1 +0400}
+ {1001894400 10800 0 +0300}
+ {1017619200 14400 1 +0400}
+ {1033430400 10800 0 +0300}
+ {1049155200 14400 1 +0400}
+ {1064966400 10800 0 +0300}
+ {1080777600 14400 1 +0400}
+ {1096588800 10800 0 +0300}
+ {1112313600 14400 1 +0400}
+ {1128124800 10800 0 +0300}
+ {1143849600 14400 1 +0400}
+ {1159660800 10800 0 +0300}
+ {1175385600 14400 1 +0400}
+ {1191196800 10800 0 +0300}
}
diff --git a/library/tzdata/Asia/Baku b/library/tzdata/Asia/Baku
index 03dee19..1528285 100644
--- a/library/tzdata/Asia/Baku
+++ b/library/tzdata/Asia/Baku
@@ -2,73 +2,73 @@
set TZData(:Asia/Baku) {
{-9223372036854775808 11964 0 LMT}
- {-1441163964 10800 0 +03}
- {-405140400 14400 0 +04}
- {354916800 18000 1 +04}
- {370724400 14400 0 +04}
- {386452800 18000 1 +04}
- {402260400 14400 0 +04}
- {417988800 18000 1 +04}
- {433796400 14400 0 +04}
- {449611200 18000 1 +04}
- {465343200 14400 0 +04}
- {481068000 18000 1 +04}
- {496792800 14400 0 +04}
- {512517600 18000 1 +04}
- {528242400 14400 0 +04}
- {543967200 18000 1 +04}
- {559692000 14400 0 +04}
- {575416800 18000 1 +04}
- {591141600 14400 0 +04}
- {606866400 18000 1 +04}
- {622591200 14400 0 +04}
- {638316000 18000 1 +04}
- {654645600 14400 0 +04}
- {670370400 10800 0 +03}
- {670374000 14400 1 +03}
- {686098800 10800 0 +03}
- {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 +04}
- {877824000 14400 0 +04}
- {891129600 18000 1 +04}
- {909273600 14400 0 +04}
- {922579200 18000 1 +04}
- {941328000 14400 0 +04}
- {954028800 18000 1 +04}
- {972777600 14400 0 +04}
- {985478400 18000 1 +04}
- {1004227200 14400 0 +04}
- {1017532800 18000 1 +04}
- {1035676800 14400 0 +04}
- {1048982400 18000 1 +04}
- {1067126400 14400 0 +04}
- {1080432000 18000 1 +04}
- {1099180800 14400 0 +04}
- {1111881600 18000 1 +04}
- {1130630400 14400 0 +04}
- {1143331200 18000 1 +04}
- {1162080000 14400 0 +04}
- {1174780800 18000 1 +04}
- {1193529600 14400 0 +04}
- {1206835200 18000 1 +04}
- {1224979200 14400 0 +04}
- {1238284800 18000 1 +04}
- {1256428800 14400 0 +04}
- {1269734400 18000 1 +04}
- {1288483200 14400 0 +04}
- {1301184000 18000 1 +04}
- {1319932800 14400 0 +04}
- {1332633600 18000 1 +04}
- {1351382400 14400 0 +04}
- {1364688000 18000 1 +04}
- {1382832000 14400 0 +04}
- {1396137600 18000 1 +04}
- {1414281600 14400 0 +04}
- {1427587200 18000 1 +04}
- {1445731200 14400 0 +04}
+ {-1441163964 10800 0 +0300}
+ {-405140400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 18000 1 +0500}
+ {622591200 14400 0 +0400}
+ {638316000 18000 1 +0500}
+ {654645600 14400 0 +0400}
+ {670370400 10800 0 +0300}
+ {670374000 14400 1 +0400}
+ {686098800 10800 0 +0300}
+ {701823600 14400 1 +0400}
+ {717548400 14400 0 +0400}
+ {820440000 14400 0 +0400}
+ {828234000 18000 1 +0500}
+ {846378000 14400 0 +0400}
+ {852062400 14400 0 +0400}
+ {859680000 18000 1 +0500}
+ {877824000 14400 0 +0400}
+ {891129600 18000 1 +0500}
+ {909273600 14400 0 +0400}
+ {922579200 18000 1 +0500}
+ {941328000 14400 0 +0400}
+ {954028800 18000 1 +0500}
+ {972777600 14400 0 +0400}
+ {985478400 18000 1 +0500}
+ {1004227200 14400 0 +0400}
+ {1017532800 18000 1 +0500}
+ {1035676800 14400 0 +0400}
+ {1048982400 18000 1 +0500}
+ {1067126400 14400 0 +0400}
+ {1080432000 18000 1 +0500}
+ {1099180800 14400 0 +0400}
+ {1111881600 18000 1 +0500}
+ {1130630400 14400 0 +0400}
+ {1143331200 18000 1 +0500}
+ {1162080000 14400 0 +0400}
+ {1174780800 18000 1 +0500}
+ {1193529600 14400 0 +0400}
+ {1206835200 18000 1 +0500}
+ {1224979200 14400 0 +0400}
+ {1238284800 18000 1 +0500}
+ {1256428800 14400 0 +0400}
+ {1269734400 18000 1 +0500}
+ {1288483200 14400 0 +0400}
+ {1301184000 18000 1 +0500}
+ {1319932800 14400 0 +0400}
+ {1332633600 18000 1 +0500}
+ {1351382400 14400 0 +0400}
+ {1364688000 18000 1 +0500}
+ {1382832000 14400 0 +0400}
+ {1396137600 18000 1 +0500}
+ {1414281600 14400 0 +0400}
+ {1427587200 18000 1 +0500}
+ {1445731200 14400 0 +0400}
}
diff --git a/library/tzdata/Asia/Bangkok b/library/tzdata/Asia/Bangkok
index aeb5473..abd37a1 100644
--- a/library/tzdata/Asia/Bangkok
+++ b/library/tzdata/Asia/Bangkok
@@ -3,5 +3,5 @@
set TZData(:Asia/Bangkok) {
{-9223372036854775808 24124 0 LMT}
{-2840164924 24124 0 BMT}
- {-1570084924 25200 0 +07}
+ {-1570084924 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Barnaul b/library/tzdata/Asia/Barnaul
index bf6abbf..335f609 100644
--- a/library/tzdata/Asia/Barnaul
+++ b/library/tzdata/Asia/Barnaul
@@ -2,72 +2,72 @@
set TZData(:Asia/Barnaul) {
{-9223372036854775808 20100 0 LMT}
- {-1579844100 21600 0 +06}
- {-1247551200 25200 0 +08}
- {354906000 28800 1 +08}
- {370713600 25200 0 +07}
- {386442000 28800 1 +08}
- {402249600 25200 0 +07}
- {417978000 28800 1 +08}
- {433785600 25200 0 +07}
- {449600400 28800 1 +08}
- {465332400 25200 0 +07}
- {481057200 28800 1 +08}
- {496782000 25200 0 +07}
- {512506800 28800 1 +08}
- {528231600 25200 0 +07}
- {543956400 28800 1 +08}
- {559681200 25200 0 +07}
- {575406000 28800 1 +08}
- {591130800 25200 0 +07}
- {606855600 28800 1 +08}
- {622580400 25200 0 +07}
- {638305200 28800 1 +08}
- {654634800 25200 0 +07}
- {670359600 21600 0 +07}
- {670363200 25200 1 +07}
- {686088000 21600 0 +06}
- {695764800 25200 0 +08}
- {701809200 28800 1 +08}
- {717534000 25200 0 +07}
- {733258800 28800 1 +08}
- {748983600 25200 0 +07}
- {764708400 28800 1 +08}
- {780433200 25200 0 +07}
- {796158000 28800 1 +08}
- {801594000 25200 0 +07}
- {811886400 21600 0 +06}
- {828216000 25200 1 +07}
- {846360000 21600 0 +06}
- {859665600 25200 1 +07}
- {877809600 21600 0 +06}
- {891115200 25200 1 +07}
- {909259200 21600 0 +06}
- {922564800 25200 1 +07}
- {941313600 21600 0 +06}
- {954014400 25200 1 +07}
- {972763200 21600 0 +06}
- {985464000 25200 1 +07}
- {1004212800 21600 0 +06}
- {1017518400 25200 1 +07}
- {1035662400 21600 0 +06}
- {1048968000 25200 1 +07}
- {1067112000 21600 0 +06}
- {1080417600 25200 1 +07}
- {1099166400 21600 0 +06}
- {1111867200 25200 1 +07}
- {1130616000 21600 0 +06}
- {1143316800 25200 1 +07}
- {1162065600 21600 0 +06}
- {1174766400 25200 1 +07}
- {1193515200 21600 0 +06}
- {1206820800 25200 1 +07}
- {1224964800 21600 0 +06}
- {1238270400 25200 1 +07}
- {1256414400 21600 0 +06}
- {1269720000 25200 1 +07}
- {1288468800 21600 0 +06}
- {1301169600 25200 0 +07}
- {1414263600 21600 0 +06}
- {1459022400 25200 0 +07}
+ {-1579844100 21600 0 +0600}
+ {-1247551200 25200 0 +0700}
+ {354906000 28800 1 +0800}
+ {370713600 25200 0 +0700}
+ {386442000 28800 1 +0800}
+ {402249600 25200 0 +0700}
+ {417978000 28800 1 +0800}
+ {433785600 25200 0 +0700}
+ {449600400 28800 1 +0800}
+ {465332400 25200 0 +0700}
+ {481057200 28800 1 +0800}
+ {496782000 25200 0 +0700}
+ {512506800 28800 1 +0800}
+ {528231600 25200 0 +0700}
+ {543956400 28800 1 +0800}
+ {559681200 25200 0 +0700}
+ {575406000 28800 1 +0800}
+ {591130800 25200 0 +0700}
+ {606855600 28800 1 +0800}
+ {622580400 25200 0 +0700}
+ {638305200 28800 1 +0800}
+ {654634800 25200 0 +0700}
+ {670359600 21600 0 +0600}
+ {670363200 25200 1 +0700}
+ {686088000 21600 0 +0600}
+ {695764800 25200 0 +0700}
+ {701809200 28800 1 +0800}
+ {717534000 25200 0 +0700}
+ {733258800 28800 1 +0800}
+ {748983600 25200 0 +0700}
+ {764708400 28800 1 +0800}
+ {780433200 25200 0 +0700}
+ {796158000 28800 1 +0800}
+ {801594000 25200 0 +0700}
+ {811886400 21600 0 +0600}
+ {828216000 25200 1 +0700}
+ {846360000 21600 0 +0600}
+ {859665600 25200 1 +0700}
+ {877809600 21600 0 +0600}
+ {891115200 25200 1 +0700}
+ {909259200 21600 0 +0600}
+ {922564800 25200 1 +0700}
+ {941313600 21600 0 +0600}
+ {954014400 25200 1 +0700}
+ {972763200 21600 0 +0600}
+ {985464000 25200 1 +0700}
+ {1004212800 21600 0 +0600}
+ {1017518400 25200 1 +0700}
+ {1035662400 21600 0 +0600}
+ {1048968000 25200 1 +0700}
+ {1067112000 21600 0 +0600}
+ {1080417600 25200 1 +0700}
+ {1099166400 21600 0 +0600}
+ {1111867200 25200 1 +0700}
+ {1130616000 21600 0 +0600}
+ {1143316800 25200 1 +0700}
+ {1162065600 21600 0 +0600}
+ {1174766400 25200 1 +0700}
+ {1193515200 21600 0 +0600}
+ {1206820800 25200 1 +0700}
+ {1224964800 21600 0 +0600}
+ {1238270400 25200 1 +0700}
+ {1256414400 21600 0 +0600}
+ {1269720000 25200 1 +0700}
+ {1288468800 21600 0 +0600}
+ {1301169600 25200 0 +0700}
+ {1414263600 21600 0 +0600}
+ {1459022400 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Bishkek b/library/tzdata/Asia/Bishkek
index bc4cbdd..eedcb04 100644
--- a/library/tzdata/Asia/Bishkek
+++ b/library/tzdata/Asia/Bishkek
@@ -2,57 +2,57 @@
set TZData(:Asia/Bishkek) {
{-9223372036854775808 17904 0 LMT}
- {-1441169904 18000 0 +05}
- {-1247547600 21600 0 +06}
- {354909600 25200 1 +06}
- {370717200 21600 0 +06}
- {386445600 25200 1 +06}
- {402253200 21600 0 +06}
- {417981600 25200 1 +06}
- {433789200 21600 0 +06}
- {449604000 25200 1 +06}
- {465336000 21600 0 +06}
- {481060800 25200 1 +06}
- {496785600 21600 0 +06}
- {512510400 25200 1 +06}
- {528235200 21600 0 +06}
- {543960000 25200 1 +06}
- {559684800 21600 0 +06}
- {575409600 25200 1 +06}
- {591134400 21600 0 +06}
- {606859200 25200 1 +06}
- {622584000 21600 0 +06}
- {638308800 25200 1 +06}
- {654638400 21600 0 +06}
- {670363200 18000 0 +05}
- {670366800 21600 1 +05}
- {683586000 18000 0 +05}
- {703018800 21600 1 +05}
- {717530400 18000 0 +05}
- {734468400 21600 1 +05}
- {748980000 18000 0 +05}
- {765918000 21600 1 +05}
- {780429600 18000 0 +05}
- {797367600 21600 1 +05}
- {811879200 18000 0 +05}
- {828817200 21600 1 +05}
- {843933600 18000 0 +05}
- {859671000 21600 1 +05}
- {877811400 18000 0 +05}
- {891120600 21600 1 +05}
- {909261000 18000 0 +05}
- {922570200 21600 1 +05}
- {941315400 18000 0 +05}
- {954019800 21600 1 +05}
- {972765000 18000 0 +05}
- {985469400 21600 1 +05}
- {1004214600 18000 0 +05}
- {1017523800 21600 1 +05}
- {1035664200 18000 0 +05}
- {1048973400 21600 1 +05}
- {1067113800 18000 0 +05}
- {1080423000 21600 1 +05}
- {1099168200 18000 0 +05}
- {1111872600 21600 1 +05}
- {1123783200 21600 0 +06}
+ {-1441169904 18000 0 +0500}
+ {-1247547600 21600 0 +0600}
+ {354909600 25200 1 +0700}
+ {370717200 21600 0 +0600}
+ {386445600 25200 1 +0700}
+ {402253200 21600 0 +0600}
+ {417981600 25200 1 +0700}
+ {433789200 21600 0 +0600}
+ {449604000 25200 1 +0700}
+ {465336000 21600 0 +0600}
+ {481060800 25200 1 +0700}
+ {496785600 21600 0 +0600}
+ {512510400 25200 1 +0700}
+ {528235200 21600 0 +0600}
+ {543960000 25200 1 +0700}
+ {559684800 21600 0 +0600}
+ {575409600 25200 1 +0700}
+ {591134400 21600 0 +0600}
+ {606859200 25200 1 +0700}
+ {622584000 21600 0 +0600}
+ {638308800 25200 1 +0700}
+ {654638400 21600 0 +0600}
+ {670363200 18000 0 +0500}
+ {670366800 21600 1 +0600}
+ {683586000 18000 0 +0500}
+ {703018800 21600 1 +0600}
+ {717530400 18000 0 +0500}
+ {734468400 21600 1 +0600}
+ {748980000 18000 0 +0500}
+ {765918000 21600 1 +0600}
+ {780429600 18000 0 +0500}
+ {797367600 21600 1 +0600}
+ {811879200 18000 0 +0500}
+ {828817200 21600 1 +0600}
+ {843933600 18000 0 +0500}
+ {859671000 21600 1 +0600}
+ {877811400 18000 0 +0500}
+ {891120600 21600 1 +0600}
+ {909261000 18000 0 +0500}
+ {922570200 21600 1 +0600}
+ {941315400 18000 0 +0500}
+ {954019800 21600 1 +0600}
+ {972765000 18000 0 +0500}
+ {985469400 21600 1 +0600}
+ {1004214600 18000 0 +0500}
+ {1017523800 21600 1 +0600}
+ {1035664200 18000 0 +0500}
+ {1048973400 21600 1 +0600}
+ {1067113800 18000 0 +0500}
+ {1080423000 21600 1 +0600}
+ {1099168200 18000 0 +0500}
+ {1111872600 21600 1 +0600}
+ {1123783200 21600 0 +0600}
}
diff --git a/library/tzdata/Asia/Chita b/library/tzdata/Asia/Chita
index 279c016..0c21bc0 100644
--- a/library/tzdata/Asia/Chita
+++ b/library/tzdata/Asia/Chita
@@ -2,71 +2,71 @@
set TZData(:Asia/Chita) {
{-9223372036854775808 27232 0 LMT}
- {-1579419232 28800 0 +08}
- {-1247558400 32400 0 +10}
- {354898800 36000 1 +10}
- {370706400 32400 0 +09}
- {386434800 36000 1 +10}
- {402242400 32400 0 +09}
- {417970800 36000 1 +10}
- {433778400 32400 0 +09}
- {449593200 36000 1 +10}
- {465325200 32400 0 +09}
- {481050000 36000 1 +10}
- {496774800 32400 0 +09}
- {512499600 36000 1 +10}
- {528224400 32400 0 +09}
- {543949200 36000 1 +10}
- {559674000 32400 0 +09}
- {575398800 36000 1 +10}
- {591123600 32400 0 +09}
- {606848400 36000 1 +10}
- {622573200 32400 0 +09}
- {638298000 36000 1 +10}
- {654627600 32400 0 +09}
- {670352400 28800 0 +09}
- {670356000 32400 1 +09}
- {686080800 28800 0 +08}
- {695757600 32400 0 +10}
- {701802000 36000 1 +10}
- {717526800 32400 0 +09}
- {733251600 36000 1 +10}
- {748976400 32400 0 +09}
- {764701200 36000 1 +10}
- {780426000 32400 0 +09}
- {796150800 36000 1 +10}
- {811875600 32400 0 +09}
- {828205200 36000 1 +10}
- {846349200 32400 0 +09}
- {859654800 36000 1 +10}
- {877798800 32400 0 +09}
- {891104400 36000 1 +10}
- {909248400 32400 0 +09}
- {922554000 36000 1 +10}
- {941302800 32400 0 +09}
- {954003600 36000 1 +10}
- {972752400 32400 0 +09}
- {985453200 36000 1 +10}
- {1004202000 32400 0 +09}
- {1017507600 36000 1 +10}
- {1035651600 32400 0 +09}
- {1048957200 36000 1 +10}
- {1067101200 32400 0 +09}
- {1080406800 36000 1 +10}
- {1099155600 32400 0 +09}
- {1111856400 36000 1 +10}
- {1130605200 32400 0 +09}
- {1143306000 36000 1 +10}
- {1162054800 32400 0 +09}
- {1174755600 36000 1 +10}
- {1193504400 32400 0 +09}
- {1206810000 36000 1 +10}
- {1224954000 32400 0 +09}
- {1238259600 36000 1 +10}
- {1256403600 32400 0 +09}
- {1269709200 36000 1 +10}
- {1288458000 32400 0 +09}
- {1301158800 36000 0 +10}
- {1414252800 28800 0 +08}
- {1459015200 32400 0 +09}
+ {-1579419232 28800 0 +0800}
+ {-1247558400 32400 0 +0900}
+ {354898800 36000 1 +1000}
+ {370706400 32400 0 +0900}
+ {386434800 36000 1 +1000}
+ {402242400 32400 0 +0900}
+ {417970800 36000 1 +1000}
+ {433778400 32400 0 +0900}
+ {449593200 36000 1 +1000}
+ {465325200 32400 0 +0900}
+ {481050000 36000 1 +1000}
+ {496774800 32400 0 +0900}
+ {512499600 36000 1 +1000}
+ {528224400 32400 0 +0900}
+ {543949200 36000 1 +1000}
+ {559674000 32400 0 +0900}
+ {575398800 36000 1 +1000}
+ {591123600 32400 0 +0900}
+ {606848400 36000 1 +1000}
+ {622573200 32400 0 +0900}
+ {638298000 36000 1 +1000}
+ {654627600 32400 0 +0900}
+ {670352400 28800 0 +0800}
+ {670356000 32400 1 +0900}
+ {686080800 28800 0 +0800}
+ {695757600 32400 0 +0900}
+ {701802000 36000 1 +1000}
+ {717526800 32400 0 +0900}
+ {733251600 36000 1 +1000}
+ {748976400 32400 0 +0900}
+ {764701200 36000 1 +1000}
+ {780426000 32400 0 +0900}
+ {796150800 36000 1 +1000}
+ {811875600 32400 0 +0900}
+ {828205200 36000 1 +1000}
+ {846349200 32400 0 +0900}
+ {859654800 36000 1 +1000}
+ {877798800 32400 0 +0900}
+ {891104400 36000 1 +1000}
+ {909248400 32400 0 +0900}
+ {922554000 36000 1 +1000}
+ {941302800 32400 0 +0900}
+ {954003600 36000 1 +1000}
+ {972752400 32400 0 +0900}
+ {985453200 36000 1 +1000}
+ {1004202000 32400 0 +0900}
+ {1017507600 36000 1 +1000}
+ {1035651600 32400 0 +0900}
+ {1048957200 36000 1 +1000}
+ {1067101200 32400 0 +0900}
+ {1080406800 36000 1 +1000}
+ {1099155600 32400 0 +0900}
+ {1111856400 36000 1 +1000}
+ {1130605200 32400 0 +0900}
+ {1143306000 36000 1 +1000}
+ {1162054800 32400 0 +0900}
+ {1174755600 36000 1 +1000}
+ {1193504400 32400 0 +0900}
+ {1206810000 36000 1 +1000}
+ {1224954000 32400 0 +0900}
+ {1238259600 36000 1 +1000}
+ {1256403600 32400 0 +0900}
+ {1269709200 36000 1 +1000}
+ {1288458000 32400 0 +0900}
+ {1301158800 36000 0 +1000}
+ {1414252800 28800 0 +0800}
+ {1459015200 32400 0 +0900}
}
diff --git a/library/tzdata/Asia/Choibalsan b/library/tzdata/Asia/Choibalsan
index b072c76..4c307dd 100644
--- a/library/tzdata/Asia/Choibalsan
+++ b/library/tzdata/Asia/Choibalsan
@@ -1,56 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:Asia/Choibalsan) {
- {-9223372036854775808 27480 0 LMT}
- {-2032933080 25200 0 +07}
- {252435600 28800 0 +08}
- {417974400 36000 0 +09}
- {433778400 32400 0 +09}
- {449593200 36000 1 +09}
- {465314400 32400 0 +09}
- {481042800 36000 1 +09}
- {496764000 32400 0 +09}
- {512492400 36000 1 +09}
- {528213600 32400 0 +09}
- {543942000 36000 1 +09}
- {559663200 32400 0 +09}
- {575391600 36000 1 +09}
- {591112800 32400 0 +09}
- {606841200 36000 1 +09}
- {622562400 32400 0 +09}
- {638290800 36000 1 +09}
- {654616800 32400 0 +09}
- {670345200 36000 1 +09}
- {686066400 32400 0 +09}
- {701794800 36000 1 +09}
- {717516000 32400 0 +09}
- {733244400 36000 1 +09}
- {748965600 32400 0 +09}
- {764694000 36000 1 +09}
- {780415200 32400 0 +09}
- {796143600 36000 1 +09}
- {811864800 32400 0 +09}
- {828198000 36000 1 +09}
- {843919200 32400 0 +09}
- {859647600 36000 1 +09}
- {875368800 32400 0 +09}
- {891097200 36000 1 +09}
- {906818400 32400 0 +09}
- {988390800 36000 1 +09}
- {1001692800 32400 0 +09}
- {1017421200 36000 1 +09}
- {1033142400 32400 0 +09}
- {1048870800 36000 1 +09}
- {1064592000 32400 0 +09}
- {1080320400 36000 1 +09}
- {1096041600 32400 0 +09}
- {1111770000 36000 1 +09}
- {1127491200 32400 0 +09}
- {1143219600 36000 1 +09}
- {1159545600 32400 0 +09}
- {1206889200 28800 0 +08}
- {1427479200 32400 1 +08}
- {1443193200 28800 0 +08}
- {1458928800 32400 1 +08}
- {1474642800 28800 0 +08}
+if {![info exists TZData(Asia/Ulaanbaatar)]} {
+ LoadTimeZoneFile Asia/Ulaanbaatar
}
+set TZData(:Asia/Choibalsan) $TZData(:Asia/Ulaanbaatar)
diff --git a/library/tzdata/Asia/Colombo b/library/tzdata/Asia/Colombo
index 7a14a9b..8ff6464 100644
--- a/library/tzdata/Asia/Colombo
+++ b/library/tzdata/Asia/Colombo
@@ -4,10 +4,10 @@ set TZData(:Asia/Colombo) {
{-9223372036854775808 19164 0 LMT}
{-2840159964 19172 0 MMT}
{-2019705572 19800 0 +0530}
- {-883287000 21600 1 +06}
+ {-883287000 21600 1 +0600}
{-862639200 23400 1 +0630}
{-764051400 19800 0 +0530}
{832962600 23400 0 +0630}
- {846266400 21600 0 +06}
+ {846266400 21600 0 +0600}
{1145039400 19800 0 +0530}
}
diff --git a/library/tzdata/Asia/Damascus b/library/tzdata/Asia/Damascus
index 92ac4f5..6018011 100644
--- a/library/tzdata/Asia/Damascus
+++ b/library/tzdata/Asia/Damascus
@@ -122,5 +122,5 @@ set TZData(:Asia/Damascus) {
{1616709600 10800 1 EEST}
{1635454800 7200 0 EET}
{1648159200 10800 1 EEST}
- {1666908000 10800 0 +03}
+ {1666908000 10800 0 +0300}
}
diff --git a/library/tzdata/Asia/Dhaka b/library/tzdata/Asia/Dhaka
index c044095..531d791 100644
--- a/library/tzdata/Asia/Dhaka
+++ b/library/tzdata/Asia/Dhaka
@@ -6,8 +6,8 @@ set TZData(:Asia/Dhaka) {
{-891582800 23400 0 +0630}
{-872058600 19800 0 +0530}
{-862637400 23400 0 +0630}
- {-576138600 21600 0 +06}
- {1230746400 21600 0 +06}
- {1245430800 25200 1 +06}
- {1262278800 21600 0 +06}
+ {-576138600 21600 0 +0600}
+ {1230746400 21600 0 +0600}
+ {1245430800 25200 1 +0700}
+ {1262278800 21600 0 +0600}
}
diff --git a/library/tzdata/Asia/Dili b/library/tzdata/Asia/Dili
index 89cf22f..af520de 100644
--- a/library/tzdata/Asia/Dili
+++ b/library/tzdata/Asia/Dili
@@ -2,8 +2,8 @@
set TZData(:Asia/Dili) {
{-9223372036854775808 30140 0 LMT}
- {-1830414140 28800 0 +08}
- {-879152400 32400 0 +09}
- {199897200 28800 0 +08}
- {969120000 32400 0 +09}
+ {-1830412800 28800 0 +0800}
+ {-879152400 32400 0 +0900}
+ {199897200 28800 0 +0800}
+ {969120000 32400 0 +0900}
}
diff --git a/library/tzdata/Asia/Dubai b/library/tzdata/Asia/Dubai
index 6c18e79..b2990ad 100644
--- a/library/tzdata/Asia/Dubai
+++ b/library/tzdata/Asia/Dubai
@@ -2,5 +2,5 @@
set TZData(:Asia/Dubai) {
{-9223372036854775808 13272 0 LMT}
- {-1577936472 14400 0 +04}
+ {-1577936472 14400 0 +0400}
}
diff --git a/library/tzdata/Asia/Dushanbe b/library/tzdata/Asia/Dushanbe
index fe82ce7..74d875e 100644
--- a/library/tzdata/Asia/Dushanbe
+++ b/library/tzdata/Asia/Dushanbe
@@ -2,28 +2,28 @@
set TZData(:Asia/Dushanbe) {
{-9223372036854775808 16512 0 LMT}
- {-1441168512 18000 0 +05}
- {-1247547600 21600 0 +06}
- {354909600 25200 1 +06}
- {370717200 21600 0 +06}
- {386445600 25200 1 +06}
- {402253200 21600 0 +06}
- {417981600 25200 1 +06}
- {433789200 21600 0 +06}
- {449604000 25200 1 +06}
- {465336000 21600 0 +06}
- {481060800 25200 1 +06}
- {496785600 21600 0 +06}
- {512510400 25200 1 +06}
- {528235200 21600 0 +06}
- {543960000 25200 1 +06}
- {559684800 21600 0 +06}
- {575409600 25200 1 +06}
- {591134400 21600 0 +06}
- {606859200 25200 1 +06}
- {622584000 21600 0 +06}
- {638308800 25200 1 +06}
- {654638400 21600 0 +06}
- {670363200 21600 1 +06}
- {684363600 18000 0 +05}
+ {-1441168512 18000 0 +0500}
+ {-1247547600 21600 0 +0600}
+ {354909600 25200 1 +0700}
+ {370717200 21600 0 +0600}
+ {386445600 25200 1 +0700}
+ {402253200 21600 0 +0600}
+ {417981600 25200 1 +0700}
+ {433789200 21600 0 +0600}
+ {449604000 25200 1 +0700}
+ {465336000 21600 0 +0600}
+ {481060800 25200 1 +0700}
+ {496785600 21600 0 +0600}
+ {512510400 25200 1 +0700}
+ {528235200 21600 0 +0600}
+ {543960000 25200 1 +0700}
+ {559684800 21600 0 +0600}
+ {575409600 25200 1 +0700}
+ {591134400 21600 0 +0600}
+ {606859200 25200 1 +0700}
+ {622584000 21600 0 +0600}
+ {638308800 25200 1 +0700}
+ {654638400 21600 0 +0600}
+ {670363200 21600 1 +0600}
+ {684363600 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Famagusta b/library/tzdata/Asia/Famagusta
index 55eade6..4f4460a 100644
--- a/library/tzdata/Asia/Famagusta
+++ b/library/tzdata/Asia/Famagusta
@@ -87,7 +87,7 @@ set TZData(:Asia/Famagusta) {
{1427590800 10800 1 EEST}
{1445734800 7200 0 EET}
{1459040400 10800 1 EEST}
- {1473285600 10800 0 +03}
+ {1473285600 10800 0 +0300}
{1509238800 7200 0 EET}
{1521939600 10800 1 EEST}
{1540688400 7200 0 EET}
diff --git a/library/tzdata/Asia/Gaza b/library/tzdata/Asia/Gaza
index 1ceb680..edc7e79 100644
--- a/library/tzdata/Asia/Gaza
+++ b/library/tzdata/Asia/Gaza
@@ -127,11 +127,11 @@ set TZData(:Asia/Gaza) {
{1635458400 7200 0 EET}
{1648332000 10800 1 EEST}
{1666998000 7200 0 EET}
- {1679702400 10800 1 EEST}
+ {1682726400 10800 1 EEST}
{1698447600 7200 0 EET}
- {1711756800 10800 1 EEST}
+ {1713571200 10800 1 EEST}
{1729897200 7200 0 EET}
- {1743206400 10800 1 EEST}
+ {1744416000 10800 1 EEST}
{1761346800 7200 0 EET}
{1774656000 10800 1 EEST}
{1792796400 7200 0 EET}
@@ -154,50 +154,80 @@ set TZData(:Asia/Gaza) {
{2058307200 10800 1 EEST}
{2077052400 7200 0 EET}
{2090361600 10800 1 EEST}
- {2108502000 7200 0 EET}
+ {2107897200 7200 0 EET}
{2121811200 10800 1 EEST}
- {2139951600 7200 0 EET}
+ {2138742000 7200 0 EET}
{2153260800 10800 1 EEST}
- {2172006000 7200 0 EET}
+ {2168982000 7200 0 EET}
{2184710400 10800 1 EEST}
- {2203455600 7200 0 EET}
+ {2199826800 7200 0 EET}
{2216160000 10800 1 EEST}
+ {2230066800 7200 0 EET}
+ {2234304000 10800 1 EEST}
{2234905200 7200 0 EET}
{2248214400 10800 1 EEST}
+ {2260911600 7200 0 EET}
+ {2264544000 10800 1 EEST}
{2266354800 7200 0 EET}
{2279664000 10800 1 EEST}
+ {2291756400 7200 0 EET}
+ {2295388800 10800 1 EEST}
{2297804400 7200 0 EET}
{2311113600 10800 1 EEST}
+ {2321996400 7200 0 EET}
+ {2326233600 10800 1 EEST}
{2329254000 7200 0 EET}
{2342563200 10800 1 EEST}
+ {2352841200 7200 0 EET}
+ {2356473600 10800 1 EEST}
{2361308400 7200 0 EET}
{2374012800 10800 1 EEST}
+ {2383686000 7200 0 EET}
+ {2387318400 10800 1 EEST}
{2392758000 7200 0 EET}
{2405462400 10800 1 EEST}
+ {2413926000 7200 0 EET}
+ {2418163200 10800 1 EEST}
{2424207600 7200 0 EET}
{2437516800 10800 1 EEST}
+ {2444770800 7200 0 EET}
+ {2448403200 10800 1 EEST}
{2455657200 7200 0 EET}
{2468966400 10800 1 EEST}
+ {2475010800 7200 0 EET}
+ {2479248000 10800 1 EEST}
{2487106800 7200 0 EET}
{2500416000 10800 1 EEST}
+ {2505855600 7200 0 EET}
+ {2509488000 10800 1 EEST}
{2519161200 7200 0 EET}
{2531865600 10800 1 EEST}
+ {2536700400 7200 0 EET}
+ {2540332800 10800 1 EEST}
{2550610800 7200 0 EET}
{2563315200 10800 1 EEST}
+ {2566940400 7200 0 EET}
+ {2571177600 10800 1 EEST}
{2582060400 7200 0 EET}
{2595369600 10800 1 EEST}
+ {2597785200 7200 0 EET}
+ {2601417600 10800 1 EEST}
{2613510000 7200 0 EET}
{2626819200 10800 1 EEST}
+ {2628025200 7200 0 EET}
+ {2632262400 10800 1 EEST}
{2644959600 7200 0 EET}
{2658268800 10800 1 EEST}
+ {2658870000 7200 0 EET}
+ {2663107200 10800 1 EEST}
{2676409200 7200 0 EET}
- {2689718400 10800 1 EEST}
+ {2693347200 10800 1 EEST}
{2708463600 7200 0 EET}
- {2721168000 10800 1 EEST}
+ {2724192000 10800 1 EEST}
{2739913200 7200 0 EET}
- {2752617600 10800 1 EEST}
+ {2754432000 10800 1 EEST}
{2771362800 7200 0 EET}
- {2784672000 10800 1 EEST}
+ {2785276800 10800 1 EEST}
{2802812400 7200 0 EET}
{2816121600 10800 1 EEST}
{2834262000 7200 0 EET}
@@ -218,42 +248,72 @@ set TZData(:Asia/Gaza) {
{3068323200 10800 1 EEST}
{3087068400 7200 0 EET}
{3099772800 10800 1 EEST}
- {3118518000 7200 0 EET}
+ {3117913200 7200 0 EET}
{3131827200 10800 1 EEST}
- {3149967600 7200 0 EET}
+ {3148758000 7200 0 EET}
{3163276800 10800 1 EEST}
- {3181417200 7200 0 EET}
+ {3179602800 7200 0 EET}
{3194726400 10800 1 EEST}
- {3212866800 7200 0 EET}
+ {3209842800 7200 0 EET}
{3226176000 10800 1 EEST}
+ {3240687600 7200 0 EET}
+ {3244320000 10800 1 EEST}
{3244921200 7200 0 EET}
{3257625600 10800 1 EEST}
+ {3271532400 7200 0 EET}
+ {3275164800 10800 1 EEST}
{3276370800 7200 0 EET}
{3289075200 10800 1 EEST}
+ {3301772400 7200 0 EET}
+ {3306009600 10800 1 EEST}
{3307820400 7200 0 EET}
{3321129600 10800 1 EEST}
+ {3332617200 7200 0 EET}
+ {3336249600 10800 1 EEST}
{3339270000 7200 0 EET}
{3352579200 10800 1 EEST}
+ {3362857200 7200 0 EET}
+ {3367094400 10800 1 EEST}
{3370719600 7200 0 EET}
{3384028800 10800 1 EEST}
+ {3393702000 7200 0 EET}
+ {3397939200 10800 1 EEST}
{3402774000 7200 0 EET}
{3415478400 10800 1 EEST}
+ {3424546800 7200 0 EET}
+ {3428179200 10800 1 EEST}
{3434223600 7200 0 EET}
{3446928000 10800 1 EEST}
+ {3454786800 7200 0 EET}
+ {3459024000 10800 1 EEST}
{3465673200 7200 0 EET}
{3478982400 10800 1 EEST}
+ {3485631600 7200 0 EET}
+ {3489264000 10800 1 EEST}
{3497122800 7200 0 EET}
{3510432000 10800 1 EEST}
+ {3516476400 7200 0 EET}
+ {3520108800 10800 1 EEST}
{3528572400 7200 0 EET}
{3541881600 10800 1 EEST}
+ {3546716400 7200 0 EET}
+ {3550953600 10800 1 EEST}
{3560022000 7200 0 EET}
{3573331200 10800 1 EEST}
+ {3577561200 7200 0 EET}
+ {3581193600 10800 1 EEST}
{3592076400 7200 0 EET}
{3604780800 10800 1 EEST}
+ {3607801200 7200 0 EET}
+ {3612038400 10800 1 EEST}
{3623526000 7200 0 EET}
{3636230400 10800 1 EEST}
+ {3638646000 7200 0 EET}
+ {3642883200 10800 1 EEST}
{3654975600 7200 0 EET}
{3668284800 10800 1 EEST}
+ {3669490800 7200 0 EET}
+ {3673123200 10800 1 EEST}
{3686425200 7200 0 EET}
{3699734400 10800 1 EEST}
{3717874800 7200 0 EET}
diff --git a/library/tzdata/Asia/Hebron b/library/tzdata/Asia/Hebron
index b92db8d..8d512af 100644
--- a/library/tzdata/Asia/Hebron
+++ b/library/tzdata/Asia/Hebron
@@ -126,11 +126,11 @@ set TZData(:Asia/Hebron) {
{1635458400 7200 0 EET}
{1648332000 10800 1 EEST}
{1666998000 7200 0 EET}
- {1679702400 10800 1 EEST}
+ {1682726400 10800 1 EEST}
{1698447600 7200 0 EET}
- {1711756800 10800 1 EEST}
+ {1713571200 10800 1 EEST}
{1729897200 7200 0 EET}
- {1743206400 10800 1 EEST}
+ {1744416000 10800 1 EEST}
{1761346800 7200 0 EET}
{1774656000 10800 1 EEST}
{1792796400 7200 0 EET}
@@ -153,50 +153,80 @@ set TZData(:Asia/Hebron) {
{2058307200 10800 1 EEST}
{2077052400 7200 0 EET}
{2090361600 10800 1 EEST}
- {2108502000 7200 0 EET}
+ {2107897200 7200 0 EET}
{2121811200 10800 1 EEST}
- {2139951600 7200 0 EET}
+ {2138742000 7200 0 EET}
{2153260800 10800 1 EEST}
- {2172006000 7200 0 EET}
+ {2168982000 7200 0 EET}
{2184710400 10800 1 EEST}
- {2203455600 7200 0 EET}
+ {2199826800 7200 0 EET}
{2216160000 10800 1 EEST}
+ {2230066800 7200 0 EET}
+ {2234304000 10800 1 EEST}
{2234905200 7200 0 EET}
{2248214400 10800 1 EEST}
+ {2260911600 7200 0 EET}
+ {2264544000 10800 1 EEST}
{2266354800 7200 0 EET}
{2279664000 10800 1 EEST}
+ {2291756400 7200 0 EET}
+ {2295388800 10800 1 EEST}
{2297804400 7200 0 EET}
{2311113600 10800 1 EEST}
+ {2321996400 7200 0 EET}
+ {2326233600 10800 1 EEST}
{2329254000 7200 0 EET}
{2342563200 10800 1 EEST}
+ {2352841200 7200 0 EET}
+ {2356473600 10800 1 EEST}
{2361308400 7200 0 EET}
{2374012800 10800 1 EEST}
+ {2383686000 7200 0 EET}
+ {2387318400 10800 1 EEST}
{2392758000 7200 0 EET}
{2405462400 10800 1 EEST}
+ {2413926000 7200 0 EET}
+ {2418163200 10800 1 EEST}
{2424207600 7200 0 EET}
{2437516800 10800 1 EEST}
+ {2444770800 7200 0 EET}
+ {2448403200 10800 1 EEST}
{2455657200 7200 0 EET}
{2468966400 10800 1 EEST}
+ {2475010800 7200 0 EET}
+ {2479248000 10800 1 EEST}
{2487106800 7200 0 EET}
{2500416000 10800 1 EEST}
+ {2505855600 7200 0 EET}
+ {2509488000 10800 1 EEST}
{2519161200 7200 0 EET}
{2531865600 10800 1 EEST}
+ {2536700400 7200 0 EET}
+ {2540332800 10800 1 EEST}
{2550610800 7200 0 EET}
{2563315200 10800 1 EEST}
+ {2566940400 7200 0 EET}
+ {2571177600 10800 1 EEST}
{2582060400 7200 0 EET}
{2595369600 10800 1 EEST}
+ {2597785200 7200 0 EET}
+ {2601417600 10800 1 EEST}
{2613510000 7200 0 EET}
{2626819200 10800 1 EEST}
+ {2628025200 7200 0 EET}
+ {2632262400 10800 1 EEST}
{2644959600 7200 0 EET}
{2658268800 10800 1 EEST}
+ {2658870000 7200 0 EET}
+ {2663107200 10800 1 EEST}
{2676409200 7200 0 EET}
- {2689718400 10800 1 EEST}
+ {2693347200 10800 1 EEST}
{2708463600 7200 0 EET}
- {2721168000 10800 1 EEST}
+ {2724192000 10800 1 EEST}
{2739913200 7200 0 EET}
- {2752617600 10800 1 EEST}
+ {2754432000 10800 1 EEST}
{2771362800 7200 0 EET}
- {2784672000 10800 1 EEST}
+ {2785276800 10800 1 EEST}
{2802812400 7200 0 EET}
{2816121600 10800 1 EEST}
{2834262000 7200 0 EET}
@@ -217,42 +247,72 @@ set TZData(:Asia/Hebron) {
{3068323200 10800 1 EEST}
{3087068400 7200 0 EET}
{3099772800 10800 1 EEST}
- {3118518000 7200 0 EET}
+ {3117913200 7200 0 EET}
{3131827200 10800 1 EEST}
- {3149967600 7200 0 EET}
+ {3148758000 7200 0 EET}
{3163276800 10800 1 EEST}
- {3181417200 7200 0 EET}
+ {3179602800 7200 0 EET}
{3194726400 10800 1 EEST}
- {3212866800 7200 0 EET}
+ {3209842800 7200 0 EET}
{3226176000 10800 1 EEST}
+ {3240687600 7200 0 EET}
+ {3244320000 10800 1 EEST}
{3244921200 7200 0 EET}
{3257625600 10800 1 EEST}
+ {3271532400 7200 0 EET}
+ {3275164800 10800 1 EEST}
{3276370800 7200 0 EET}
{3289075200 10800 1 EEST}
+ {3301772400 7200 0 EET}
+ {3306009600 10800 1 EEST}
{3307820400 7200 0 EET}
{3321129600 10800 1 EEST}
+ {3332617200 7200 0 EET}
+ {3336249600 10800 1 EEST}
{3339270000 7200 0 EET}
{3352579200 10800 1 EEST}
+ {3362857200 7200 0 EET}
+ {3367094400 10800 1 EEST}
{3370719600 7200 0 EET}
{3384028800 10800 1 EEST}
+ {3393702000 7200 0 EET}
+ {3397939200 10800 1 EEST}
{3402774000 7200 0 EET}
{3415478400 10800 1 EEST}
+ {3424546800 7200 0 EET}
+ {3428179200 10800 1 EEST}
{3434223600 7200 0 EET}
{3446928000 10800 1 EEST}
+ {3454786800 7200 0 EET}
+ {3459024000 10800 1 EEST}
{3465673200 7200 0 EET}
{3478982400 10800 1 EEST}
+ {3485631600 7200 0 EET}
+ {3489264000 10800 1 EEST}
{3497122800 7200 0 EET}
{3510432000 10800 1 EEST}
+ {3516476400 7200 0 EET}
+ {3520108800 10800 1 EEST}
{3528572400 7200 0 EET}
{3541881600 10800 1 EEST}
+ {3546716400 7200 0 EET}
+ {3550953600 10800 1 EEST}
{3560022000 7200 0 EET}
{3573331200 10800 1 EEST}
+ {3577561200 7200 0 EET}
+ {3581193600 10800 1 EEST}
{3592076400 7200 0 EET}
{3604780800 10800 1 EEST}
+ {3607801200 7200 0 EET}
+ {3612038400 10800 1 EEST}
{3623526000 7200 0 EET}
{3636230400 10800 1 EEST}
+ {3638646000 7200 0 EET}
+ {3642883200 10800 1 EEST}
{3654975600 7200 0 EET}
{3668284800 10800 1 EEST}
+ {3669490800 7200 0 EET}
+ {3673123200 10800 1 EEST}
{3686425200 7200 0 EET}
{3699734400 10800 1 EEST}
{3717874800 7200 0 EET}
diff --git a/library/tzdata/Asia/Ho_Chi_Minh b/library/tzdata/Asia/Ho_Chi_Minh
index 4689516..b576fd1 100644
--- a/library/tzdata/Asia/Ho_Chi_Minh
+++ b/library/tzdata/Asia/Ho_Chi_Minh
@@ -3,12 +3,12 @@
set TZData(:Asia/Ho_Chi_Minh) {
{-9223372036854775808 25590 0 LMT}
{-2004073590 25590 0 PLMT}
- {-1851577590 25200 0 +07}
- {-852105600 28800 0 +08}
- {-782643600 32400 0 +09}
- {-767869200 25200 0 +07}
- {-718095600 28800 0 +08}
- {-457776000 25200 0 +07}
- {-315648000 28800 0 +08}
- {171820800 25200 0 +07}
+ {-1851577590 25200 0 +0700}
+ {-852105600 28800 0 +0800}
+ {-782643600 32400 0 +0900}
+ {-767869200 25200 0 +0700}
+ {-718095600 28800 0 +0800}
+ {-457772400 25200 0 +0700}
+ {-315648000 28800 0 +0800}
+ {171820800 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Hovd b/library/tzdata/Asia/Hovd
index 9b14d5b..5439ec5 100644
--- a/library/tzdata/Asia/Hovd
+++ b/library/tzdata/Asia/Hovd
@@ -2,54 +2,54 @@
set TZData(:Asia/Hovd) {
{-9223372036854775808 21996 0 LMT}
- {-2032927596 21600 0 +06}
- {252439200 25200 0 +07}
- {417978000 28800 1 +07}
- {433785600 25200 0 +07}
- {449600400 28800 1 +07}
- {465321600 25200 0 +07}
- {481050000 28800 1 +07}
- {496771200 25200 0 +07}
- {512499600 28800 1 +07}
- {528220800 25200 0 +07}
- {543949200 28800 1 +07}
- {559670400 25200 0 +07}
- {575398800 28800 1 +07}
- {591120000 25200 0 +07}
- {606848400 28800 1 +07}
- {622569600 25200 0 +07}
- {638298000 28800 1 +07}
- {654624000 25200 0 +07}
- {670352400 28800 1 +07}
- {686073600 25200 0 +07}
- {701802000 28800 1 +07}
- {717523200 25200 0 +07}
- {733251600 28800 1 +07}
- {748972800 25200 0 +07}
- {764701200 28800 1 +07}
- {780422400 25200 0 +07}
- {796150800 28800 1 +07}
- {811872000 25200 0 +07}
- {828205200 28800 1 +07}
- {843926400 25200 0 +07}
- {859654800 28800 1 +07}
- {875376000 25200 0 +07}
- {891104400 28800 1 +07}
- {906825600 25200 0 +07}
- {988398000 28800 1 +07}
- {1001700000 25200 0 +07}
- {1017428400 28800 1 +07}
- {1033149600 25200 0 +07}
- {1048878000 28800 1 +07}
- {1064599200 25200 0 +07}
- {1080327600 28800 1 +07}
- {1096048800 25200 0 +07}
- {1111777200 28800 1 +07}
- {1127498400 25200 0 +07}
- {1143226800 28800 1 +07}
- {1159552800 25200 0 +07}
- {1427482800 28800 1 +07}
- {1443196800 25200 0 +07}
- {1458932400 28800 1 +07}
- {1474646400 25200 0 +07}
+ {-2032927596 21600 0 +0600}
+ {252439200 25200 0 +0700}
+ {417978000 28800 1 +0800}
+ {433785600 25200 0 +0700}
+ {449600400 28800 1 +0800}
+ {465321600 25200 0 +0700}
+ {481050000 28800 1 +0800}
+ {496771200 25200 0 +0700}
+ {512499600 28800 1 +0800}
+ {528220800 25200 0 +0700}
+ {543949200 28800 1 +0800}
+ {559670400 25200 0 +0700}
+ {575398800 28800 1 +0800}
+ {591120000 25200 0 +0700}
+ {606848400 28800 1 +0800}
+ {622569600 25200 0 +0700}
+ {638298000 28800 1 +0800}
+ {654624000 25200 0 +0700}
+ {670352400 28800 1 +0800}
+ {686073600 25200 0 +0700}
+ {701802000 28800 1 +0800}
+ {717523200 25200 0 +0700}
+ {733251600 28800 1 +0800}
+ {748972800 25200 0 +0700}
+ {764701200 28800 1 +0800}
+ {780422400 25200 0 +0700}
+ {796150800 28800 1 +0800}
+ {811872000 25200 0 +0700}
+ {828205200 28800 1 +0800}
+ {843926400 25200 0 +0700}
+ {859654800 28800 1 +0800}
+ {875376000 25200 0 +0700}
+ {891104400 28800 1 +0800}
+ {906825600 25200 0 +0700}
+ {988398000 28800 1 +0800}
+ {1001700000 25200 0 +0700}
+ {1017428400 28800 1 +0800}
+ {1033149600 25200 0 +0700}
+ {1048878000 28800 1 +0800}
+ {1064599200 25200 0 +0700}
+ {1080327600 28800 1 +0800}
+ {1096048800 25200 0 +0700}
+ {1111777200 28800 1 +0800}
+ {1127498400 25200 0 +0700}
+ {1143226800 28800 1 +0800}
+ {1159552800 25200 0 +0700}
+ {1427482800 28800 1 +0800}
+ {1443196800 25200 0 +0700}
+ {1458932400 28800 1 +0800}
+ {1474646400 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Irkutsk b/library/tzdata/Asia/Irkutsk
index 9666969..272fc8d 100644
--- a/library/tzdata/Asia/Irkutsk
+++ b/library/tzdata/Asia/Irkutsk
@@ -3,70 +3,70 @@
set TZData(:Asia/Irkutsk) {
{-9223372036854775808 25025 0 LMT}
{-2840165825 25025 0 IMT}
- {-1575874625 25200 0 +07}
- {-1247554800 28800 0 +09}
- {354902400 32400 1 +09}
- {370710000 28800 0 +08}
- {386438400 32400 1 +09}
- {402246000 28800 0 +08}
- {417974400 32400 1 +09}
- {433782000 28800 0 +08}
- {449596800 32400 1 +09}
- {465328800 28800 0 +08}
- {481053600 32400 1 +09}
- {496778400 28800 0 +08}
- {512503200 32400 1 +09}
- {528228000 28800 0 +08}
- {543952800 32400 1 +09}
- {559677600 28800 0 +08}
- {575402400 32400 1 +09}
- {591127200 28800 0 +08}
- {606852000 32400 1 +09}
- {622576800 28800 0 +08}
- {638301600 32400 1 +09}
- {654631200 28800 0 +08}
- {670356000 25200 0 +08}
- {670359600 28800 1 +08}
- {686084400 25200 0 +07}
- {695761200 28800 0 +09}
- {701805600 32400 1 +09}
- {717530400 28800 0 +08}
- {733255200 32400 1 +09}
- {748980000 28800 0 +08}
- {764704800 32400 1 +09}
- {780429600 28800 0 +08}
- {796154400 32400 1 +09}
- {811879200 28800 0 +08}
- {828208800 32400 1 +09}
- {846352800 28800 0 +08}
- {859658400 32400 1 +09}
- {877802400 28800 0 +08}
- {891108000 32400 1 +09}
- {909252000 28800 0 +08}
- {922557600 32400 1 +09}
- {941306400 28800 0 +08}
- {954007200 32400 1 +09}
- {972756000 28800 0 +08}
- {985456800 32400 1 +09}
- {1004205600 28800 0 +08}
- {1017511200 32400 1 +09}
- {1035655200 28800 0 +08}
- {1048960800 32400 1 +09}
- {1067104800 28800 0 +08}
- {1080410400 32400 1 +09}
- {1099159200 28800 0 +08}
- {1111860000 32400 1 +09}
- {1130608800 28800 0 +08}
- {1143309600 32400 1 +09}
- {1162058400 28800 0 +08}
- {1174759200 32400 1 +09}
- {1193508000 28800 0 +08}
- {1206813600 32400 1 +09}
- {1224957600 28800 0 +08}
- {1238263200 32400 1 +09}
- {1256407200 28800 0 +08}
- {1269712800 32400 1 +09}
- {1288461600 28800 0 +08}
- {1301162400 32400 0 +09}
- {1414256400 28800 0 +08}
+ {-1575874625 25200 0 +0700}
+ {-1247554800 28800 0 +0800}
+ {354902400 32400 1 +0900}
+ {370710000 28800 0 +0800}
+ {386438400 32400 1 +0900}
+ {402246000 28800 0 +0800}
+ {417974400 32400 1 +0900}
+ {433782000 28800 0 +0800}
+ {449596800 32400 1 +0900}
+ {465328800 28800 0 +0800}
+ {481053600 32400 1 +0900}
+ {496778400 28800 0 +0800}
+ {512503200 32400 1 +0900}
+ {528228000 28800 0 +0800}
+ {543952800 32400 1 +0900}
+ {559677600 28800 0 +0800}
+ {575402400 32400 1 +0900}
+ {591127200 28800 0 +0800}
+ {606852000 32400 1 +0900}
+ {622576800 28800 0 +0800}
+ {638301600 32400 1 +0900}
+ {654631200 28800 0 +0800}
+ {670356000 25200 0 +0700}
+ {670359600 28800 1 +0800}
+ {686084400 25200 0 +0700}
+ {695761200 28800 0 +0800}
+ {701805600 32400 1 +0900}
+ {717530400 28800 0 +0800}
+ {733255200 32400 1 +0900}
+ {748980000 28800 0 +0800}
+ {764704800 32400 1 +0900}
+ {780429600 28800 0 +0800}
+ {796154400 32400 1 +0900}
+ {811879200 28800 0 +0800}
+ {828208800 32400 1 +0900}
+ {846352800 28800 0 +0800}
+ {859658400 32400 1 +0900}
+ {877802400 28800 0 +0800}
+ {891108000 32400 1 +0900}
+ {909252000 28800 0 +0800}
+ {922557600 32400 1 +0900}
+ {941306400 28800 0 +0800}
+ {954007200 32400 1 +0900}
+ {972756000 28800 0 +0800}
+ {985456800 32400 1 +0900}
+ {1004205600 28800 0 +0800}
+ {1017511200 32400 1 +0900}
+ {1035655200 28800 0 +0800}
+ {1048960800 32400 1 +0900}
+ {1067104800 28800 0 +0800}
+ {1080410400 32400 1 +0900}
+ {1099159200 28800 0 +0800}
+ {1111860000 32400 1 +0900}
+ {1130608800 28800 0 +0800}
+ {1143309600 32400 1 +0900}
+ {1162058400 28800 0 +0800}
+ {1174759200 32400 1 +0900}
+ {1193508000 28800 0 +0800}
+ {1206813600 32400 1 +0900}
+ {1224957600 28800 0 +0800}
+ {1238263200 32400 1 +0900}
+ {1256407200 28800 0 +0800}
+ {1269712800 32400 1 +0900}
+ {1288461600 28800 0 +0800}
+ {1301162400 32400 0 +0900}
+ {1414256400 28800 0 +0800}
}
diff --git a/library/tzdata/Asia/Jakarta b/library/tzdata/Asia/Jakarta
index 21da168..8fc59b8 100644
--- a/library/tzdata/Asia/Jakarta
+++ b/library/tzdata/Asia/Jakarta
@@ -5,9 +5,9 @@ set TZData(:Asia/Jakarta) {
{-3231299232 25632 0 BMT}
{-1451719200 26400 0 +0720}
{-1172906400 27000 0 +0730}
- {-876641400 32400 0 +09}
+ {-876641400 32400 0 +0900}
{-766054800 27000 0 +0730}
- {-683883000 28800 0 +08}
+ {-683883000 28800 0 +0800}
{-620812800 27000 0 +0730}
{-189415800 25200 0 WIB}
}
diff --git a/library/tzdata/Asia/Jayapura b/library/tzdata/Asia/Jayapura
index 1432488..ad93444 100644
--- a/library/tzdata/Asia/Jayapura
+++ b/library/tzdata/Asia/Jayapura
@@ -2,7 +2,7 @@
set TZData(:Asia/Jayapura) {
{-9223372036854775808 33768 0 LMT}
- {-1172913768 32400 0 +09}
+ {-1172913768 32400 0 +0900}
{-799491600 34200 0 +0930}
{-189423000 32400 0 WIT}
}
diff --git a/library/tzdata/Asia/Kabul b/library/tzdata/Asia/Kabul
index 3613de4..445ed84 100644
--- a/library/tzdata/Asia/Kabul
+++ b/library/tzdata/Asia/Kabul
@@ -2,6 +2,6 @@
set TZData(:Asia/Kabul) {
{-9223372036854775808 16608 0 LMT}
- {-2524538208 14400 0 +04}
+ {-2524538208 14400 0 +0400}
{-788932800 16200 0 +0430}
}
diff --git a/library/tzdata/Asia/Kamchatka b/library/tzdata/Asia/Kamchatka
index 818fc2d..06a2582 100644
--- a/library/tzdata/Asia/Kamchatka
+++ b/library/tzdata/Asia/Kamchatka
@@ -2,70 +2,70 @@
set TZData(:Asia/Kamchatka) {
{-9223372036854775808 38076 0 LMT}
- {-1487759676 39600 0 +11}
- {-1247569200 43200 0 +13}
- {354888000 46800 1 +13}
- {370695600 43200 0 +12}
- {386424000 46800 1 +13}
- {402231600 43200 0 +12}
- {417960000 46800 1 +13}
- {433767600 43200 0 +12}
- {449582400 46800 1 +13}
- {465314400 43200 0 +12}
- {481039200 46800 1 +13}
- {496764000 43200 0 +12}
- {512488800 46800 1 +13}
- {528213600 43200 0 +12}
- {543938400 46800 1 +13}
- {559663200 43200 0 +12}
- {575388000 46800 1 +13}
- {591112800 43200 0 +12}
- {606837600 46800 1 +13}
- {622562400 43200 0 +12}
- {638287200 46800 1 +13}
- {654616800 43200 0 +12}
- {670341600 39600 0 +12}
- {670345200 43200 1 +12}
- {686070000 39600 0 +11}
- {695746800 43200 0 +13}
- {701791200 46800 1 +13}
- {717516000 43200 0 +12}
- {733240800 46800 1 +13}
- {748965600 43200 0 +12}
- {764690400 46800 1 +13}
- {780415200 43200 0 +12}
- {796140000 46800 1 +13}
- {811864800 43200 0 +12}
- {828194400 46800 1 +13}
- {846338400 43200 0 +12}
- {859644000 46800 1 +13}
- {877788000 43200 0 +12}
- {891093600 46800 1 +13}
- {909237600 43200 0 +12}
- {922543200 46800 1 +13}
- {941292000 43200 0 +12}
- {953992800 46800 1 +13}
- {972741600 43200 0 +12}
- {985442400 46800 1 +13}
- {1004191200 43200 0 +12}
- {1017496800 46800 1 +13}
- {1035640800 43200 0 +12}
- {1048946400 46800 1 +13}
- {1067090400 43200 0 +12}
- {1080396000 46800 1 +13}
- {1099144800 43200 0 +12}
- {1111845600 46800 1 +13}
- {1130594400 43200 0 +12}
- {1143295200 46800 1 +13}
- {1162044000 43200 0 +12}
- {1174744800 46800 1 +13}
- {1193493600 43200 0 +12}
- {1206799200 46800 1 +13}
- {1224943200 43200 0 +12}
- {1238248800 46800 1 +13}
- {1256392800 43200 0 +12}
- {1269698400 39600 0 +12}
- {1269702000 43200 1 +12}
- {1288450800 39600 0 +11}
- {1301151600 43200 0 +12}
+ {-1487759676 39600 0 +1100}
+ {-1247569200 43200 0 +1200}
+ {354888000 46800 1 +1300}
+ {370695600 43200 0 +1200}
+ {386424000 46800 1 +1300}
+ {402231600 43200 0 +1200}
+ {417960000 46800 1 +1300}
+ {433767600 43200 0 +1200}
+ {449582400 46800 1 +1300}
+ {465314400 43200 0 +1200}
+ {481039200 46800 1 +1300}
+ {496764000 43200 0 +1200}
+ {512488800 46800 1 +1300}
+ {528213600 43200 0 +1200}
+ {543938400 46800 1 +1300}
+ {559663200 43200 0 +1200}
+ {575388000 46800 1 +1300}
+ {591112800 43200 0 +1200}
+ {606837600 46800 1 +1300}
+ {622562400 43200 0 +1200}
+ {638287200 46800 1 +1300}
+ {654616800 43200 0 +1200}
+ {670341600 39600 0 +1100}
+ {670345200 43200 1 +1200}
+ {686070000 39600 0 +1100}
+ {695746800 43200 0 +1200}
+ {701791200 46800 1 +1300}
+ {717516000 43200 0 +1200}
+ {733240800 46800 1 +1300}
+ {748965600 43200 0 +1200}
+ {764690400 46800 1 +1300}
+ {780415200 43200 0 +1200}
+ {796140000 46800 1 +1300}
+ {811864800 43200 0 +1200}
+ {828194400 46800 1 +1300}
+ {846338400 43200 0 +1200}
+ {859644000 46800 1 +1300}
+ {877788000 43200 0 +1200}
+ {891093600 46800 1 +1300}
+ {909237600 43200 0 +1200}
+ {922543200 46800 1 +1300}
+ {941292000 43200 0 +1200}
+ {953992800 46800 1 +1300}
+ {972741600 43200 0 +1200}
+ {985442400 46800 1 +1300}
+ {1004191200 43200 0 +1200}
+ {1017496800 46800 1 +1300}
+ {1035640800 43200 0 +1200}
+ {1048946400 46800 1 +1300}
+ {1067090400 43200 0 +1200}
+ {1080396000 46800 1 +1300}
+ {1099144800 43200 0 +1200}
+ {1111845600 46800 1 +1300}
+ {1130594400 43200 0 +1200}
+ {1143295200 46800 1 +1300}
+ {1162044000 43200 0 +1200}
+ {1174744800 46800 1 +1300}
+ {1193493600 43200 0 +1200}
+ {1206799200 46800 1 +1300}
+ {1224943200 43200 0 +1200}
+ {1238248800 46800 1 +1300}
+ {1256392800 43200 0 +1200}
+ {1269698400 39600 0 +1100}
+ {1269702000 43200 1 +1200}
+ {1288450800 39600 0 +1100}
+ {1301151600 43200 0 +1200}
}
diff --git a/library/tzdata/Asia/Karachi b/library/tzdata/Asia/Karachi
index 1d81926..202bf29 100644
--- a/library/tzdata/Asia/Karachi
+++ b/library/tzdata/Asia/Karachi
@@ -5,7 +5,7 @@ set TZData(:Asia/Karachi) {
{-1988166492 19800 0 +0530}
{-862637400 23400 1 +0630}
{-764145000 19800 0 +0530}
- {-576135000 18000 0 +05}
+ {-576135000 18000 0 +0500}
{38775600 18000 0 PKT}
{1018119600 21600 1 PKST}
{1033840800 18000 0 PKT}
diff --git a/library/tzdata/Asia/Khandyga b/library/tzdata/Asia/Khandyga
index 07bffac..25db347 100644
--- a/library/tzdata/Asia/Khandyga
+++ b/library/tzdata/Asia/Khandyga
@@ -2,72 +2,72 @@
set TZData(:Asia/Khandyga) {
{-9223372036854775808 32533 0 LMT}
- {-1579424533 28800 0 +08}
- {-1247558400 32400 0 +10}
- {354898800 36000 1 +10}
- {370706400 32400 0 +09}
- {386434800 36000 1 +10}
- {402242400 32400 0 +09}
- {417970800 36000 1 +10}
- {433778400 32400 0 +09}
- {449593200 36000 1 +10}
- {465325200 32400 0 +09}
- {481050000 36000 1 +10}
- {496774800 32400 0 +09}
- {512499600 36000 1 +10}
- {528224400 32400 0 +09}
- {543949200 36000 1 +10}
- {559674000 32400 0 +09}
- {575398800 36000 1 +10}
- {591123600 32400 0 +09}
- {606848400 36000 1 +10}
- {622573200 32400 0 +09}
- {638298000 36000 1 +10}
- {654627600 32400 0 +09}
- {670352400 28800 0 +09}
- {670356000 32400 1 +09}
- {686080800 28800 0 +08}
- {695757600 32400 0 +10}
- {701802000 36000 1 +10}
- {717526800 32400 0 +09}
- {733251600 36000 1 +10}
- {748976400 32400 0 +09}
- {764701200 36000 1 +10}
- {780426000 32400 0 +09}
- {796150800 36000 1 +10}
- {811875600 32400 0 +09}
- {828205200 36000 1 +10}
- {846349200 32400 0 +09}
- {859654800 36000 1 +10}
- {877798800 32400 0 +09}
- {891104400 36000 1 +10}
- {909248400 32400 0 +09}
- {922554000 36000 1 +10}
- {941302800 32400 0 +09}
- {954003600 36000 1 +10}
- {972752400 32400 0 +09}
- {985453200 36000 1 +10}
- {1004202000 32400 0 +09}
- {1017507600 36000 1 +10}
- {1035651600 32400 0 +09}
- {1048957200 36000 1 +10}
- {1067101200 32400 0 +09}
- {1072882800 36000 0 +11}
- {1080403200 39600 1 +11}
- {1099152000 36000 0 +10}
- {1111852800 39600 1 +11}
- {1130601600 36000 0 +10}
- {1143302400 39600 1 +11}
- {1162051200 36000 0 +10}
- {1174752000 39600 1 +11}
- {1193500800 36000 0 +10}
- {1206806400 39600 1 +11}
- {1224950400 36000 0 +10}
- {1238256000 39600 1 +11}
- {1256400000 36000 0 +10}
- {1269705600 39600 1 +11}
- {1288454400 36000 0 +10}
- {1301155200 39600 0 +11}
- {1315832400 36000 0 +10}
- {1414252800 32400 0 +09}
+ {-1579424533 28800 0 +0800}
+ {-1247558400 32400 0 +0900}
+ {354898800 36000 1 +1000}
+ {370706400 32400 0 +0900}
+ {386434800 36000 1 +1000}
+ {402242400 32400 0 +0900}
+ {417970800 36000 1 +1000}
+ {433778400 32400 0 +0900}
+ {449593200 36000 1 +1000}
+ {465325200 32400 0 +0900}
+ {481050000 36000 1 +1000}
+ {496774800 32400 0 +0900}
+ {512499600 36000 1 +1000}
+ {528224400 32400 0 +0900}
+ {543949200 36000 1 +1000}
+ {559674000 32400 0 +0900}
+ {575398800 36000 1 +1000}
+ {591123600 32400 0 +0900}
+ {606848400 36000 1 +1000}
+ {622573200 32400 0 +0900}
+ {638298000 36000 1 +1000}
+ {654627600 32400 0 +0900}
+ {670352400 28800 0 +0800}
+ {670356000 32400 1 +0900}
+ {686080800 28800 0 +0800}
+ {695757600 32400 0 +0900}
+ {701802000 36000 1 +1000}
+ {717526800 32400 0 +0900}
+ {733251600 36000 1 +1000}
+ {748976400 32400 0 +0900}
+ {764701200 36000 1 +1000}
+ {780426000 32400 0 +0900}
+ {796150800 36000 1 +1000}
+ {811875600 32400 0 +0900}
+ {828205200 36000 1 +1000}
+ {846349200 32400 0 +0900}
+ {859654800 36000 1 +1000}
+ {877798800 32400 0 +0900}
+ {891104400 36000 1 +1000}
+ {909248400 32400 0 +0900}
+ {922554000 36000 1 +1000}
+ {941302800 32400 0 +0900}
+ {954003600 36000 1 +1000}
+ {972752400 32400 0 +0900}
+ {985453200 36000 1 +1000}
+ {1004202000 32400 0 +0900}
+ {1017507600 36000 1 +1000}
+ {1035651600 32400 0 +0900}
+ {1048957200 36000 1 +1000}
+ {1067101200 32400 0 +0900}
+ {1072882800 36000 0 +1000}
+ {1080403200 39600 1 +1100}
+ {1099152000 36000 0 +1000}
+ {1111852800 39600 1 +1100}
+ {1130601600 36000 0 +1000}
+ {1143302400 39600 1 +1100}
+ {1162051200 36000 0 +1000}
+ {1174752000 39600 1 +1100}
+ {1193500800 36000 0 +1000}
+ {1206806400 39600 1 +1100}
+ {1224950400 36000 0 +1000}
+ {1238256000 39600 1 +1100}
+ {1256400000 36000 0 +1000}
+ {1269705600 39600 1 +1100}
+ {1288454400 36000 0 +1000}
+ {1301155200 39600 0 +1100}
+ {1315832400 36000 0 +1000}
+ {1414252800 32400 0 +0900}
}
diff --git a/library/tzdata/Asia/Krasnoyarsk b/library/tzdata/Asia/Krasnoyarsk
index 0721425..270a607 100644
--- a/library/tzdata/Asia/Krasnoyarsk
+++ b/library/tzdata/Asia/Krasnoyarsk
@@ -2,70 +2,70 @@
set TZData(:Asia/Krasnoyarsk) {
{-9223372036854775808 22286 0 LMT}
- {-1577513486 21600 0 +06}
- {-1247551200 25200 0 +08}
- {354906000 28800 1 +08}
- {370713600 25200 0 +07}
- {386442000 28800 1 +08}
- {402249600 25200 0 +07}
- {417978000 28800 1 +08}
- {433785600 25200 0 +07}
- {449600400 28800 1 +08}
- {465332400 25200 0 +07}
- {481057200 28800 1 +08}
- {496782000 25200 0 +07}
- {512506800 28800 1 +08}
- {528231600 25200 0 +07}
- {543956400 28800 1 +08}
- {559681200 25200 0 +07}
- {575406000 28800 1 +08}
- {591130800 25200 0 +07}
- {606855600 28800 1 +08}
- {622580400 25200 0 +07}
- {638305200 28800 1 +08}
- {654634800 25200 0 +07}
- {670359600 21600 0 +07}
- {670363200 25200 1 +07}
- {686088000 21600 0 +06}
- {695764800 25200 0 +08}
- {701809200 28800 1 +08}
- {717534000 25200 0 +07}
- {733258800 28800 1 +08}
- {748983600 25200 0 +07}
- {764708400 28800 1 +08}
- {780433200 25200 0 +07}
- {796158000 28800 1 +08}
- {811882800 25200 0 +07}
- {828212400 28800 1 +08}
- {846356400 25200 0 +07}
- {859662000 28800 1 +08}
- {877806000 25200 0 +07}
- {891111600 28800 1 +08}
- {909255600 25200 0 +07}
- {922561200 28800 1 +08}
- {941310000 25200 0 +07}
- {954010800 28800 1 +08}
- {972759600 25200 0 +07}
- {985460400 28800 1 +08}
- {1004209200 25200 0 +07}
- {1017514800 28800 1 +08}
- {1035658800 25200 0 +07}
- {1048964400 28800 1 +08}
- {1067108400 25200 0 +07}
- {1080414000 28800 1 +08}
- {1099162800 25200 0 +07}
- {1111863600 28800 1 +08}
- {1130612400 25200 0 +07}
- {1143313200 28800 1 +08}
- {1162062000 25200 0 +07}
- {1174762800 28800 1 +08}
- {1193511600 25200 0 +07}
- {1206817200 28800 1 +08}
- {1224961200 25200 0 +07}
- {1238266800 28800 1 +08}
- {1256410800 25200 0 +07}
- {1269716400 28800 1 +08}
- {1288465200 25200 0 +07}
- {1301166000 28800 0 +08}
- {1414260000 25200 0 +07}
+ {-1577513486 21600 0 +0600}
+ {-1247551200 25200 0 +0700}
+ {354906000 28800 1 +0800}
+ {370713600 25200 0 +0700}
+ {386442000 28800 1 +0800}
+ {402249600 25200 0 +0700}
+ {417978000 28800 1 +0800}
+ {433785600 25200 0 +0700}
+ {449600400 28800 1 +0800}
+ {465332400 25200 0 +0700}
+ {481057200 28800 1 +0800}
+ {496782000 25200 0 +0700}
+ {512506800 28800 1 +0800}
+ {528231600 25200 0 +0700}
+ {543956400 28800 1 +0800}
+ {559681200 25200 0 +0700}
+ {575406000 28800 1 +0800}
+ {591130800 25200 0 +0700}
+ {606855600 28800 1 +0800}
+ {622580400 25200 0 +0700}
+ {638305200 28800 1 +0800}
+ {654634800 25200 0 +0700}
+ {670359600 21600 0 +0600}
+ {670363200 25200 1 +0700}
+ {686088000 21600 0 +0600}
+ {695764800 25200 0 +0700}
+ {701809200 28800 1 +0800}
+ {717534000 25200 0 +0700}
+ {733258800 28800 1 +0800}
+ {748983600 25200 0 +0700}
+ {764708400 28800 1 +0800}
+ {780433200 25200 0 +0700}
+ {796158000 28800 1 +0800}
+ {811882800 25200 0 +0700}
+ {828212400 28800 1 +0800}
+ {846356400 25200 0 +0700}
+ {859662000 28800 1 +0800}
+ {877806000 25200 0 +0700}
+ {891111600 28800 1 +0800}
+ {909255600 25200 0 +0700}
+ {922561200 28800 1 +0800}
+ {941310000 25200 0 +0700}
+ {954010800 28800 1 +0800}
+ {972759600 25200 0 +0700}
+ {985460400 28800 1 +0800}
+ {1004209200 25200 0 +0700}
+ {1017514800 28800 1 +0800}
+ {1035658800 25200 0 +0700}
+ {1048964400 28800 1 +0800}
+ {1067108400 25200 0 +0700}
+ {1080414000 28800 1 +0800}
+ {1099162800 25200 0 +0700}
+ {1111863600 28800 1 +0800}
+ {1130612400 25200 0 +0700}
+ {1143313200 28800 1 +0800}
+ {1162062000 25200 0 +0700}
+ {1174762800 28800 1 +0800}
+ {1193511600 25200 0 +0700}
+ {1206817200 28800 1 +0800}
+ {1224961200 25200 0 +0700}
+ {1238266800 28800 1 +0800}
+ {1256410800 25200 0 +0700}
+ {1269716400 28800 1 +0800}
+ {1288465200 25200 0 +0700}
+ {1301166000 28800 0 +0800}
+ {1414260000 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Kuching b/library/tzdata/Asia/Kuching
index e5dc1b7..0225015 100644
--- a/library/tzdata/Asia/Kuching
+++ b/library/tzdata/Asia/Kuching
@@ -3,21 +3,21 @@
set TZData(:Asia/Kuching) {
{-9223372036854775808 26480 0 LMT}
{-1383463280 27000 0 +0730}
- {-1167636600 28800 0 +08}
- {-1082448000 30000 1 +08}
- {-1074586800 28800 0 +08}
- {-1050825600 30000 1 +08}
- {-1042964400 28800 0 +08}
- {-1019289600 30000 1 +08}
- {-1011428400 28800 0 +08}
- {-987753600 30000 1 +08}
- {-979892400 28800 0 +08}
- {-956217600 30000 1 +08}
- {-948356400 28800 0 +08}
- {-924595200 30000 1 +08}
- {-916734000 28800 0 +08}
- {-893059200 30000 1 +08}
- {-885198000 28800 0 +08}
- {-879667200 32400 0 +09}
- {-767005200 28800 0 +08}
+ {-1167636600 28800 0 +0800}
+ {-1082448000 30000 1 +0820}
+ {-1074586800 28800 0 +0800}
+ {-1050825600 30000 1 +0820}
+ {-1042964400 28800 0 +0800}
+ {-1019289600 30000 1 +0820}
+ {-1011428400 28800 0 +0800}
+ {-987753600 30000 1 +0820}
+ {-979892400 28800 0 +0800}
+ {-956217600 30000 1 +0820}
+ {-948356400 28800 0 +0800}
+ {-924595200 30000 1 +0820}
+ {-916734000 28800 0 +0800}
+ {-893059200 30000 1 +0820}
+ {-885198000 28800 0 +0800}
+ {-879667200 32400 0 +0900}
+ {-767005200 28800 0 +0800}
}
diff --git a/library/tzdata/Asia/Macau b/library/tzdata/Asia/Macau
index cbafd0e..cf9eb68 100644
--- a/library/tzdata/Asia/Macau
+++ b/library/tzdata/Asia/Macau
@@ -3,11 +3,11 @@
set TZData(:Asia/Macau) {
{-9223372036854775808 27250 0 LMT}
{-2056692850 28800 0 CST}
- {-884509200 32400 0 +09}
- {-873280800 36000 1 +09}
- {-855918000 32400 0 +09}
- {-841744800 36000 1 +09}
- {-828529200 32400 0 +10}
+ {-884509200 32400 0 +0900}
+ {-873280800 36000 1 +1000}
+ {-855918000 32400 0 +0900}
+ {-841744800 36000 1 +1000}
+ {-828529200 32400 0 +0900}
{-765363600 28800 0 CT}
{-747046800 32400 1 CDT}
{-733827600 28800 0 CST}
diff --git a/library/tzdata/Asia/Magadan b/library/tzdata/Asia/Magadan
index 0626899..c99c78a 100644
--- a/library/tzdata/Asia/Magadan
+++ b/library/tzdata/Asia/Magadan
@@ -2,71 +2,71 @@
set TZData(:Asia/Magadan) {
{-9223372036854775808 36192 0 LMT}
- {-1441188192 36000 0 +10}
- {-1247565600 39600 0 +12}
- {354891600 43200 1 +12}
- {370699200 39600 0 +11}
- {386427600 43200 1 +12}
- {402235200 39600 0 +11}
- {417963600 43200 1 +12}
- {433771200 39600 0 +11}
- {449586000 43200 1 +12}
- {465318000 39600 0 +11}
- {481042800 43200 1 +12}
- {496767600 39600 0 +11}
- {512492400 43200 1 +12}
- {528217200 39600 0 +11}
- {543942000 43200 1 +12}
- {559666800 39600 0 +11}
- {575391600 43200 1 +12}
- {591116400 39600 0 +11}
- {606841200 43200 1 +12}
- {622566000 39600 0 +11}
- {638290800 43200 1 +12}
- {654620400 39600 0 +11}
- {670345200 36000 0 +11}
- {670348800 39600 1 +11}
- {686073600 36000 0 +10}
- {695750400 39600 0 +12}
- {701794800 43200 1 +12}
- {717519600 39600 0 +11}
- {733244400 43200 1 +12}
- {748969200 39600 0 +11}
- {764694000 43200 1 +12}
- {780418800 39600 0 +11}
- {796143600 43200 1 +12}
- {811868400 39600 0 +11}
- {828198000 43200 1 +12}
- {846342000 39600 0 +11}
- {859647600 43200 1 +12}
- {877791600 39600 0 +11}
- {891097200 43200 1 +12}
- {909241200 39600 0 +11}
- {922546800 43200 1 +12}
- {941295600 39600 0 +11}
- {953996400 43200 1 +12}
- {972745200 39600 0 +11}
- {985446000 43200 1 +12}
- {1004194800 39600 0 +11}
- {1017500400 43200 1 +12}
- {1035644400 39600 0 +11}
- {1048950000 43200 1 +12}
- {1067094000 39600 0 +11}
- {1080399600 43200 1 +12}
- {1099148400 39600 0 +11}
- {1111849200 43200 1 +12}
- {1130598000 39600 0 +11}
- {1143298800 43200 1 +12}
- {1162047600 39600 0 +11}
- {1174748400 43200 1 +12}
- {1193497200 39600 0 +11}
- {1206802800 43200 1 +12}
- {1224946800 39600 0 +11}
- {1238252400 43200 1 +12}
- {1256396400 39600 0 +11}
- {1269702000 43200 1 +12}
- {1288450800 39600 0 +11}
- {1301151600 43200 0 +12}
- {1414245600 36000 0 +10}
- {1461427200 39600 0 +11}
+ {-1441188192 36000 0 +1000}
+ {-1247565600 39600 0 +1100}
+ {354891600 43200 1 +1200}
+ {370699200 39600 0 +1100}
+ {386427600 43200 1 +1200}
+ {402235200 39600 0 +1100}
+ {417963600 43200 1 +1200}
+ {433771200 39600 0 +1100}
+ {449586000 43200 1 +1200}
+ {465318000 39600 0 +1100}
+ {481042800 43200 1 +1200}
+ {496767600 39600 0 +1100}
+ {512492400 43200 1 +1200}
+ {528217200 39600 0 +1100}
+ {543942000 43200 1 +1200}
+ {559666800 39600 0 +1100}
+ {575391600 43200 1 +1200}
+ {591116400 39600 0 +1100}
+ {606841200 43200 1 +1200}
+ {622566000 39600 0 +1100}
+ {638290800 43200 1 +1200}
+ {654620400 39600 0 +1100}
+ {670345200 36000 0 +1000}
+ {670348800 39600 1 +1100}
+ {686073600 36000 0 +1000}
+ {695750400 39600 0 +1100}
+ {701794800 43200 1 +1200}
+ {717519600 39600 0 +1100}
+ {733244400 43200 1 +1200}
+ {748969200 39600 0 +1100}
+ {764694000 43200 1 +1200}
+ {780418800 39600 0 +1100}
+ {796143600 43200 1 +1200}
+ {811868400 39600 0 +1100}
+ {828198000 43200 1 +1200}
+ {846342000 39600 0 +1100}
+ {859647600 43200 1 +1200}
+ {877791600 39600 0 +1100}
+ {891097200 43200 1 +1200}
+ {909241200 39600 0 +1100}
+ {922546800 43200 1 +1200}
+ {941295600 39600 0 +1100}
+ {953996400 43200 1 +1200}
+ {972745200 39600 0 +1100}
+ {985446000 43200 1 +1200}
+ {1004194800 39600 0 +1100}
+ {1017500400 43200 1 +1200}
+ {1035644400 39600 0 +1100}
+ {1048950000 43200 1 +1200}
+ {1067094000 39600 0 +1100}
+ {1080399600 43200 1 +1200}
+ {1099148400 39600 0 +1100}
+ {1111849200 43200 1 +1200}
+ {1130598000 39600 0 +1100}
+ {1143298800 43200 1 +1200}
+ {1162047600 39600 0 +1100}
+ {1174748400 43200 1 +1200}
+ {1193497200 39600 0 +1100}
+ {1206802800 43200 1 +1200}
+ {1224946800 39600 0 +1100}
+ {1238252400 43200 1 +1200}
+ {1256396400 39600 0 +1100}
+ {1269702000 43200 1 +1200}
+ {1288450800 39600 0 +1100}
+ {1301151600 43200 0 +1200}
+ {1414245600 36000 0 +1000}
+ {1461427200 39600 0 +1100}
}
diff --git a/library/tzdata/Asia/Makassar b/library/tzdata/Asia/Makassar
index 1be5c59..0ef0d29 100644
--- a/library/tzdata/Asia/Makassar
+++ b/library/tzdata/Asia/Makassar
@@ -3,7 +3,7 @@
set TZData(:Asia/Makassar) {
{-9223372036854775808 28656 0 LMT}
{-1577951856 28656 0 MMT}
- {-1172908656 28800 0 +08}
- {-880272000 32400 0 +09}
+ {-1172908656 28800 0 +0800}
+ {-880272000 32400 0 +0900}
{-766054800 28800 0 WITA}
}
diff --git a/library/tzdata/Asia/Manila b/library/tzdata/Asia/Manila
index 6eb1db3..cdb5909 100644
--- a/library/tzdata/Asia/Manila
+++ b/library/tzdata/Asia/Manila
@@ -1,15 +1,19 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Asia/Manila) {
- {-9223372036854775808 -57360 0 LMT}
- {-3944621040 29040 0 LMT}
- {-2229321840 28800 0 PST}
+ {-9223372036854775808 -57368 0 LMT}
+ {-3944621032 29032 0 LMT}
+ {-2219083200 28800 0 PST}
{-1046678400 32400 1 PDT}
- {-1038733200 28800 0 PST}
- {-873273600 32400 0 JST}
- {-794221200 28800 0 PST}
+ {-1040115600 28800 0 PST}
+ {-885024000 32400 1 PDT}
+ {-880016400 32400 0 JST}
+ {-783594000 28800 0 PST}
+ {-760089600 28800 0 PST}
{-496224000 32400 1 PDT}
- {-489315600 28800 0 PST}
- {259344000 32400 1 PDT}
- {275151600 28800 0 PST}
+ {-491562000 28800 0 PST}
+ {228326400 32400 1 PDT}
+ {243702000 28800 0 PST}
+ {643219200 32400 1 PDT}
+ {649177200 28800 0 PST}
}
diff --git a/library/tzdata/Asia/Novokuznetsk b/library/tzdata/Asia/Novokuznetsk
index a43a984..ae9cb70 100644
--- a/library/tzdata/Asia/Novokuznetsk
+++ b/library/tzdata/Asia/Novokuznetsk
@@ -2,70 +2,70 @@
set TZData(:Asia/Novokuznetsk) {
{-9223372036854775808 20928 0 LMT}
- {-1441259328 21600 0 +06}
- {-1247551200 25200 0 +08}
- {354906000 28800 1 +08}
- {370713600 25200 0 +07}
- {386442000 28800 1 +08}
- {402249600 25200 0 +07}
- {417978000 28800 1 +08}
- {433785600 25200 0 +07}
- {449600400 28800 1 +08}
- {465332400 25200 0 +07}
- {481057200 28800 1 +08}
- {496782000 25200 0 +07}
- {512506800 28800 1 +08}
- {528231600 25200 0 +07}
- {543956400 28800 1 +08}
- {559681200 25200 0 +07}
- {575406000 28800 1 +08}
- {591130800 25200 0 +07}
- {606855600 28800 1 +08}
- {622580400 25200 0 +07}
- {638305200 28800 1 +08}
- {654634800 25200 0 +07}
- {670359600 21600 0 +07}
- {670363200 25200 1 +07}
- {686088000 21600 0 +06}
- {695764800 25200 0 +08}
- {701809200 28800 1 +08}
- {717534000 25200 0 +07}
- {733258800 28800 1 +08}
- {748983600 25200 0 +07}
- {764708400 28800 1 +08}
- {780433200 25200 0 +07}
- {796158000 28800 1 +08}
- {811882800 25200 0 +07}
- {828212400 28800 1 +08}
- {846356400 25200 0 +07}
- {859662000 28800 1 +08}
- {877806000 25200 0 +07}
- {891111600 28800 1 +08}
- {909255600 25200 0 +07}
- {922561200 28800 1 +08}
- {941310000 25200 0 +07}
- {954010800 28800 1 +08}
- {972759600 25200 0 +07}
- {985460400 28800 1 +08}
- {1004209200 25200 0 +07}
- {1017514800 28800 1 +08}
- {1035658800 25200 0 +07}
- {1048964400 28800 1 +08}
- {1067108400 25200 0 +07}
- {1080414000 28800 1 +08}
- {1099162800 25200 0 +07}
- {1111863600 28800 1 +08}
- {1130612400 25200 0 +07}
- {1143313200 28800 1 +08}
- {1162062000 25200 0 +07}
- {1174762800 28800 1 +08}
- {1193511600 25200 0 +07}
- {1206817200 28800 1 +08}
- {1224961200 25200 0 +07}
- {1238266800 28800 1 +08}
- {1256410800 25200 0 +07}
- {1269716400 21600 0 +07}
- {1269720000 25200 1 +07}
- {1288468800 21600 0 +06}
- {1301169600 25200 0 +07}
+ {-1441259328 21600 0 +0600}
+ {-1247551200 25200 0 +0700}
+ {354906000 28800 1 +0800}
+ {370713600 25200 0 +0700}
+ {386442000 28800 1 +0800}
+ {402249600 25200 0 +0700}
+ {417978000 28800 1 +0800}
+ {433785600 25200 0 +0700}
+ {449600400 28800 1 +0800}
+ {465332400 25200 0 +0700}
+ {481057200 28800 1 +0800}
+ {496782000 25200 0 +0700}
+ {512506800 28800 1 +0800}
+ {528231600 25200 0 +0700}
+ {543956400 28800 1 +0800}
+ {559681200 25200 0 +0700}
+ {575406000 28800 1 +0800}
+ {591130800 25200 0 +0700}
+ {606855600 28800 1 +0800}
+ {622580400 25200 0 +0700}
+ {638305200 28800 1 +0800}
+ {654634800 25200 0 +0700}
+ {670359600 21600 0 +0600}
+ {670363200 25200 1 +0700}
+ {686088000 21600 0 +0600}
+ {695764800 25200 0 +0700}
+ {701809200 28800 1 +0800}
+ {717534000 25200 0 +0700}
+ {733258800 28800 1 +0800}
+ {748983600 25200 0 +0700}
+ {764708400 28800 1 +0800}
+ {780433200 25200 0 +0700}
+ {796158000 28800 1 +0800}
+ {811882800 25200 0 +0700}
+ {828212400 28800 1 +0800}
+ {846356400 25200 0 +0700}
+ {859662000 28800 1 +0800}
+ {877806000 25200 0 +0700}
+ {891111600 28800 1 +0800}
+ {909255600 25200 0 +0700}
+ {922561200 28800 1 +0800}
+ {941310000 25200 0 +0700}
+ {954010800 28800 1 +0800}
+ {972759600 25200 0 +0700}
+ {985460400 28800 1 +0800}
+ {1004209200 25200 0 +0700}
+ {1017514800 28800 1 +0800}
+ {1035658800 25200 0 +0700}
+ {1048964400 28800 1 +0800}
+ {1067108400 25200 0 +0700}
+ {1080414000 28800 1 +0800}
+ {1099162800 25200 0 +0700}
+ {1111863600 28800 1 +0800}
+ {1130612400 25200 0 +0700}
+ {1143313200 28800 1 +0800}
+ {1162062000 25200 0 +0700}
+ {1174762800 28800 1 +0800}
+ {1193511600 25200 0 +0700}
+ {1206817200 28800 1 +0800}
+ {1224961200 25200 0 +0700}
+ {1238266800 28800 1 +0800}
+ {1256410800 25200 0 +0700}
+ {1269716400 21600 0 +0600}
+ {1269720000 25200 1 +0700}
+ {1288468800 21600 0 +0600}
+ {1301169600 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Novosibirsk b/library/tzdata/Asia/Novosibirsk
index 21f5c00..83fde42 100644
--- a/library/tzdata/Asia/Novosibirsk
+++ b/library/tzdata/Asia/Novosibirsk
@@ -2,72 +2,72 @@
set TZData(:Asia/Novosibirsk) {
{-9223372036854775808 19900 0 LMT}
- {-1579476700 21600 0 +06}
- {-1247551200 25200 0 +08}
- {354906000 28800 1 +08}
- {370713600 25200 0 +07}
- {386442000 28800 1 +08}
- {402249600 25200 0 +07}
- {417978000 28800 1 +08}
- {433785600 25200 0 +07}
- {449600400 28800 1 +08}
- {465332400 25200 0 +07}
- {481057200 28800 1 +08}
- {496782000 25200 0 +07}
- {512506800 28800 1 +08}
- {528231600 25200 0 +07}
- {543956400 28800 1 +08}
- {559681200 25200 0 +07}
- {575406000 28800 1 +08}
- {591130800 25200 0 +07}
- {606855600 28800 1 +08}
- {622580400 25200 0 +07}
- {638305200 28800 1 +08}
- {654634800 25200 0 +07}
- {670359600 21600 0 +07}
- {670363200 25200 1 +07}
- {686088000 21600 0 +06}
- {695764800 25200 0 +08}
- {701809200 28800 1 +08}
- {717534000 25200 0 +07}
- {733258800 28800 1 +08}
- {738090000 25200 0 +07}
- {748987200 21600 0 +06}
- {764712000 25200 1 +07}
- {780436800 21600 0 +06}
- {796161600 25200 1 +07}
- {811886400 21600 0 +06}
- {828216000 25200 1 +07}
- {846360000 21600 0 +06}
- {859665600 25200 1 +07}
- {877809600 21600 0 +06}
- {891115200 25200 1 +07}
- {909259200 21600 0 +06}
- {922564800 25200 1 +07}
- {941313600 21600 0 +06}
- {954014400 25200 1 +07}
- {972763200 21600 0 +06}
- {985464000 25200 1 +07}
- {1004212800 21600 0 +06}
- {1017518400 25200 1 +07}
- {1035662400 21600 0 +06}
- {1048968000 25200 1 +07}
- {1067112000 21600 0 +06}
- {1080417600 25200 1 +07}
- {1099166400 21600 0 +06}
- {1111867200 25200 1 +07}
- {1130616000 21600 0 +06}
- {1143316800 25200 1 +07}
- {1162065600 21600 0 +06}
- {1174766400 25200 1 +07}
- {1193515200 21600 0 +06}
- {1206820800 25200 1 +07}
- {1224964800 21600 0 +06}
- {1238270400 25200 1 +07}
- {1256414400 21600 0 +06}
- {1269720000 25200 1 +07}
- {1288468800 21600 0 +06}
- {1301169600 25200 0 +07}
- {1414263600 21600 0 +06}
- {1469304000 25200 0 +07}
+ {-1579476700 21600 0 +0600}
+ {-1247551200 25200 0 +0700}
+ {354906000 28800 1 +0800}
+ {370713600 25200 0 +0700}
+ {386442000 28800 1 +0800}
+ {402249600 25200 0 +0700}
+ {417978000 28800 1 +0800}
+ {433785600 25200 0 +0700}
+ {449600400 28800 1 +0800}
+ {465332400 25200 0 +0700}
+ {481057200 28800 1 +0800}
+ {496782000 25200 0 +0700}
+ {512506800 28800 1 +0800}
+ {528231600 25200 0 +0700}
+ {543956400 28800 1 +0800}
+ {559681200 25200 0 +0700}
+ {575406000 28800 1 +0800}
+ {591130800 25200 0 +0700}
+ {606855600 28800 1 +0800}
+ {622580400 25200 0 +0700}
+ {638305200 28800 1 +0800}
+ {654634800 25200 0 +0700}
+ {670359600 21600 0 +0600}
+ {670363200 25200 1 +0700}
+ {686088000 21600 0 +0600}
+ {695764800 25200 0 +0700}
+ {701809200 28800 1 +0800}
+ {717534000 25200 0 +0700}
+ {733258800 28800 1 +0800}
+ {738090000 25200 0 +0700}
+ {748987200 21600 0 +0600}
+ {764712000 25200 1 +0700}
+ {780436800 21600 0 +0600}
+ {796161600 25200 1 +0700}
+ {811886400 21600 0 +0600}
+ {828216000 25200 1 +0700}
+ {846360000 21600 0 +0600}
+ {859665600 25200 1 +0700}
+ {877809600 21600 0 +0600}
+ {891115200 25200 1 +0700}
+ {909259200 21600 0 +0600}
+ {922564800 25200 1 +0700}
+ {941313600 21600 0 +0600}
+ {954014400 25200 1 +0700}
+ {972763200 21600 0 +0600}
+ {985464000 25200 1 +0700}
+ {1004212800 21600 0 +0600}
+ {1017518400 25200 1 +0700}
+ {1035662400 21600 0 +0600}
+ {1048968000 25200 1 +0700}
+ {1067112000 21600 0 +0600}
+ {1080417600 25200 1 +0700}
+ {1099166400 21600 0 +0600}
+ {1111867200 25200 1 +0700}
+ {1130616000 21600 0 +0600}
+ {1143316800 25200 1 +0700}
+ {1162065600 21600 0 +0600}
+ {1174766400 25200 1 +0700}
+ {1193515200 21600 0 +0600}
+ {1206820800 25200 1 +0700}
+ {1224964800 21600 0 +0600}
+ {1238270400 25200 1 +0700}
+ {1256414400 21600 0 +0600}
+ {1269720000 25200 1 +0700}
+ {1288468800 21600 0 +0600}
+ {1301169600 25200 0 +0700}
+ {1414263600 21600 0 +0600}
+ {1469304000 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Omsk b/library/tzdata/Asia/Omsk
index 74163d5..c4fa198 100644
--- a/library/tzdata/Asia/Omsk
+++ b/library/tzdata/Asia/Omsk
@@ -2,70 +2,70 @@
set TZData(:Asia/Omsk) {
{-9223372036854775808 17610 0 LMT}
- {-1582088010 18000 0 +05}
- {-1247547600 21600 0 +07}
- {354909600 25200 1 +07}
- {370717200 21600 0 +06}
- {386445600 25200 1 +07}
- {402253200 21600 0 +06}
- {417981600 25200 1 +07}
- {433789200 21600 0 +06}
- {449604000 25200 1 +07}
- {465336000 21600 0 +06}
- {481060800 25200 1 +07}
- {496785600 21600 0 +06}
- {512510400 25200 1 +07}
- {528235200 21600 0 +06}
- {543960000 25200 1 +07}
- {559684800 21600 0 +06}
- {575409600 25200 1 +07}
- {591134400 21600 0 +06}
- {606859200 25200 1 +07}
- {622584000 21600 0 +06}
- {638308800 25200 1 +07}
- {654638400 21600 0 +06}
- {670363200 18000 0 +06}
- {670366800 21600 1 +06}
- {686091600 18000 0 +05}
- {695768400 21600 0 +07}
- {701812800 25200 1 +07}
- {717537600 21600 0 +06}
- {733262400 25200 1 +07}
- {748987200 21600 0 +06}
- {764712000 25200 1 +07}
- {780436800 21600 0 +06}
- {796161600 25200 1 +07}
- {811886400 21600 0 +06}
- {828216000 25200 1 +07}
- {846360000 21600 0 +06}
- {859665600 25200 1 +07}
- {877809600 21600 0 +06}
- {891115200 25200 1 +07}
- {909259200 21600 0 +06}
- {922564800 25200 1 +07}
- {941313600 21600 0 +06}
- {954014400 25200 1 +07}
- {972763200 21600 0 +06}
- {985464000 25200 1 +07}
- {1004212800 21600 0 +06}
- {1017518400 25200 1 +07}
- {1035662400 21600 0 +06}
- {1048968000 25200 1 +07}
- {1067112000 21600 0 +06}
- {1080417600 25200 1 +07}
- {1099166400 21600 0 +06}
- {1111867200 25200 1 +07}
- {1130616000 21600 0 +06}
- {1143316800 25200 1 +07}
- {1162065600 21600 0 +06}
- {1174766400 25200 1 +07}
- {1193515200 21600 0 +06}
- {1206820800 25200 1 +07}
- {1224964800 21600 0 +06}
- {1238270400 25200 1 +07}
- {1256414400 21600 0 +06}
- {1269720000 25200 1 +07}
- {1288468800 21600 0 +06}
- {1301169600 25200 0 +07}
- {1414263600 21600 0 +06}
+ {-1582088010 18000 0 +0500}
+ {-1247547600 21600 0 +0600}
+ {354909600 25200 1 +0700}
+ {370717200 21600 0 +0600}
+ {386445600 25200 1 +0700}
+ {402253200 21600 0 +0600}
+ {417981600 25200 1 +0700}
+ {433789200 21600 0 +0600}
+ {449604000 25200 1 +0700}
+ {465336000 21600 0 +0600}
+ {481060800 25200 1 +0700}
+ {496785600 21600 0 +0600}
+ {512510400 25200 1 +0700}
+ {528235200 21600 0 +0600}
+ {543960000 25200 1 +0700}
+ {559684800 21600 0 +0600}
+ {575409600 25200 1 +0700}
+ {591134400 21600 0 +0600}
+ {606859200 25200 1 +0700}
+ {622584000 21600 0 +0600}
+ {638308800 25200 1 +0700}
+ {654638400 21600 0 +0600}
+ {670363200 18000 0 +0500}
+ {670366800 21600 1 +0600}
+ {686091600 18000 0 +0500}
+ {695768400 21600 0 +0600}
+ {701812800 25200 1 +0700}
+ {717537600 21600 0 +0600}
+ {733262400 25200 1 +0700}
+ {748987200 21600 0 +0600}
+ {764712000 25200 1 +0700}
+ {780436800 21600 0 +0600}
+ {796161600 25200 1 +0700}
+ {811886400 21600 0 +0600}
+ {828216000 25200 1 +0700}
+ {846360000 21600 0 +0600}
+ {859665600 25200 1 +0700}
+ {877809600 21600 0 +0600}
+ {891115200 25200 1 +0700}
+ {909259200 21600 0 +0600}
+ {922564800 25200 1 +0700}
+ {941313600 21600 0 +0600}
+ {954014400 25200 1 +0700}
+ {972763200 21600 0 +0600}
+ {985464000 25200 1 +0700}
+ {1004212800 21600 0 +0600}
+ {1017518400 25200 1 +0700}
+ {1035662400 21600 0 +0600}
+ {1048968000 25200 1 +0700}
+ {1067112000 21600 0 +0600}
+ {1080417600 25200 1 +0700}
+ {1099166400 21600 0 +0600}
+ {1111867200 25200 1 +0700}
+ {1130616000 21600 0 +0600}
+ {1143316800 25200 1 +0700}
+ {1162065600 21600 0 +0600}
+ {1174766400 25200 1 +0700}
+ {1193515200 21600 0 +0600}
+ {1206820800 25200 1 +0700}
+ {1224964800 21600 0 +0600}
+ {1238270400 25200 1 +0700}
+ {1256414400 21600 0 +0600}
+ {1269720000 25200 1 +0700}
+ {1288468800 21600 0 +0600}
+ {1301169600 25200 0 +0700}
+ {1414263600 21600 0 +0600}
}
diff --git a/library/tzdata/Asia/Oral b/library/tzdata/Asia/Oral
index e781b60..2e799ab 100644
--- a/library/tzdata/Asia/Oral
+++ b/library/tzdata/Asia/Oral
@@ -2,57 +2,57 @@
set TZData(:Asia/Oral) {
{-9223372036854775808 12324 0 LMT}
- {-1441164324 10800 0 +03}
- {-1247540400 18000 0 +05}
- {354913200 21600 1 +06}
- {370720800 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 14400 0 +04}
- {606866400 18000 1 +04}
- {622591200 14400 0 +04}
- {638316000 18000 1 +04}
- {654645600 14400 0 +04}
- {670370400 18000 1 +04}
- {686095200 14400 0 +04}
- {701816400 14400 0 +04}
- {701820000 18000 1 +04}
- {717544800 14400 0 +04}
- {733269600 18000 1 +04}
- {748994400 14400 0 +04}
- {764719200 18000 1 +04}
- {780444000 14400 0 +04}
- {796168800 18000 1 +04}
- {811893600 14400 0 +04}
- {828223200 18000 1 +04}
- {846367200 14400 0 +04}
- {859672800 18000 1 +04}
- {877816800 14400 0 +04}
- {891122400 18000 1 +04}
- {909266400 14400 0 +04}
- {922572000 18000 1 +04}
- {941320800 14400 0 +04}
- {954021600 18000 1 +04}
- {972770400 14400 0 +04}
- {985471200 18000 1 +04}
- {1004220000 14400 0 +04}
- {1017525600 18000 1 +04}
- {1035669600 14400 0 +04}
- {1048975200 18000 1 +04}
- {1067119200 14400 0 +04}
- {1080424800 18000 1 +04}
- {1099173600 18000 0 +05}
+ {-1441164324 10800 0 +0300}
+ {-1247540400 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 14400 0 +0400}
+ {606866400 18000 1 +0500}
+ {622591200 14400 0 +0400}
+ {638316000 18000 1 +0500}
+ {654645600 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {701816400 14400 0 +0400}
+ {701820000 18000 1 +0500}
+ {717544800 14400 0 +0400}
+ {733269600 18000 1 +0500}
+ {748994400 14400 0 +0400}
+ {764719200 18000 1 +0500}
+ {780444000 14400 0 +0400}
+ {796168800 18000 1 +0500}
+ {811893600 14400 0 +0400}
+ {828223200 18000 1 +0500}
+ {846367200 14400 0 +0400}
+ {859672800 18000 1 +0500}
+ {877816800 14400 0 +0400}
+ {891122400 18000 1 +0500}
+ {909266400 14400 0 +0400}
+ {922572000 18000 1 +0500}
+ {941320800 14400 0 +0400}
+ {954021600 18000 1 +0500}
+ {972770400 14400 0 +0400}
+ {985471200 18000 1 +0500}
+ {1004220000 14400 0 +0400}
+ {1017525600 18000 1 +0500}
+ {1035669600 14400 0 +0400}
+ {1048975200 18000 1 +0500}
+ {1067119200 14400 0 +0400}
+ {1080424800 18000 1 +0500}
+ {1099173600 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Pontianak b/library/tzdata/Asia/Pontianak
index ed59e9d..23627ec 100644
--- a/library/tzdata/Asia/Pontianak
+++ b/library/tzdata/Asia/Pontianak
@@ -4,9 +4,9 @@ set TZData(:Asia/Pontianak) {
{-9223372036854775808 26240 0 LMT}
{-1946186240 26240 0 PMT}
{-1172906240 27000 0 +0730}
- {-881220600 32400 0 +09}
+ {-881220600 32400 0 +0900}
{-766054800 27000 0 +0730}
- {-683883000 28800 0 +08}
+ {-683883000 28800 0 +0800}
{-620812800 27000 0 +0730}
{-189415800 28800 0 WITA}
{567964800 25200 0 WIB}
diff --git a/library/tzdata/Asia/Qatar b/library/tzdata/Asia/Qatar
index 10b4f6d..7eef237 100644
--- a/library/tzdata/Asia/Qatar
+++ b/library/tzdata/Asia/Qatar
@@ -2,6 +2,6 @@
set TZData(:Asia/Qatar) {
{-9223372036854775808 12368 0 LMT}
- {-1577935568 14400 0 +04}
- {76190400 10800 0 +03}
+ {-1577935568 14400 0 +0400}
+ {76190400 10800 0 +0300}
}
diff --git a/library/tzdata/Asia/Qostanay b/library/tzdata/Asia/Qostanay
index 46e3c8b..ada96f2 100644
--- a/library/tzdata/Asia/Qostanay
+++ b/library/tzdata/Asia/Qostanay
@@ -2,57 +2,58 @@
set TZData(:Asia/Qostanay) {
{-9223372036854775808 15268 0 LMT}
- {-1441167268 14400 0 +04}
- {-1247544000 18000 0 +05}
- {354913200 21600 1 +06}
- {370720800 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 14400 0 +04}
- {670370400 18000 1 +04}
- {686095200 14400 0 +04}
- {695772000 18000 0 +05}
- {701816400 21600 1 +05}
- {717541200 18000 0 +05}
- {733266000 21600 1 +05}
- {748990800 18000 0 +05}
- {764715600 21600 1 +05}
- {780440400 18000 0 +05}
- {796165200 21600 1 +05}
- {811890000 18000 0 +05}
- {828219600 21600 1 +05}
- {846363600 18000 0 +05}
- {859669200 21600 1 +05}
- {877813200 18000 0 +05}
- {891118800 21600 1 +05}
- {909262800 18000 0 +05}
- {922568400 21600 1 +05}
- {941317200 18000 0 +05}
- {954018000 21600 1 +05}
- {972766800 18000 0 +05}
- {985467600 21600 1 +05}
- {1004216400 18000 0 +05}
- {1017522000 21600 1 +05}
- {1035666000 18000 0 +05}
- {1048971600 21600 1 +05}
- {1067115600 18000 0 +05}
- {1080421200 21600 1 +05}
- {1099170000 21600 0 +06}
+ {-1441167268 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {695772000 18000 0 +0500}
+ {701816400 21600 1 +0600}
+ {717541200 18000 0 +0500}
+ {733266000 21600 1 +0600}
+ {748990800 18000 0 +0500}
+ {764715600 21600 1 +0600}
+ {780440400 18000 0 +0500}
+ {796165200 21600 1 +0600}
+ {811890000 18000 0 +0500}
+ {828219600 21600 1 +0600}
+ {846363600 18000 0 +0500}
+ {859669200 21600 1 +0600}
+ {877813200 18000 0 +0500}
+ {891118800 21600 1 +0600}
+ {909262800 18000 0 +0500}
+ {922568400 21600 1 +0600}
+ {941317200 18000 0 +0500}
+ {954018000 21600 1 +0600}
+ {972766800 18000 0 +0500}
+ {985467600 21600 1 +0600}
+ {1004216400 18000 0 +0500}
+ {1017522000 21600 1 +0600}
+ {1035666000 18000 0 +0500}
+ {1048971600 21600 1 +0600}
+ {1067115600 18000 0 +0500}
+ {1080421200 21600 1 +0600}
+ {1099170000 21600 0 +0600}
+ {1709229600 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Qyzylorda b/library/tzdata/Asia/Qyzylorda
index c54bdd0..f6ebf38 100644
--- a/library/tzdata/Asia/Qyzylorda
+++ b/library/tzdata/Asia/Qyzylorda
@@ -2,57 +2,57 @@
set TZData(:Asia/Qyzylorda) {
{-9223372036854775808 15712 0 LMT}
- {-1441167712 14400 0 +04}
- {-1247544000 18000 0 +05}
- {354913200 21600 1 +06}
- {370720800 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 14400 0 +04}
- {670370400 18000 1 +04}
- {701812800 18000 0 +05}
- {701816400 21600 1 +05}
- {717541200 18000 0 +05}
- {733266000 21600 1 +05}
- {748990800 18000 0 +05}
- {764715600 21600 1 +05}
- {780440400 18000 0 +05}
- {796165200 21600 1 +05}
- {811890000 18000 0 +05}
- {828219600 21600 1 +05}
- {846363600 18000 0 +05}
- {859669200 21600 1 +05}
- {877813200 18000 0 +05}
- {891118800 21600 1 +05}
- {909262800 18000 0 +05}
- {922568400 21600 1 +05}
- {941317200 18000 0 +05}
- {954018000 21600 1 +05}
- {972766800 18000 0 +05}
- {985467600 21600 1 +05}
- {1004216400 18000 0 +05}
- {1017522000 21600 1 +05}
- {1035666000 18000 0 +05}
- {1048971600 21600 1 +05}
- {1067115600 18000 0 +05}
- {1080421200 21600 1 +05}
- {1099170000 21600 0 +06}
- {1545328800 18000 0 +05}
+ {-1441167712 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {701812800 18000 0 +0500}
+ {701816400 21600 1 +0600}
+ {717541200 18000 0 +0500}
+ {733266000 21600 1 +0600}
+ {748990800 18000 0 +0500}
+ {764715600 21600 1 +0600}
+ {780440400 18000 0 +0500}
+ {796165200 21600 1 +0600}
+ {811890000 18000 0 +0500}
+ {828219600 21600 1 +0600}
+ {846363600 18000 0 +0500}
+ {859669200 21600 1 +0600}
+ {877813200 18000 0 +0500}
+ {891118800 21600 1 +0600}
+ {909262800 18000 0 +0500}
+ {922568400 21600 1 +0600}
+ {941317200 18000 0 +0500}
+ {954018000 21600 1 +0600}
+ {972766800 18000 0 +0500}
+ {985467600 21600 1 +0600}
+ {1004216400 18000 0 +0500}
+ {1017522000 21600 1 +0600}
+ {1035666000 18000 0 +0500}
+ {1048971600 21600 1 +0600}
+ {1067115600 18000 0 +0500}
+ {1080421200 21600 1 +0600}
+ {1099170000 21600 0 +0600}
+ {1545328800 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Riyadh b/library/tzdata/Asia/Riyadh
index af5efa8..4a94481 100644
--- a/library/tzdata/Asia/Riyadh
+++ b/library/tzdata/Asia/Riyadh
@@ -2,5 +2,5 @@
set TZData(:Asia/Riyadh) {
{-9223372036854775808 11212 0 LMT}
- {-719636812 10800 0 +03}
+ {-719636812 10800 0 +0300}
}
diff --git a/library/tzdata/Asia/Sakhalin b/library/tzdata/Asia/Sakhalin
index 4ba7c8c..07f7281 100644
--- a/library/tzdata/Asia/Sakhalin
+++ b/library/tzdata/Asia/Sakhalin
@@ -2,72 +2,72 @@
set TZData(:Asia/Sakhalin) {
{-9223372036854775808 34248 0 LMT}
- {-2031039048 32400 0 +09}
- {-768560400 39600 0 +12}
- {354891600 43200 1 +12}
- {370699200 39600 0 +11}
- {386427600 43200 1 +12}
- {402235200 39600 0 +11}
- {417963600 43200 1 +12}
- {433771200 39600 0 +11}
- {449586000 43200 1 +12}
- {465318000 39600 0 +11}
- {481042800 43200 1 +12}
- {496767600 39600 0 +11}
- {512492400 43200 1 +12}
- {528217200 39600 0 +11}
- {543942000 43200 1 +12}
- {559666800 39600 0 +11}
- {575391600 43200 1 +12}
- {591116400 39600 0 +11}
- {606841200 43200 1 +12}
- {622566000 39600 0 +11}
- {638290800 43200 1 +12}
- {654620400 39600 0 +11}
- {670345200 36000 0 +11}
- {670348800 39600 1 +11}
- {686073600 36000 0 +10}
- {695750400 39600 0 +12}
- {701794800 43200 1 +12}
- {717519600 39600 0 +11}
- {733244400 43200 1 +12}
- {748969200 39600 0 +11}
- {764694000 43200 1 +12}
- {780418800 39600 0 +11}
- {796143600 43200 1 +12}
- {811868400 39600 0 +11}
- {828198000 43200 1 +12}
- {846342000 39600 0 +11}
- {859647600 36000 0 +11}
- {859651200 39600 1 +11}
- {877795200 36000 0 +10}
- {891100800 39600 1 +11}
- {909244800 36000 0 +10}
- {922550400 39600 1 +11}
- {941299200 36000 0 +10}
- {954000000 39600 1 +11}
- {972748800 36000 0 +10}
- {985449600 39600 1 +11}
- {1004198400 36000 0 +10}
- {1017504000 39600 1 +11}
- {1035648000 36000 0 +10}
- {1048953600 39600 1 +11}
- {1067097600 36000 0 +10}
- {1080403200 39600 1 +11}
- {1099152000 36000 0 +10}
- {1111852800 39600 1 +11}
- {1130601600 36000 0 +10}
- {1143302400 39600 1 +11}
- {1162051200 36000 0 +10}
- {1174752000 39600 1 +11}
- {1193500800 36000 0 +10}
- {1206806400 39600 1 +11}
- {1224950400 36000 0 +10}
- {1238256000 39600 1 +11}
- {1256400000 36000 0 +10}
- {1269705600 39600 1 +11}
- {1288454400 36000 0 +10}
- {1301155200 39600 0 +11}
- {1414249200 36000 0 +10}
- {1459008000 39600 0 +11}
+ {-2031039048 32400 0 +0900}
+ {-768560400 39600 0 +1100}
+ {354891600 43200 1 +1200}
+ {370699200 39600 0 +1100}
+ {386427600 43200 1 +1200}
+ {402235200 39600 0 +1100}
+ {417963600 43200 1 +1200}
+ {433771200 39600 0 +1100}
+ {449586000 43200 1 +1200}
+ {465318000 39600 0 +1100}
+ {481042800 43200 1 +1200}
+ {496767600 39600 0 +1100}
+ {512492400 43200 1 +1200}
+ {528217200 39600 0 +1100}
+ {543942000 43200 1 +1200}
+ {559666800 39600 0 +1100}
+ {575391600 43200 1 +1200}
+ {591116400 39600 0 +1100}
+ {606841200 43200 1 +1200}
+ {622566000 39600 0 +1100}
+ {638290800 43200 1 +1200}
+ {654620400 39600 0 +1100}
+ {670345200 36000 0 +1000}
+ {670348800 39600 1 +1100}
+ {686073600 36000 0 +1000}
+ {695750400 39600 0 +1100}
+ {701794800 43200 1 +1200}
+ {717519600 39600 0 +1100}
+ {733244400 43200 1 +1200}
+ {748969200 39600 0 +1100}
+ {764694000 43200 1 +1200}
+ {780418800 39600 0 +1100}
+ {796143600 43200 1 +1200}
+ {811868400 39600 0 +1100}
+ {828198000 43200 1 +1200}
+ {846342000 39600 0 +1100}
+ {859647600 36000 0 +1000}
+ {859651200 39600 1 +1100}
+ {877795200 36000 0 +1000}
+ {891100800 39600 1 +1100}
+ {909244800 36000 0 +1000}
+ {922550400 39600 1 +1100}
+ {941299200 36000 0 +1000}
+ {954000000 39600 1 +1100}
+ {972748800 36000 0 +1000}
+ {985449600 39600 1 +1100}
+ {1004198400 36000 0 +1000}
+ {1017504000 39600 1 +1100}
+ {1035648000 36000 0 +1000}
+ {1048953600 39600 1 +1100}
+ {1067097600 36000 0 +1000}
+ {1080403200 39600 1 +1100}
+ {1099152000 36000 0 +1000}
+ {1111852800 39600 1 +1100}
+ {1130601600 36000 0 +1000}
+ {1143302400 39600 1 +1100}
+ {1162051200 36000 0 +1000}
+ {1174752000 39600 1 +1100}
+ {1193500800 36000 0 +1000}
+ {1206806400 39600 1 +1100}
+ {1224950400 36000 0 +1000}
+ {1238256000 39600 1 +1100}
+ {1256400000 36000 0 +1000}
+ {1269705600 39600 1 +1100}
+ {1288454400 36000 0 +1000}
+ {1301155200 39600 0 +1100}
+ {1414249200 36000 0 +1000}
+ {1459008000 39600 0 +1100}
}
diff --git a/library/tzdata/Asia/Samarkand b/library/tzdata/Asia/Samarkand
index 805bab7..ad0cda8 100644
--- a/library/tzdata/Asia/Samarkand
+++ b/library/tzdata/Asia/Samarkand
@@ -2,30 +2,30 @@
set TZData(:Asia/Samarkand) {
{-9223372036854775808 16073 0 LMT}
- {-1441168073 14400 0 +04}
- {-1247544000 18000 0 +05}
- {354913200 21600 1 +06}
- {370720800 21600 0 +06}
- {386445600 18000 0 +05}
- {386449200 21600 1 +05}
- {402256800 18000 0 +05}
- {417985200 21600 1 +05}
- {433792800 18000 0 +05}
- {449607600 21600 1 +05}
- {465339600 18000 0 +05}
- {481064400 21600 1 +05}
- {496789200 18000 0 +05}
- {512514000 21600 1 +05}
- {528238800 18000 0 +05}
- {543963600 21600 1 +05}
- {559688400 18000 0 +05}
- {575413200 21600 1 +05}
- {591138000 18000 0 +05}
- {606862800 21600 1 +05}
- {622587600 18000 0 +05}
- {638312400 21600 1 +05}
- {654642000 18000 0 +05}
- {670366800 21600 1 +05}
- {686091600 18000 0 +05}
- {694206000 18000 0 +05}
+ {-1441168073 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 21600 0 +0600}
+ {386445600 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 21600 1 +0600}
+ {686091600 18000 0 +0500}
+ {694206000 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Singapore b/library/tzdata/Asia/Singapore
index f10eb1f..27b0fa3 100644
--- a/library/tzdata/Asia/Singapore
+++ b/library/tzdata/Asia/Singapore
@@ -3,11 +3,11 @@
set TZData(:Asia/Singapore) {
{-9223372036854775808 24925 0 LMT}
{-2177477725 24925 0 SMT}
- {-2038200925 25200 0 +07}
+ {-2038200925 25200 0 +0700}
{-1167634800 26400 1 +0720}
{-1073028000 26400 0 +0720}
{-894180000 27000 0 +0730}
- {-879665400 32400 0 +09}
+ {-879665400 32400 0 +0900}
{-767005200 27000 0 +0730}
- {378664200 28800 0 +08}
+ {378662400 28800 0 +0800}
}
diff --git a/library/tzdata/Asia/Srednekolymsk b/library/tzdata/Asia/Srednekolymsk
index 1099a4b..108fec7 100644
--- a/library/tzdata/Asia/Srednekolymsk
+++ b/library/tzdata/Asia/Srednekolymsk
@@ -2,70 +2,70 @@
set TZData(:Asia/Srednekolymsk) {
{-9223372036854775808 36892 0 LMT}
- {-1441188892 36000 0 +10}
- {-1247565600 39600 0 +12}
- {354891600 43200 1 +12}
- {370699200 39600 0 +11}
- {386427600 43200 1 +12}
- {402235200 39600 0 +11}
- {417963600 43200 1 +12}
- {433771200 39600 0 +11}
- {449586000 43200 1 +12}
- {465318000 39600 0 +11}
- {481042800 43200 1 +12}
- {496767600 39600 0 +11}
- {512492400 43200 1 +12}
- {528217200 39600 0 +11}
- {543942000 43200 1 +12}
- {559666800 39600 0 +11}
- {575391600 43200 1 +12}
- {591116400 39600 0 +11}
- {606841200 43200 1 +12}
- {622566000 39600 0 +11}
- {638290800 43200 1 +12}
- {654620400 39600 0 +11}
- {670345200 36000 0 +11}
- {670348800 39600 1 +11}
- {686073600 36000 0 +10}
- {695750400 39600 0 +12}
- {701794800 43200 1 +12}
- {717519600 39600 0 +11}
- {733244400 43200 1 +12}
- {748969200 39600 0 +11}
- {764694000 43200 1 +12}
- {780418800 39600 0 +11}
- {796143600 43200 1 +12}
- {811868400 39600 0 +11}
- {828198000 43200 1 +12}
- {846342000 39600 0 +11}
- {859647600 43200 1 +12}
- {877791600 39600 0 +11}
- {891097200 43200 1 +12}
- {909241200 39600 0 +11}
- {922546800 43200 1 +12}
- {941295600 39600 0 +11}
- {953996400 43200 1 +12}
- {972745200 39600 0 +11}
- {985446000 43200 1 +12}
- {1004194800 39600 0 +11}
- {1017500400 43200 1 +12}
- {1035644400 39600 0 +11}
- {1048950000 43200 1 +12}
- {1067094000 39600 0 +11}
- {1080399600 43200 1 +12}
- {1099148400 39600 0 +11}
- {1111849200 43200 1 +12}
- {1130598000 39600 0 +11}
- {1143298800 43200 1 +12}
- {1162047600 39600 0 +11}
- {1174748400 43200 1 +12}
- {1193497200 39600 0 +11}
- {1206802800 43200 1 +12}
- {1224946800 39600 0 +11}
- {1238252400 43200 1 +12}
- {1256396400 39600 0 +11}
- {1269702000 43200 1 +12}
- {1288450800 39600 0 +11}
- {1301151600 43200 0 +12}
- {1414245600 39600 0 +11}
+ {-1441188892 36000 0 +1000}
+ {-1247565600 39600 0 +1100}
+ {354891600 43200 1 +1200}
+ {370699200 39600 0 +1100}
+ {386427600 43200 1 +1200}
+ {402235200 39600 0 +1100}
+ {417963600 43200 1 +1200}
+ {433771200 39600 0 +1100}
+ {449586000 43200 1 +1200}
+ {465318000 39600 0 +1100}
+ {481042800 43200 1 +1200}
+ {496767600 39600 0 +1100}
+ {512492400 43200 1 +1200}
+ {528217200 39600 0 +1100}
+ {543942000 43200 1 +1200}
+ {559666800 39600 0 +1100}
+ {575391600 43200 1 +1200}
+ {591116400 39600 0 +1100}
+ {606841200 43200 1 +1200}
+ {622566000 39600 0 +1100}
+ {638290800 43200 1 +1200}
+ {654620400 39600 0 +1100}
+ {670345200 36000 0 +1000}
+ {670348800 39600 1 +1100}
+ {686073600 36000 0 +1000}
+ {695750400 39600 0 +1100}
+ {701794800 43200 1 +1200}
+ {717519600 39600 0 +1100}
+ {733244400 43200 1 +1200}
+ {748969200 39600 0 +1100}
+ {764694000 43200 1 +1200}
+ {780418800 39600 0 +1100}
+ {796143600 43200 1 +1200}
+ {811868400 39600 0 +1100}
+ {828198000 43200 1 +1200}
+ {846342000 39600 0 +1100}
+ {859647600 43200 1 +1200}
+ {877791600 39600 0 +1100}
+ {891097200 43200 1 +1200}
+ {909241200 39600 0 +1100}
+ {922546800 43200 1 +1200}
+ {941295600 39600 0 +1100}
+ {953996400 43200 1 +1200}
+ {972745200 39600 0 +1100}
+ {985446000 43200 1 +1200}
+ {1004194800 39600 0 +1100}
+ {1017500400 43200 1 +1200}
+ {1035644400 39600 0 +1100}
+ {1048950000 43200 1 +1200}
+ {1067094000 39600 0 +1100}
+ {1080399600 43200 1 +1200}
+ {1099148400 39600 0 +1100}
+ {1111849200 43200 1 +1200}
+ {1130598000 39600 0 +1100}
+ {1143298800 43200 1 +1200}
+ {1162047600 39600 0 +1100}
+ {1174748400 43200 1 +1200}
+ {1193497200 39600 0 +1100}
+ {1206802800 43200 1 +1200}
+ {1224946800 39600 0 +1100}
+ {1238252400 43200 1 +1200}
+ {1256396400 39600 0 +1100}
+ {1269702000 43200 1 +1200}
+ {1288450800 39600 0 +1100}
+ {1301151600 43200 0 +1200}
+ {1414245600 39600 0 +1100}
}
diff --git a/library/tzdata/Asia/Tashkent b/library/tzdata/Asia/Tashkent
index bd16c91..dede333 100644
--- a/library/tzdata/Asia/Tashkent
+++ b/library/tzdata/Asia/Tashkent
@@ -2,30 +2,30 @@
set TZData(:Asia/Tashkent) {
{-9223372036854775808 16631 0 LMT}
- {-1441168631 18000 0 +05}
- {-1247547600 21600 0 +06}
- {354909600 25200 1 +06}
- {370717200 21600 0 +06}
- {386445600 25200 1 +06}
- {402253200 21600 0 +06}
- {417981600 25200 1 +06}
- {433789200 21600 0 +06}
- {449604000 25200 1 +06}
- {465336000 21600 0 +06}
- {481060800 25200 1 +06}
- {496785600 21600 0 +06}
- {512510400 25200 1 +06}
- {528235200 21600 0 +06}
- {543960000 25200 1 +06}
- {559684800 21600 0 +06}
- {575409600 25200 1 +06}
- {591134400 21600 0 +06}
- {606859200 25200 1 +06}
- {622584000 21600 0 +06}
- {638308800 25200 1 +06}
- {654638400 21600 0 +06}
- {670363200 18000 0 +05}
- {670366800 21600 1 +05}
- {686091600 18000 0 +05}
- {694206000 18000 0 +05}
+ {-1441168631 18000 0 +0500}
+ {-1247547600 21600 0 +0600}
+ {354909600 25200 1 +0700}
+ {370717200 21600 0 +0600}
+ {386445600 25200 1 +0700}
+ {402253200 21600 0 +0600}
+ {417981600 25200 1 +0700}
+ {433789200 21600 0 +0600}
+ {449604000 25200 1 +0700}
+ {465336000 21600 0 +0600}
+ {481060800 25200 1 +0700}
+ {496785600 21600 0 +0600}
+ {512510400 25200 1 +0700}
+ {528235200 21600 0 +0600}
+ {543960000 25200 1 +0700}
+ {559684800 21600 0 +0600}
+ {575409600 25200 1 +0700}
+ {591134400 21600 0 +0600}
+ {606859200 25200 1 +0700}
+ {622584000 21600 0 +0600}
+ {638308800 25200 1 +0700}
+ {654638400 21600 0 +0600}
+ {670363200 18000 0 +0500}
+ {670366800 21600 1 +0600}
+ {686091600 18000 0 +0500}
+ {694206000 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Tbilisi b/library/tzdata/Asia/Tbilisi
index 71e7695..f45142e 100644
--- a/library/tzdata/Asia/Tbilisi
+++ b/library/tzdata/Asia/Tbilisi
@@ -3,58 +3,58 @@
set TZData(:Asia/Tbilisi) {
{-9223372036854775808 10751 0 LMT}
{-2840151551 10751 0 TBMT}
- {-1441162751 10800 0 +03}
- {-405140400 14400 0 +04}
- {354916800 18000 1 +04}
- {370724400 14400 0 +04}
- {386452800 18000 1 +04}
- {402260400 14400 0 +04}
- {417988800 18000 1 +04}
- {433796400 14400 0 +04}
- {449611200 18000 1 +04}
- {465343200 14400 0 +04}
- {481068000 18000 1 +04}
- {496792800 14400 0 +04}
- {512517600 18000 1 +04}
- {528242400 14400 0 +04}
- {543967200 18000 1 +04}
- {559692000 14400 0 +04}
- {575416800 18000 1 +04}
- {591141600 14400 0 +04}
- {606866400 18000 1 +04}
- {622591200 14400 0 +04}
- {638316000 18000 1 +04}
- {654645600 14400 0 +04}
- {670370400 10800 0 +03}
- {670374000 14400 1 +03}
- {686098800 10800 0 +03}
- {694213200 10800 0 +03}
- {701816400 14400 1 +03}
- {717537600 10800 0 +03}
- {733266000 14400 1 +03}
- {748987200 10800 0 +03}
- {764715600 14400 1 +03}
- {780440400 14400 0 +04}
- {796161600 18000 1 +04}
- {811882800 14400 0 +04}
- {828216000 18000 1 +04}
- {846360000 18000 1 +05}
- {859662000 18000 0 +04}
- {877806000 14400 0 +04}
- {891115200 18000 1 +04}
- {909255600 14400 0 +04}
- {922564800 18000 1 +04}
- {941310000 14400 0 +04}
- {954014400 18000 1 +04}
- {972759600 14400 0 +04}
- {985464000 18000 1 +04}
- {1004209200 14400 0 +04}
- {1017518400 18000 1 +04}
- {1035658800 14400 0 +04}
- {1048968000 18000 1 +04}
- {1067108400 14400 0 +04}
- {1080417600 18000 1 +04}
- {1088280000 14400 0 +03}
- {1099177200 10800 0 +03}
- {1111878000 14400 0 +04}
+ {-1441162751 10800 0 +0300}
+ {-405140400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 18000 1 +0500}
+ {622591200 14400 0 +0400}
+ {638316000 18000 1 +0500}
+ {654645600 14400 0 +0400}
+ {670370400 10800 0 +0300}
+ {670374000 14400 1 +0400}
+ {686098800 10800 0 +0300}
+ {694213200 10800 0 +0300}
+ {701816400 14400 1 +0400}
+ {717537600 10800 0 +0300}
+ {733266000 14400 1 +0400}
+ {748987200 10800 0 +0300}
+ {764715600 14400 1 +0400}
+ {780440400 14400 0 +0400}
+ {796161600 18000 1 +0500}
+ {811882800 14400 0 +0400}
+ {828216000 18000 1 +0500}
+ {846360000 18000 1 +0500}
+ {859662000 18000 0 +0500}
+ {877806000 14400 0 +0400}
+ {891115200 18000 1 +0500}
+ {909255600 14400 0 +0400}
+ {922564800 18000 1 +0500}
+ {941310000 14400 0 +0400}
+ {954014400 18000 1 +0500}
+ {972759600 14400 0 +0400}
+ {985464000 18000 1 +0500}
+ {1004209200 14400 0 +0400}
+ {1017518400 18000 1 +0500}
+ {1035658800 14400 0 +0400}
+ {1048968000 18000 1 +0500}
+ {1067108400 14400 0 +0400}
+ {1080417600 18000 1 +0500}
+ {1088280000 14400 0 +0400}
+ {1099177200 10800 0 +0300}
+ {1111878000 14400 0 +0400}
}
diff --git a/library/tzdata/Asia/Tehran b/library/tzdata/Asia/Tehran
index c453c48..e29ff80 100644
--- a/library/tzdata/Asia/Tehran
+++ b/library/tzdata/Asia/Tehran
@@ -4,73 +4,73 @@ set TZData(:Asia/Tehran) {
{-9223372036854775808 12344 0 LMT}
{-1704165944 12344 0 TMT}
{-1090466744 12600 0 +0330}
- {227820600 16200 1 +0330}
- {246227400 14400 0 +04}
- {259617600 18000 1 +04}
- {271108800 14400 0 +04}
- {283982400 12600 0 +0330}
- {296598600 16200 1 +0330}
+ {227820600 16200 1 +0430}
+ {246227400 14400 0 +0400}
+ {259617600 18000 1 +0500}
+ {271108800 14400 0 +0400}
+ {279576000 12600 0 +0330}
+ {296598600 16200 1 +0430}
{306531000 12600 0 +0330}
- {322432200 16200 1 +0330}
+ {322432200 16200 1 +0430}
{338499000 12600 0 +0330}
- {673216200 16200 1 +0330}
+ {673216200 16200 1 +0430}
{685481400 12600 0 +0330}
- {701209800 16200 1 +0330}
+ {701209800 16200 1 +0430}
{717103800 12600 0 +0330}
- {732745800 16200 1 +0330}
+ {732745800 16200 1 +0430}
{748639800 12600 0 +0330}
- {764281800 16200 1 +0330}
+ {764281800 16200 1 +0430}
{780175800 12600 0 +0330}
- {795817800 16200 1 +0330}
+ {795817800 16200 1 +0430}
{811711800 12600 0 +0330}
- {827353800 16200 1 +0330}
+ {827353800 16200 1 +0430}
{843247800 12600 0 +0330}
- {858976200 16200 1 +0330}
+ {858976200 16200 1 +0430}
{874870200 12600 0 +0330}
- {890512200 16200 1 +0330}
+ {890512200 16200 1 +0430}
{906406200 12600 0 +0330}
- {922048200 16200 1 +0330}
+ {922048200 16200 1 +0430}
{937942200 12600 0 +0330}
- {953584200 16200 1 +0330}
+ {953584200 16200 1 +0430}
{969478200 12600 0 +0330}
- {985206600 16200 1 +0330}
+ {985206600 16200 1 +0430}
{1001100600 12600 0 +0330}
- {1016742600 16200 1 +0330}
+ {1016742600 16200 1 +0430}
{1032636600 12600 0 +0330}
- {1048278600 16200 1 +0330}
+ {1048278600 16200 1 +0430}
{1064172600 12600 0 +0330}
- {1079814600 16200 1 +0330}
+ {1079814600 16200 1 +0430}
{1095708600 12600 0 +0330}
- {1111437000 16200 1 +0330}
+ {1111437000 16200 1 +0430}
{1127331000 12600 0 +0330}
- {1206045000 16200 1 +0330}
+ {1206045000 16200 1 +0430}
{1221939000 12600 0 +0330}
- {1237667400 16200 1 +0330}
+ {1237667400 16200 1 +0430}
{1253561400 12600 0 +0330}
- {1269203400 16200 1 +0330}
+ {1269203400 16200 1 +0430}
{1285097400 12600 0 +0330}
- {1300739400 16200 1 +0330}
+ {1300739400 16200 1 +0430}
{1316633400 12600 0 +0330}
- {1332275400 16200 1 +0330}
+ {1332275400 16200 1 +0430}
{1348169400 12600 0 +0330}
- {1363897800 16200 1 +0330}
+ {1363897800 16200 1 +0430}
{1379791800 12600 0 +0330}
- {1395433800 16200 1 +0330}
+ {1395433800 16200 1 +0430}
{1411327800 12600 0 +0330}
- {1426969800 16200 1 +0330}
+ {1426969800 16200 1 +0430}
{1442863800 12600 0 +0330}
- {1458505800 16200 1 +0330}
+ {1458505800 16200 1 +0430}
{1474399800 12600 0 +0330}
- {1490128200 16200 1 +0330}
+ {1490128200 16200 1 +0430}
{1506022200 12600 0 +0330}
- {1521664200 16200 1 +0330}
+ {1521664200 16200 1 +0430}
{1537558200 12600 0 +0330}
- {1553200200 16200 1 +0330}
+ {1553200200 16200 1 +0430}
{1569094200 12600 0 +0330}
- {1584736200 16200 1 +0330}
+ {1584736200 16200 1 +0430}
{1600630200 12600 0 +0330}
- {1616358600 16200 1 +0330}
+ {1616358600 16200 1 +0430}
{1632252600 12600 0 +0330}
- {1647894600 16200 1 +0330}
+ {1647894600 16200 1 +0430}
{1663788600 12600 0 +0330}
}
diff --git a/library/tzdata/Asia/Thimphu b/library/tzdata/Asia/Thimphu
index 55c3d7f..35329c5 100644
--- a/library/tzdata/Asia/Thimphu
+++ b/library/tzdata/Asia/Thimphu
@@ -3,5 +3,5 @@
set TZData(:Asia/Thimphu) {
{-9223372036854775808 21516 0 LMT}
{-706341516 19800 0 +0530}
- {560025000 21600 0 +06}
+ {560025000 21600 0 +0600}
}
diff --git a/library/tzdata/Asia/Tomsk b/library/tzdata/Asia/Tomsk
index 0694d01..ee32445 100644
--- a/library/tzdata/Asia/Tomsk
+++ b/library/tzdata/Asia/Tomsk
@@ -2,72 +2,72 @@
set TZData(:Asia/Tomsk) {
{-9223372036854775808 20391 0 LMT}
- {-1578807591 21600 0 +06}
- {-1247551200 25200 0 +08}
- {354906000 28800 1 +08}
- {370713600 25200 0 +07}
- {386442000 28800 1 +08}
- {402249600 25200 0 +07}
- {417978000 28800 1 +08}
- {433785600 25200 0 +07}
- {449600400 28800 1 +08}
- {465332400 25200 0 +07}
- {481057200 28800 1 +08}
- {496782000 25200 0 +07}
- {512506800 28800 1 +08}
- {528231600 25200 0 +07}
- {543956400 28800 1 +08}
- {559681200 25200 0 +07}
- {575406000 28800 1 +08}
- {591130800 25200 0 +07}
- {606855600 28800 1 +08}
- {622580400 25200 0 +07}
- {638305200 28800 1 +08}
- {654634800 25200 0 +07}
- {670359600 21600 0 +07}
- {670363200 25200 1 +07}
- {686088000 21600 0 +06}
- {695764800 25200 0 +08}
- {701809200 28800 1 +08}
- {717534000 25200 0 +07}
- {733258800 28800 1 +08}
- {748983600 25200 0 +07}
- {764708400 28800 1 +08}
- {780433200 25200 0 +07}
- {796158000 28800 1 +08}
- {811882800 25200 0 +07}
- {828212400 28800 1 +08}
- {846356400 25200 0 +07}
- {859662000 28800 1 +08}
- {877806000 25200 0 +07}
- {891111600 28800 1 +08}
- {909255600 25200 0 +07}
- {922561200 28800 1 +08}
- {941310000 25200 0 +07}
- {954010800 28800 1 +08}
- {972759600 25200 0 +07}
- {985460400 28800 1 +08}
- {1004209200 25200 0 +07}
- {1017514800 28800 1 +08}
- {1020196800 25200 0 +07}
- {1035662400 21600 0 +06}
- {1048968000 25200 1 +07}
- {1067112000 21600 0 +06}
- {1080417600 25200 1 +07}
- {1099166400 21600 0 +06}
- {1111867200 25200 1 +07}
- {1130616000 21600 0 +06}
- {1143316800 25200 1 +07}
- {1162065600 21600 0 +06}
- {1174766400 25200 1 +07}
- {1193515200 21600 0 +06}
- {1206820800 25200 1 +07}
- {1224964800 21600 0 +06}
- {1238270400 25200 1 +07}
- {1256414400 21600 0 +06}
- {1269720000 25200 1 +07}
- {1288468800 21600 0 +06}
- {1301169600 25200 0 +07}
- {1414263600 21600 0 +06}
- {1464465600 25200 0 +07}
+ {-1578807591 21600 0 +0600}
+ {-1247551200 25200 0 +0700}
+ {354906000 28800 1 +0800}
+ {370713600 25200 0 +0700}
+ {386442000 28800 1 +0800}
+ {402249600 25200 0 +0700}
+ {417978000 28800 1 +0800}
+ {433785600 25200 0 +0700}
+ {449600400 28800 1 +0800}
+ {465332400 25200 0 +0700}
+ {481057200 28800 1 +0800}
+ {496782000 25200 0 +0700}
+ {512506800 28800 1 +0800}
+ {528231600 25200 0 +0700}
+ {543956400 28800 1 +0800}
+ {559681200 25200 0 +0700}
+ {575406000 28800 1 +0800}
+ {591130800 25200 0 +0700}
+ {606855600 28800 1 +0800}
+ {622580400 25200 0 +0700}
+ {638305200 28800 1 +0800}
+ {654634800 25200 0 +0700}
+ {670359600 21600 0 +0600}
+ {670363200 25200 1 +0700}
+ {686088000 21600 0 +0600}
+ {695764800 25200 0 +0700}
+ {701809200 28800 1 +0800}
+ {717534000 25200 0 +0700}
+ {733258800 28800 1 +0800}
+ {748983600 25200 0 +0700}
+ {764708400 28800 1 +0800}
+ {780433200 25200 0 +0700}
+ {796158000 28800 1 +0800}
+ {811882800 25200 0 +0700}
+ {828212400 28800 1 +0800}
+ {846356400 25200 0 +0700}
+ {859662000 28800 1 +0800}
+ {877806000 25200 0 +0700}
+ {891111600 28800 1 +0800}
+ {909255600 25200 0 +0700}
+ {922561200 28800 1 +0800}
+ {941310000 25200 0 +0700}
+ {954010800 28800 1 +0800}
+ {972759600 25200 0 +0700}
+ {985460400 28800 1 +0800}
+ {1004209200 25200 0 +0700}
+ {1017514800 28800 1 +0800}
+ {1020196800 25200 0 +0700}
+ {1035662400 21600 0 +0600}
+ {1048968000 25200 1 +0700}
+ {1067112000 21600 0 +0600}
+ {1080417600 25200 1 +0700}
+ {1099166400 21600 0 +0600}
+ {1111867200 25200 1 +0700}
+ {1130616000 21600 0 +0600}
+ {1143316800 25200 1 +0700}
+ {1162065600 21600 0 +0600}
+ {1174766400 25200 1 +0700}
+ {1193515200 21600 0 +0600}
+ {1206820800 25200 1 +0700}
+ {1224964800 21600 0 +0600}
+ {1238270400 25200 1 +0700}
+ {1256414400 21600 0 +0600}
+ {1269720000 25200 1 +0700}
+ {1288468800 21600 0 +0600}
+ {1301169600 25200 0 +0700}
+ {1414263600 21600 0 +0600}
+ {1464465600 25200 0 +0700}
}
diff --git a/library/tzdata/Asia/Ulaanbaatar b/library/tzdata/Asia/Ulaanbaatar
index 3a33ef9..53695dd 100644
--- a/library/tzdata/Asia/Ulaanbaatar
+++ b/library/tzdata/Asia/Ulaanbaatar
@@ -2,54 +2,54 @@
set TZData(:Asia/Ulaanbaatar) {
{-9223372036854775808 25652 0 LMT}
- {-2032931252 25200 0 +07}
- {252435600 28800 0 +08}
- {417974400 32400 1 +08}
- {433782000 28800 0 +08}
- {449596800 32400 1 +08}
- {465318000 28800 0 +08}
- {481046400 32400 1 +08}
- {496767600 28800 0 +08}
- {512496000 32400 1 +08}
- {528217200 28800 0 +08}
- {543945600 32400 1 +08}
- {559666800 28800 0 +08}
- {575395200 32400 1 +08}
- {591116400 28800 0 +08}
- {606844800 32400 1 +08}
- {622566000 28800 0 +08}
- {638294400 32400 1 +08}
- {654620400 28800 0 +08}
- {670348800 32400 1 +08}
- {686070000 28800 0 +08}
- {701798400 32400 1 +08}
- {717519600 28800 0 +08}
- {733248000 32400 1 +08}
- {748969200 28800 0 +08}
- {764697600 32400 1 +08}
- {780418800 28800 0 +08}
- {796147200 32400 1 +08}
- {811868400 28800 0 +08}
- {828201600 32400 1 +08}
- {843922800 28800 0 +08}
- {859651200 32400 1 +08}
- {875372400 28800 0 +08}
- {891100800 32400 1 +08}
- {906822000 28800 0 +08}
- {988394400 32400 1 +08}
- {1001696400 28800 0 +08}
- {1017424800 32400 1 +08}
- {1033146000 28800 0 +08}
- {1048874400 32400 1 +08}
- {1064595600 28800 0 +08}
- {1080324000 32400 1 +08}
- {1096045200 28800 0 +08}
- {1111773600 32400 1 +08}
- {1127494800 28800 0 +08}
- {1143223200 32400 1 +08}
- {1159549200 28800 0 +08}
- {1427479200 32400 1 +08}
- {1443193200 28800 0 +08}
- {1458928800 32400 1 +08}
- {1474642800 28800 0 +08}
+ {-2032931252 25200 0 +0700}
+ {252435600 28800 0 +0800}
+ {417974400 32400 1 +0900}
+ {433782000 28800 0 +0800}
+ {449596800 32400 1 +0900}
+ {465318000 28800 0 +0800}
+ {481046400 32400 1 +0900}
+ {496767600 28800 0 +0800}
+ {512496000 32400 1 +0900}
+ {528217200 28800 0 +0800}
+ {543945600 32400 1 +0900}
+ {559666800 28800 0 +0800}
+ {575395200 32400 1 +0900}
+ {591116400 28800 0 +0800}
+ {606844800 32400 1 +0900}
+ {622566000 28800 0 +0800}
+ {638294400 32400 1 +0900}
+ {654620400 28800 0 +0800}
+ {670348800 32400 1 +0900}
+ {686070000 28800 0 +0800}
+ {701798400 32400 1 +0900}
+ {717519600 28800 0 +0800}
+ {733248000 32400 1 +0900}
+ {748969200 28800 0 +0800}
+ {764697600 32400 1 +0900}
+ {780418800 28800 0 +0800}
+ {796147200 32400 1 +0900}
+ {811868400 28800 0 +0800}
+ {828201600 32400 1 +0900}
+ {843922800 28800 0 +0800}
+ {859651200 32400 1 +0900}
+ {875372400 28800 0 +0800}
+ {891100800 32400 1 +0900}
+ {906822000 28800 0 +0800}
+ {988394400 32400 1 +0900}
+ {1001696400 28800 0 +0800}
+ {1017424800 32400 1 +0900}
+ {1033146000 28800 0 +0800}
+ {1048874400 32400 1 +0900}
+ {1064595600 28800 0 +0800}
+ {1080324000 32400 1 +0900}
+ {1096045200 28800 0 +0800}
+ {1111773600 32400 1 +0900}
+ {1127494800 28800 0 +0800}
+ {1143223200 32400 1 +0900}
+ {1159549200 28800 0 +0800}
+ {1427479200 32400 1 +0900}
+ {1443193200 28800 0 +0800}
+ {1458928800 32400 1 +0900}
+ {1474642800 28800 0 +0800}
}
diff --git a/library/tzdata/Asia/Urumqi b/library/tzdata/Asia/Urumqi
index 194e090..1101cf5 100644
--- a/library/tzdata/Asia/Urumqi
+++ b/library/tzdata/Asia/Urumqi
@@ -2,5 +2,5 @@
set TZData(:Asia/Urumqi) {
{-9223372036854775808 21020 0 LMT}
- {-1325483420 21600 0 +06}
+ {-1325483420 21600 0 +0600}
}
diff --git a/library/tzdata/Asia/Ust-Nera b/library/tzdata/Asia/Ust-Nera
index 021fa62..6c87e96 100644
--- a/library/tzdata/Asia/Ust-Nera
+++ b/library/tzdata/Asia/Ust-Nera
@@ -2,70 +2,70 @@
set TZData(:Asia/Ust-Nera) {
{-9223372036854775808 34374 0 LMT}
- {-1579426374 28800 0 +08}
- {354898800 43200 0 +12}
- {370699200 39600 0 +11}
- {386427600 43200 1 +12}
- {402235200 39600 0 +11}
- {417963600 43200 1 +12}
- {433771200 39600 0 +11}
- {449586000 43200 1 +12}
- {465318000 39600 0 +11}
- {481042800 43200 1 +12}
- {496767600 39600 0 +11}
- {512492400 43200 1 +12}
- {528217200 39600 0 +11}
- {543942000 43200 1 +12}
- {559666800 39600 0 +11}
- {575391600 43200 1 +12}
- {591116400 39600 0 +11}
- {606841200 43200 1 +12}
- {622566000 39600 0 +11}
- {638290800 43200 1 +12}
- {654620400 39600 0 +11}
- {670345200 36000 0 +11}
- {670348800 39600 1 +11}
- {686073600 36000 0 +10}
- {695750400 39600 0 +12}
- {701794800 43200 1 +12}
- {717519600 39600 0 +11}
- {733244400 43200 1 +12}
- {748969200 39600 0 +11}
- {764694000 43200 1 +12}
- {780418800 39600 0 +11}
- {796143600 43200 1 +12}
- {811868400 39600 0 +11}
- {828198000 43200 1 +12}
- {846342000 39600 0 +11}
- {859647600 43200 1 +12}
- {877791600 39600 0 +11}
- {891097200 43200 1 +12}
- {909241200 39600 0 +11}
- {922546800 43200 1 +12}
- {941295600 39600 0 +11}
- {953996400 43200 1 +12}
- {972745200 39600 0 +11}
- {985446000 43200 1 +12}
- {1004194800 39600 0 +11}
- {1017500400 43200 1 +12}
- {1035644400 39600 0 +11}
- {1048950000 43200 1 +12}
- {1067094000 39600 0 +11}
- {1080399600 43200 1 +12}
- {1099148400 39600 0 +11}
- {1111849200 43200 1 +12}
- {1130598000 39600 0 +11}
- {1143298800 43200 1 +12}
- {1162047600 39600 0 +11}
- {1174748400 43200 1 +12}
- {1193497200 39600 0 +11}
- {1206802800 43200 1 +12}
- {1224946800 39600 0 +11}
- {1238252400 43200 1 +12}
- {1256396400 39600 0 +11}
- {1269702000 43200 1 +12}
- {1288450800 39600 0 +11}
- {1301151600 43200 0 +12}
- {1315828800 39600 0 +11}
- {1414249200 36000 0 +10}
+ {-1579426374 28800 0 +0800}
+ {354898800 43200 0 +1200}
+ {370699200 39600 0 +1100}
+ {386427600 43200 1 +1200}
+ {402235200 39600 0 +1100}
+ {417963600 43200 1 +1200}
+ {433771200 39600 0 +1100}
+ {449586000 43200 1 +1200}
+ {465318000 39600 0 +1100}
+ {481042800 43200 1 +1200}
+ {496767600 39600 0 +1100}
+ {512492400 43200 1 +1200}
+ {528217200 39600 0 +1100}
+ {543942000 43200 1 +1200}
+ {559666800 39600 0 +1100}
+ {575391600 43200 1 +1200}
+ {591116400 39600 0 +1100}
+ {606841200 43200 1 +1200}
+ {622566000 39600 0 +1100}
+ {638290800 43200 1 +1200}
+ {654620400 39600 0 +1100}
+ {670345200 36000 0 +1000}
+ {670348800 39600 1 +1100}
+ {686073600 36000 0 +1000}
+ {695750400 39600 0 +1100}
+ {701794800 43200 1 +1200}
+ {717519600 39600 0 +1100}
+ {733244400 43200 1 +1200}
+ {748969200 39600 0 +1100}
+ {764694000 43200 1 +1200}
+ {780418800 39600 0 +1100}
+ {796143600 43200 1 +1200}
+ {811868400 39600 0 +1100}
+ {828198000 43200 1 +1200}
+ {846342000 39600 0 +1100}
+ {859647600 43200 1 +1200}
+ {877791600 39600 0 +1100}
+ {891097200 43200 1 +1200}
+ {909241200 39600 0 +1100}
+ {922546800 43200 1 +1200}
+ {941295600 39600 0 +1100}
+ {953996400 43200 1 +1200}
+ {972745200 39600 0 +1100}
+ {985446000 43200 1 +1200}
+ {1004194800 39600 0 +1100}
+ {1017500400 43200 1 +1200}
+ {1035644400 39600 0 +1100}
+ {1048950000 43200 1 +1200}
+ {1067094000 39600 0 +1100}
+ {1080399600 43200 1 +1200}
+ {1099148400 39600 0 +1100}
+ {1111849200 43200 1 +1200}
+ {1130598000 39600 0 +1100}
+ {1143298800 43200 1 +1200}
+ {1162047600 39600 0 +1100}
+ {1174748400 43200 1 +1200}
+ {1193497200 39600 0 +1100}
+ {1206802800 43200 1 +1200}
+ {1224946800 39600 0 +1100}
+ {1238252400 43200 1 +1200}
+ {1256396400 39600 0 +1100}
+ {1269702000 43200 1 +1200}
+ {1288450800 39600 0 +1100}
+ {1301151600 43200 0 +1200}
+ {1315828800 39600 0 +1100}
+ {1414249200 36000 0 +1000}
}
diff --git a/library/tzdata/Asia/Vladivostok b/library/tzdata/Asia/Vladivostok
index e8f651c..3a63df0 100644
--- a/library/tzdata/Asia/Vladivostok
+++ b/library/tzdata/Asia/Vladivostok
@@ -2,70 +2,70 @@
set TZData(:Asia/Vladivostok) {
{-9223372036854775808 31651 0 LMT}
- {-1487321251 32400 0 +09}
- {-1247562000 36000 0 +11}
- {354895200 39600 1 +11}
- {370702800 36000 0 +10}
- {386431200 39600 1 +11}
- {402238800 36000 0 +10}
- {417967200 39600 1 +11}
- {433774800 36000 0 +10}
- {449589600 39600 1 +11}
- {465321600 36000 0 +10}
- {481046400 39600 1 +11}
- {496771200 36000 0 +10}
- {512496000 39600 1 +11}
- {528220800 36000 0 +10}
- {543945600 39600 1 +11}
- {559670400 36000 0 +10}
- {575395200 39600 1 +11}
- {591120000 36000 0 +10}
- {606844800 39600 1 +11}
- {622569600 36000 0 +10}
- {638294400 39600 1 +11}
- {654624000 36000 0 +10}
- {670348800 32400 0 +10}
- {670352400 36000 1 +10}
- {686077200 32400 0 +09}
- {695754000 36000 0 +11}
- {701798400 39600 1 +11}
- {717523200 36000 0 +10}
- {733248000 39600 1 +11}
- {748972800 36000 0 +10}
- {764697600 39600 1 +11}
- {780422400 36000 0 +10}
- {796147200 39600 1 +11}
- {811872000 36000 0 +10}
- {828201600 39600 1 +11}
- {846345600 36000 0 +10}
- {859651200 39600 1 +11}
- {877795200 36000 0 +10}
- {891100800 39600 1 +11}
- {909244800 36000 0 +10}
- {922550400 39600 1 +11}
- {941299200 36000 0 +10}
- {954000000 39600 1 +11}
- {972748800 36000 0 +10}
- {985449600 39600 1 +11}
- {1004198400 36000 0 +10}
- {1017504000 39600 1 +11}
- {1035648000 36000 0 +10}
- {1048953600 39600 1 +11}
- {1067097600 36000 0 +10}
- {1080403200 39600 1 +11}
- {1099152000 36000 0 +10}
- {1111852800 39600 1 +11}
- {1130601600 36000 0 +10}
- {1143302400 39600 1 +11}
- {1162051200 36000 0 +10}
- {1174752000 39600 1 +11}
- {1193500800 36000 0 +10}
- {1206806400 39600 1 +11}
- {1224950400 36000 0 +10}
- {1238256000 39600 1 +11}
- {1256400000 36000 0 +10}
- {1269705600 39600 1 +11}
- {1288454400 36000 0 +10}
- {1301155200 39600 0 +11}
- {1414249200 36000 0 +10}
+ {-1487321251 32400 0 +0900}
+ {-1247562000 36000 0 +1000}
+ {354895200 39600 1 +1100}
+ {370702800 36000 0 +1000}
+ {386431200 39600 1 +1100}
+ {402238800 36000 0 +1000}
+ {417967200 39600 1 +1100}
+ {433774800 36000 0 +1000}
+ {449589600 39600 1 +1100}
+ {465321600 36000 0 +1000}
+ {481046400 39600 1 +1100}
+ {496771200 36000 0 +1000}
+ {512496000 39600 1 +1100}
+ {528220800 36000 0 +1000}
+ {543945600 39600 1 +1100}
+ {559670400 36000 0 +1000}
+ {575395200 39600 1 +1100}
+ {591120000 36000 0 +1000}
+ {606844800 39600 1 +1100}
+ {622569600 36000 0 +1000}
+ {638294400 39600 1 +1100}
+ {654624000 36000 0 +1000}
+ {670348800 32400 0 +0900}
+ {670352400 36000 1 +1000}
+ {686077200 32400 0 +0900}
+ {695754000 36000 0 +1000}
+ {701798400 39600 1 +1100}
+ {717523200 36000 0 +1000}
+ {733248000 39600 1 +1100}
+ {748972800 36000 0 +1000}
+ {764697600 39600 1 +1100}
+ {780422400 36000 0 +1000}
+ {796147200 39600 1 +1100}
+ {811872000 36000 0 +1000}
+ {828201600 39600 1 +1100}
+ {846345600 36000 0 +1000}
+ {859651200 39600 1 +1100}
+ {877795200 36000 0 +1000}
+ {891100800 39600 1 +1100}
+ {909244800 36000 0 +1000}
+ {922550400 39600 1 +1100}
+ {941299200 36000 0 +1000}
+ {954000000 39600 1 +1100}
+ {972748800 36000 0 +1000}
+ {985449600 39600 1 +1100}
+ {1004198400 36000 0 +1000}
+ {1017504000 39600 1 +1100}
+ {1035648000 36000 0 +1000}
+ {1048953600 39600 1 +1100}
+ {1067097600 36000 0 +1000}
+ {1080403200 39600 1 +1100}
+ {1099152000 36000 0 +1000}
+ {1111852800 39600 1 +1100}
+ {1130601600 36000 0 +1000}
+ {1143302400 39600 1 +1100}
+ {1162051200 36000 0 +1000}
+ {1174752000 39600 1 +1100}
+ {1193500800 36000 0 +1000}
+ {1206806400 39600 1 +1100}
+ {1224950400 36000 0 +1000}
+ {1238256000 39600 1 +1100}
+ {1256400000 36000 0 +1000}
+ {1269705600 39600 1 +1100}
+ {1288454400 36000 0 +1000}
+ {1301155200 39600 0 +1100}
+ {1414249200 36000 0 +1000}
}
diff --git a/library/tzdata/Asia/Yakutsk b/library/tzdata/Asia/Yakutsk
index 8ee153a..08b3f7f 100644
--- a/library/tzdata/Asia/Yakutsk
+++ b/library/tzdata/Asia/Yakutsk
@@ -2,70 +2,70 @@
set TZData(:Asia/Yakutsk) {
{-9223372036854775808 31138 0 LMT}
- {-1579423138 28800 0 +08}
- {-1247558400 32400 0 +10}
- {354898800 36000 1 +10}
- {370706400 32400 0 +09}
- {386434800 36000 1 +10}
- {402242400 32400 0 +09}
- {417970800 36000 1 +10}
- {433778400 32400 0 +09}
- {449593200 36000 1 +10}
- {465325200 32400 0 +09}
- {481050000 36000 1 +10}
- {496774800 32400 0 +09}
- {512499600 36000 1 +10}
- {528224400 32400 0 +09}
- {543949200 36000 1 +10}
- {559674000 32400 0 +09}
- {575398800 36000 1 +10}
- {591123600 32400 0 +09}
- {606848400 36000 1 +10}
- {622573200 32400 0 +09}
- {638298000 36000 1 +10}
- {654627600 32400 0 +09}
- {670352400 28800 0 +09}
- {670356000 32400 1 +09}
- {686080800 28800 0 +08}
- {695757600 32400 0 +10}
- {701802000 36000 1 +10}
- {717526800 32400 0 +09}
- {733251600 36000 1 +10}
- {748976400 32400 0 +09}
- {764701200 36000 1 +10}
- {780426000 32400 0 +09}
- {796150800 36000 1 +10}
- {811875600 32400 0 +09}
- {828205200 36000 1 +10}
- {846349200 32400 0 +09}
- {859654800 36000 1 +10}
- {877798800 32400 0 +09}
- {891104400 36000 1 +10}
- {909248400 32400 0 +09}
- {922554000 36000 1 +10}
- {941302800 32400 0 +09}
- {954003600 36000 1 +10}
- {972752400 32400 0 +09}
- {985453200 36000 1 +10}
- {1004202000 32400 0 +09}
- {1017507600 36000 1 +10}
- {1035651600 32400 0 +09}
- {1048957200 36000 1 +10}
- {1067101200 32400 0 +09}
- {1080406800 36000 1 +10}
- {1099155600 32400 0 +09}
- {1111856400 36000 1 +10}
- {1130605200 32400 0 +09}
- {1143306000 36000 1 +10}
- {1162054800 32400 0 +09}
- {1174755600 36000 1 +10}
- {1193504400 32400 0 +09}
- {1206810000 36000 1 +10}
- {1224954000 32400 0 +09}
- {1238259600 36000 1 +10}
- {1256403600 32400 0 +09}
- {1269709200 36000 1 +10}
- {1288458000 32400 0 +09}
- {1301158800 36000 0 +10}
- {1414252800 32400 0 +09}
+ {-1579423138 28800 0 +0800}
+ {-1247558400 32400 0 +0900}
+ {354898800 36000 1 +1000}
+ {370706400 32400 0 +0900}
+ {386434800 36000 1 +1000}
+ {402242400 32400 0 +0900}
+ {417970800 36000 1 +1000}
+ {433778400 32400 0 +0900}
+ {449593200 36000 1 +1000}
+ {465325200 32400 0 +0900}
+ {481050000 36000 1 +1000}
+ {496774800 32400 0 +0900}
+ {512499600 36000 1 +1000}
+ {528224400 32400 0 +0900}
+ {543949200 36000 1 +1000}
+ {559674000 32400 0 +0900}
+ {575398800 36000 1 +1000}
+ {591123600 32400 0 +0900}
+ {606848400 36000 1 +1000}
+ {622573200 32400 0 +0900}
+ {638298000 36000 1 +1000}
+ {654627600 32400 0 +0900}
+ {670352400 28800 0 +0800}
+ {670356000 32400 1 +0900}
+ {686080800 28800 0 +0800}
+ {695757600 32400 0 +0900}
+ {701802000 36000 1 +1000}
+ {717526800 32400 0 +0900}
+ {733251600 36000 1 +1000}
+ {748976400 32400 0 +0900}
+ {764701200 36000 1 +1000}
+ {780426000 32400 0 +0900}
+ {796150800 36000 1 +1000}
+ {811875600 32400 0 +0900}
+ {828205200 36000 1 +1000}
+ {846349200 32400 0 +0900}
+ {859654800 36000 1 +1000}
+ {877798800 32400 0 +0900}
+ {891104400 36000 1 +1000}
+ {909248400 32400 0 +0900}
+ {922554000 36000 1 +1000}
+ {941302800 32400 0 +0900}
+ {954003600 36000 1 +1000}
+ {972752400 32400 0 +0900}
+ {985453200 36000 1 +1000}
+ {1004202000 32400 0 +0900}
+ {1017507600 36000 1 +1000}
+ {1035651600 32400 0 +0900}
+ {1048957200 36000 1 +1000}
+ {1067101200 32400 0 +0900}
+ {1080406800 36000 1 +1000}
+ {1099155600 32400 0 +0900}
+ {1111856400 36000 1 +1000}
+ {1130605200 32400 0 +0900}
+ {1143306000 36000 1 +1000}
+ {1162054800 32400 0 +0900}
+ {1174755600 36000 1 +1000}
+ {1193504400 32400 0 +0900}
+ {1206810000 36000 1 +1000}
+ {1224954000 32400 0 +0900}
+ {1238259600 36000 1 +1000}
+ {1256403600 32400 0 +0900}
+ {1269709200 36000 1 +1000}
+ {1288458000 32400 0 +0900}
+ {1301158800 36000 0 +1000}
+ {1414252800 32400 0 +0900}
}
diff --git a/library/tzdata/Asia/Yangon b/library/tzdata/Asia/Yangon
index 82870c6..22b7db2 100644
--- a/library/tzdata/Asia/Yangon
+++ b/library/tzdata/Asia/Yangon
@@ -4,6 +4,6 @@ set TZData(:Asia/Yangon) {
{-9223372036854775808 23087 0 LMT}
{-2840163887 23087 0 RMT}
{-1577946287 23400 0 +0630}
- {-873268200 32400 0 +09}
+ {-873268200 32400 0 +0900}
{-778410000 23400 0 +0630}
}
diff --git a/library/tzdata/Asia/Yekaterinburg b/library/tzdata/Asia/Yekaterinburg
index d2133b1..1659c70 100644
--- a/library/tzdata/Asia/Yekaterinburg
+++ b/library/tzdata/Asia/Yekaterinburg
@@ -3,70 +3,70 @@
set TZData(:Asia/Yekaterinburg) {
{-9223372036854775808 14553 0 LMT}
{-1688270553 13505 0 PMT}
- {-1592610305 14400 0 +04}
- {-1247544000 18000 0 +06}
- {354913200 21600 1 +06}
- {370720800 18000 0 +05}
- {386449200 21600 1 +06}
- {402256800 18000 0 +05}
- {417985200 21600 1 +06}
- {433792800 18000 0 +05}
- {449607600 21600 1 +06}
- {465339600 18000 0 +05}
- {481064400 21600 1 +06}
- {496789200 18000 0 +05}
- {512514000 21600 1 +06}
- {528238800 18000 0 +05}
- {543963600 21600 1 +06}
- {559688400 18000 0 +05}
- {575413200 21600 1 +06}
- {591138000 18000 0 +05}
- {606862800 21600 1 +06}
- {622587600 18000 0 +05}
- {638312400 21600 1 +06}
- {654642000 18000 0 +05}
- {670366800 14400 0 +05}
- {670370400 18000 1 +05}
- {686095200 14400 0 +04}
- {695772000 18000 0 +06}
- {701816400 21600 1 +06}
- {717541200 18000 0 +05}
- {733266000 21600 1 +06}
- {748990800 18000 0 +05}
- {764715600 21600 1 +06}
- {780440400 18000 0 +05}
- {796165200 21600 1 +06}
- {811890000 18000 0 +05}
- {828219600 21600 1 +06}
- {846363600 18000 0 +05}
- {859669200 21600 1 +06}
- {877813200 18000 0 +05}
- {891118800 21600 1 +06}
- {909262800 18000 0 +05}
- {922568400 21600 1 +06}
- {941317200 18000 0 +05}
- {954018000 21600 1 +06}
- {972766800 18000 0 +05}
- {985467600 21600 1 +06}
- {1004216400 18000 0 +05}
- {1017522000 21600 1 +06}
- {1035666000 18000 0 +05}
- {1048971600 21600 1 +06}
- {1067115600 18000 0 +05}
- {1080421200 21600 1 +06}
- {1099170000 18000 0 +05}
- {1111870800 21600 1 +06}
- {1130619600 18000 0 +05}
- {1143320400 21600 1 +06}
- {1162069200 18000 0 +05}
- {1174770000 21600 1 +06}
- {1193518800 18000 0 +05}
- {1206824400 21600 1 +06}
- {1224968400 18000 0 +05}
- {1238274000 21600 1 +06}
- {1256418000 18000 0 +05}
- {1269723600 21600 1 +06}
- {1288472400 18000 0 +05}
- {1301173200 21600 0 +06}
- {1414267200 18000 0 +05}
+ {-1592610305 14400 0 +0400}
+ {-1247544000 18000 0 +0500}
+ {354913200 21600 1 +0600}
+ {370720800 18000 0 +0500}
+ {386449200 21600 1 +0600}
+ {402256800 18000 0 +0500}
+ {417985200 21600 1 +0600}
+ {433792800 18000 0 +0500}
+ {449607600 21600 1 +0600}
+ {465339600 18000 0 +0500}
+ {481064400 21600 1 +0600}
+ {496789200 18000 0 +0500}
+ {512514000 21600 1 +0600}
+ {528238800 18000 0 +0500}
+ {543963600 21600 1 +0600}
+ {559688400 18000 0 +0500}
+ {575413200 21600 1 +0600}
+ {591138000 18000 0 +0500}
+ {606862800 21600 1 +0600}
+ {622587600 18000 0 +0500}
+ {638312400 21600 1 +0600}
+ {654642000 18000 0 +0500}
+ {670366800 14400 0 +0400}
+ {670370400 18000 1 +0500}
+ {686095200 14400 0 +0400}
+ {695772000 18000 0 +0500}
+ {701816400 21600 1 +0600}
+ {717541200 18000 0 +0500}
+ {733266000 21600 1 +0600}
+ {748990800 18000 0 +0500}
+ {764715600 21600 1 +0600}
+ {780440400 18000 0 +0500}
+ {796165200 21600 1 +0600}
+ {811890000 18000 0 +0500}
+ {828219600 21600 1 +0600}
+ {846363600 18000 0 +0500}
+ {859669200 21600 1 +0600}
+ {877813200 18000 0 +0500}
+ {891118800 21600 1 +0600}
+ {909262800 18000 0 +0500}
+ {922568400 21600 1 +0600}
+ {941317200 18000 0 +0500}
+ {954018000 21600 1 +0600}
+ {972766800 18000 0 +0500}
+ {985467600 21600 1 +0600}
+ {1004216400 18000 0 +0500}
+ {1017522000 21600 1 +0600}
+ {1035666000 18000 0 +0500}
+ {1048971600 21600 1 +0600}
+ {1067115600 18000 0 +0500}
+ {1080421200 21600 1 +0600}
+ {1099170000 18000 0 +0500}
+ {1111870800 21600 1 +0600}
+ {1130619600 18000 0 +0500}
+ {1143320400 21600 1 +0600}
+ {1162069200 18000 0 +0500}
+ {1174770000 21600 1 +0600}
+ {1193518800 18000 0 +0500}
+ {1206824400 21600 1 +0600}
+ {1224968400 18000 0 +0500}
+ {1238274000 21600 1 +0600}
+ {1256418000 18000 0 +0500}
+ {1269723600 21600 1 +0600}
+ {1288472400 18000 0 +0500}
+ {1301173200 21600 0 +0600}
+ {1414267200 18000 0 +0500}
}
diff --git a/library/tzdata/Asia/Yerevan b/library/tzdata/Asia/Yerevan
index 463bed0..ae892d3 100644
--- a/library/tzdata/Asia/Yerevan
+++ b/library/tzdata/Asia/Yerevan
@@ -2,69 +2,69 @@
set TZData(:Asia/Yerevan) {
{-9223372036854775808 10680 0 LMT}
- {-1441162680 10800 0 +03}
- {-405140400 14400 0 +04}
- {354916800 18000 1 +04}
- {370724400 14400 0 +04}
- {386452800 18000 1 +04}
- {402260400 14400 0 +04}
- {417988800 18000 1 +04}
- {433796400 14400 0 +04}
- {449611200 18000 1 +04}
- {465343200 14400 0 +04}
- {481068000 18000 1 +04}
- {496792800 14400 0 +04}
- {512517600 18000 1 +04}
- {528242400 14400 0 +04}
- {543967200 18000 1 +04}
- {559692000 14400 0 +04}
- {575416800 18000 1 +04}
- {591141600 14400 0 +04}
- {606866400 18000 1 +04}
- {622591200 14400 0 +04}
- {638316000 18000 1 +04}
- {654645600 14400 0 +04}
- {670370400 10800 0 +03}
- {670374000 14400 1 +03}
- {686098800 10800 0 +03}
- {701823600 14400 1 +03}
- {717548400 10800 0 +03}
- {733273200 14400 1 +03}
- {748998000 10800 0 +03}
- {764722800 14400 1 +03}
- {780447600 10800 0 +03}
- {796172400 14400 1 +03}
- {811897200 14400 0 +04}
- {852062400 14400 0 +04}
- {859672800 18000 1 +04}
- {877816800 14400 0 +04}
- {891122400 18000 1 +04}
- {909266400 14400 0 +04}
- {922572000 18000 1 +04}
- {941320800 14400 0 +04}
- {954021600 18000 1 +04}
- {972770400 14400 0 +04}
- {985471200 18000 1 +04}
- {1004220000 14400 0 +04}
- {1017525600 18000 1 +04}
- {1035669600 14400 0 +04}
- {1048975200 18000 1 +04}
- {1067119200 14400 0 +04}
- {1080424800 18000 1 +04}
- {1099173600 14400 0 +04}
- {1111874400 18000 1 +04}
- {1130623200 14400 0 +04}
- {1143324000 18000 1 +04}
- {1162072800 14400 0 +04}
- {1174773600 18000 1 +04}
- {1193522400 14400 0 +04}
- {1206828000 18000 1 +04}
- {1224972000 14400 0 +04}
- {1238277600 18000 1 +04}
- {1256421600 14400 0 +04}
- {1269727200 18000 1 +04}
- {1288476000 14400 0 +04}
- {1293825600 14400 0 +04}
- {1301176800 18000 1 +04}
- {1319925600 14400 0 +04}
+ {-1441162680 10800 0 +0300}
+ {-405140400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 18000 1 +0500}
+ {622591200 14400 0 +0400}
+ {638316000 18000 1 +0500}
+ {654645600 14400 0 +0400}
+ {670370400 10800 0 +0300}
+ {670374000 14400 1 +0400}
+ {686098800 10800 0 +0300}
+ {701823600 14400 1 +0400}
+ {717548400 10800 0 +0300}
+ {733273200 14400 1 +0400}
+ {748998000 10800 0 +0300}
+ {764722800 14400 1 +0400}
+ {780447600 10800 0 +0300}
+ {796172400 14400 1 +0400}
+ {811897200 14400 0 +0400}
+ {852062400 14400 0 +0400}
+ {859672800 18000 1 +0500}
+ {877816800 14400 0 +0400}
+ {891122400 18000 1 +0500}
+ {909266400 14400 0 +0400}
+ {922572000 18000 1 +0500}
+ {941320800 14400 0 +0400}
+ {954021600 18000 1 +0500}
+ {972770400 14400 0 +0400}
+ {985471200 18000 1 +0500}
+ {1004220000 14400 0 +0400}
+ {1017525600 18000 1 +0500}
+ {1035669600 14400 0 +0400}
+ {1048975200 18000 1 +0500}
+ {1067119200 14400 0 +0400}
+ {1080424800 18000 1 +0500}
+ {1099173600 14400 0 +0400}
+ {1111874400 18000 1 +0500}
+ {1130623200 14400 0 +0400}
+ {1143324000 18000 1 +0500}
+ {1162072800 14400 0 +0400}
+ {1174773600 18000 1 +0500}
+ {1193522400 14400 0 +0400}
+ {1206828000 18000 1 +0500}
+ {1224972000 14400 0 +0400}
+ {1238277600 18000 1 +0500}
+ {1256421600 14400 0 +0400}
+ {1269727200 18000 1 +0500}
+ {1288476000 14400 0 +0400}
+ {1293825600 14400 0 +0400}
+ {1301176800 18000 1 +0500}
+ {1319925600 14400 0 +0400}
}
diff --git a/library/tzdata/Atlantic/Azores b/library/tzdata/Atlantic/Azores
index 0b7f615..1591e61 100644
--- a/library/tzdata/Atlantic/Azores
+++ b/library/tzdata/Atlantic/Azores
@@ -3,345 +3,344 @@
set TZData(:Atlantic/Azores) {
{-9223372036854775808 -6160 0 LMT}
{-2713904240 -6872 0 HMT}
- {-1830376800 -7200 0 -02}
- {-1689548400 -3600 1 -01}
- {-1677794400 -7200 0 -02}
- {-1667430000 -3600 1 -01}
- {-1647730800 -7200 0 -02}
- {-1635807600 -3600 1 -01}
- {-1616194800 -7200 0 -02}
- {-1604358000 -3600 1 -01}
- {-1584658800 -7200 0 -02}
- {-1572735600 -3600 1 -01}
- {-1553036400 -7200 0 -02}
- {-1541199600 -3600 1 -01}
- {-1521500400 -7200 0 -02}
- {-1442444400 -3600 1 -01}
- {-1426806000 -7200 0 -02}
- {-1379286000 -3600 1 -01}
- {-1364770800 -7200 0 -02}
- {-1348441200 -3600 1 -01}
- {-1333321200 -7200 0 -02}
- {-1316386800 -3600 1 -01}
- {-1301266800 -7200 0 -02}
- {-1284332400 -3600 1 -01}
- {-1269817200 -7200 0 -02}
- {-1221433200 -3600 1 -01}
- {-1206918000 -7200 0 -02}
- {-1191193200 -3600 1 -01}
- {-1175468400 -7200 0 -02}
- {-1127689200 -3600 1 -01}
- {-1111964400 -7200 0 -02}
- {-1096844400 -3600 1 -01}
- {-1080514800 -7200 0 -02}
- {-1063580400 -3600 1 -01}
- {-1049065200 -7200 0 -02}
- {-1033340400 -3600 1 -01}
- {-1017615600 -7200 0 -02}
- {-1002495600 -3600 1 -01}
- {-986166000 -7200 0 -02}
- {-969231600 -3600 1 -01}
- {-950482800 -7200 0 -02}
- {-942015600 -3600 1 -01}
- {-922662000 -7200 0 -02}
- {-906937200 -3600 1 -01}
- {-891126000 -7200 0 -02}
- {-877302000 -3600 1 -01}
- {-864000000 -3600 0 -01}
- {-857948400 -7200 0 -02}
- {-845852400 -3600 1 -01}
- {-831340800 -3600 0 -01}
- {-825894000 -7200 0 -02}
- {-814402800 -3600 1 -01}
- {-799891200 -3600 0 -01}
- {-794444400 -7200 0 -02}
- {-782953200 -3600 1 -01}
- {-768441600 -3600 0 -01}
- {-762994800 -7200 0 -02}
- {-749084400 -3600 1 -01}
- {-733359600 -7200 0 -02}
- {-717624000 -3600 1 -01}
- {-701899200 -7200 0 -02}
- {-686174400 -3600 1 -01}
- {-670449600 -7200 0 -02}
- {-654724800 -3600 1 -01}
- {-639000000 -7200 0 -02}
- {-623275200 -3600 1 -01}
- {-607550400 -7200 0 -02}
- {-591825600 -3600 1 -01}
- {-575496000 -7200 0 -02}
- {-559771200 -3600 1 -01}
- {-544046400 -7200 0 -02}
- {-528321600 -3600 1 -01}
- {-512596800 -7200 0 -02}
- {-496872000 -3600 1 -01}
- {-481147200 -7200 0 -02}
- {-465422400 -3600 1 -01}
- {-449697600 -7200 0 -02}
- {-433972800 -3600 1 -01}
- {-417643200 -7200 0 -02}
- {-401918400 -3600 1 -01}
- {-386193600 -7200 0 -02}
- {-370468800 -3600 1 -01}
- {-354744000 -7200 0 -02}
- {-339019200 -3600 1 -01}
- {-323294400 -7200 0 -02}
- {-307569600 -3600 1 -01}
- {-291844800 -7200 0 -02}
- {-276120000 -3600 1 -01}
- {-260395200 -7200 0 -02}
- {-244670400 -3600 1 -01}
- {-228340800 -7200 0 -02}
- {-212616000 -3600 1 -01}
- {-196891200 -7200 0 -02}
- {-181166400 -3600 1 -01}
- {-165441600 -7200 0 -02}
- {-149716800 -3600 1 -01}
- {-133992000 -7200 0 -02}
- {-118267200 -3600 0 -01}
- {228272400 0 1 +00}
- {243997200 -3600 0 -01}
- {260326800 0 1 +00}
- {276051600 -3600 0 -01}
- {291776400 0 1 +00}
- {307504800 -3600 0 -01}
- {323226000 0 1 +00}
- {338954400 -3600 0 -01}
- {354679200 0 1 +00}
- {370404000 -3600 0 -01}
- {386128800 0 1 +00}
- {401853600 -3600 0 -01}
- {417582000 0 1 +00}
- {433303200 -3600 0 -01}
- {449028000 0 1 +00}
- {465357600 -3600 0 -01}
- {481082400 0 1 +00}
- {496807200 -3600 0 -01}
- {512532000 0 1 +00}
- {528256800 -3600 0 -01}
- {543981600 0 1 +00}
- {559706400 -3600 0 -01}
- {575431200 0 1 +00}
- {591156000 -3600 0 -01}
- {606880800 0 1 +00}
- {622605600 -3600 0 -01}
- {638330400 0 1 +00}
- {654660000 -3600 0 -01}
- {670384800 0 1 +00}
- {686109600 -3600 0 -01}
- {701834400 0 1 +00}
- {733280400 0 0 +00}
- {749005200 -3600 0 -01}
- {764730000 0 1 +00}
- {780454800 -3600 0 -01}
- {796179600 0 1 +00}
- {811904400 -3600 0 -01}
- {828234000 0 1 +00}
- {846378000 -3600 0 -01}
- {859683600 0 1 +00}
- {877827600 -3600 0 -01}
- {891133200 0 1 +00}
- {909277200 -3600 0 -01}
- {922582800 0 1 +00}
- {941331600 -3600 0 -01}
- {954032400 0 1 +00}
- {972781200 -3600 0 -01}
- {985482000 0 1 +00}
- {1004230800 -3600 0 -01}
- {1017536400 0 1 +00}
- {1035680400 -3600 0 -01}
- {1048986000 0 1 +00}
- {1067130000 -3600 0 -01}
- {1080435600 0 1 +00}
- {1099184400 -3600 0 -01}
- {1111885200 0 1 +00}
- {1130634000 -3600 0 -01}
- {1143334800 0 1 +00}
- {1162083600 -3600 0 -01}
- {1174784400 0 1 +00}
- {1193533200 -3600 0 -01}
- {1206838800 0 1 +00}
- {1224982800 -3600 0 -01}
- {1238288400 0 1 +00}
- {1256432400 -3600 0 -01}
- {1269738000 0 1 +00}
- {1288486800 -3600 0 -01}
- {1301187600 0 1 +00}
- {1319936400 -3600 0 -01}
- {1332637200 0 1 +00}
- {1351386000 -3600 0 -01}
- {1364691600 0 1 +00}
- {1382835600 -3600 0 -01}
- {1396141200 0 1 +00}
- {1414285200 -3600 0 -01}
- {1427590800 0 1 +00}
- {1445734800 -3600 0 -01}
- {1459040400 0 1 +00}
- {1477789200 -3600 0 -01}
- {1490490000 0 1 +00}
- {1509238800 -3600 0 -01}
- {1521939600 0 1 +00}
- {1540688400 -3600 0 -01}
- {1553994000 0 1 +00}
- {1572138000 -3600 0 -01}
- {1585443600 0 1 +00}
- {1603587600 -3600 0 -01}
- {1616893200 0 1 +00}
- {1635642000 -3600 0 -01}
- {1648342800 0 1 +00}
- {1667091600 -3600 0 -01}
- {1679792400 0 1 +00}
- {1698541200 -3600 0 -01}
- {1711846800 0 1 +00}
- {1729990800 -3600 0 -01}
- {1743296400 0 1 +00}
- {1761440400 -3600 0 -01}
- {1774746000 0 1 +00}
- {1792890000 -3600 0 -01}
- {1806195600 0 1 +00}
- {1824944400 -3600 0 -01}
- {1837645200 0 1 +00}
- {1856394000 -3600 0 -01}
- {1869094800 0 1 +00}
- {1887843600 -3600 0 -01}
- {1901149200 0 1 +00}
- {1919293200 -3600 0 -01}
- {1932598800 0 1 +00}
- {1950742800 -3600 0 -01}
- {1964048400 0 1 +00}
- {1982797200 -3600 0 -01}
- {1995498000 0 1 +00}
- {2014246800 -3600 0 -01}
- {2026947600 0 1 +00}
- {2045696400 -3600 0 -01}
- {2058397200 0 1 +00}
- {2077146000 -3600 0 -01}
- {2090451600 0 1 +00}
- {2108595600 -3600 0 -01}
- {2121901200 0 1 +00}
- {2140045200 -3600 0 -01}
- {2153350800 0 1 +00}
- {2172099600 -3600 0 -01}
- {2184800400 0 1 +00}
- {2203549200 -3600 0 -01}
- {2216250000 0 1 +00}
- {2234998800 -3600 0 -01}
- {2248304400 0 1 +00}
- {2266448400 -3600 0 -01}
- {2279754000 0 1 +00}
- {2297898000 -3600 0 -01}
- {2311203600 0 1 +00}
- {2329347600 -3600 0 -01}
- {2342653200 0 1 +00}
- {2361402000 -3600 0 -01}
- {2374102800 0 1 +00}
- {2392851600 -3600 0 -01}
- {2405552400 0 1 +00}
- {2424301200 -3600 0 -01}
- {2437606800 0 1 +00}
- {2455750800 -3600 0 -01}
- {2469056400 0 1 +00}
- {2487200400 -3600 0 -01}
- {2500506000 0 1 +00}
- {2519254800 -3600 0 -01}
- {2531955600 0 1 +00}
- {2550704400 -3600 0 -01}
- {2563405200 0 1 +00}
- {2582154000 -3600 0 -01}
- {2595459600 0 1 +00}
- {2613603600 -3600 0 -01}
- {2626909200 0 1 +00}
- {2645053200 -3600 0 -01}
- {2658358800 0 1 +00}
- {2676502800 -3600 0 -01}
- {2689808400 0 1 +00}
- {2708557200 -3600 0 -01}
- {2721258000 0 1 +00}
- {2740006800 -3600 0 -01}
- {2752707600 0 1 +00}
- {2771456400 -3600 0 -01}
- {2784762000 0 1 +00}
- {2802906000 -3600 0 -01}
- {2816211600 0 1 +00}
- {2834355600 -3600 0 -01}
- {2847661200 0 1 +00}
- {2866410000 -3600 0 -01}
- {2879110800 0 1 +00}
- {2897859600 -3600 0 -01}
- {2910560400 0 1 +00}
- {2929309200 -3600 0 -01}
- {2942010000 0 1 +00}
- {2960758800 -3600 0 -01}
- {2974064400 0 1 +00}
- {2992208400 -3600 0 -01}
- {3005514000 0 1 +00}
- {3023658000 -3600 0 -01}
- {3036963600 0 1 +00}
- {3055712400 -3600 0 -01}
- {3068413200 0 1 +00}
- {3087162000 -3600 0 -01}
- {3099862800 0 1 +00}
- {3118611600 -3600 0 -01}
- {3131917200 0 1 +00}
- {3150061200 -3600 0 -01}
- {3163366800 0 1 +00}
- {3181510800 -3600 0 -01}
- {3194816400 0 1 +00}
- {3212960400 -3600 0 -01}
- {3226266000 0 1 +00}
- {3245014800 -3600 0 -01}
- {3257715600 0 1 +00}
- {3276464400 -3600 0 -01}
- {3289165200 0 1 +00}
- {3307914000 -3600 0 -01}
- {3321219600 0 1 +00}
- {3339363600 -3600 0 -01}
- {3352669200 0 1 +00}
- {3370813200 -3600 0 -01}
- {3384118800 0 1 +00}
- {3402867600 -3600 0 -01}
- {3415568400 0 1 +00}
- {3434317200 -3600 0 -01}
- {3447018000 0 1 +00}
- {3465766800 -3600 0 -01}
- {3479072400 0 1 +00}
- {3497216400 -3600 0 -01}
- {3510522000 0 1 +00}
- {3528666000 -3600 0 -01}
- {3541971600 0 1 +00}
- {3560115600 -3600 0 -01}
- {3573421200 0 1 +00}
- {3592170000 -3600 0 -01}
- {3604870800 0 1 +00}
- {3623619600 -3600 0 -01}
- {3636320400 0 1 +00}
- {3655069200 -3600 0 -01}
- {3668374800 0 1 +00}
- {3686518800 -3600 0 -01}
- {3699824400 0 1 +00}
- {3717968400 -3600 0 -01}
- {3731274000 0 1 +00}
- {3750022800 -3600 0 -01}
- {3762723600 0 1 +00}
- {3781472400 -3600 0 -01}
- {3794173200 0 1 +00}
- {3812922000 -3600 0 -01}
- {3825622800 0 1 +00}
- {3844371600 -3600 0 -01}
- {3857677200 0 1 +00}
- {3875821200 -3600 0 -01}
- {3889126800 0 1 +00}
- {3907270800 -3600 0 -01}
- {3920576400 0 1 +00}
- {3939325200 -3600 0 -01}
- {3952026000 0 1 +00}
- {3970774800 -3600 0 -01}
- {3983475600 0 1 +00}
- {4002224400 -3600 0 -01}
- {4015530000 0 1 +00}
- {4033674000 -3600 0 -01}
- {4046979600 0 1 +00}
- {4065123600 -3600 0 -01}
- {4078429200 0 1 +00}
- {4096573200 -3600 0 -01}
+ {-1830376800 -7200 0 -0200}
+ {-1689548400 -3600 1 -0100}
+ {-1677794400 -7200 0 -0200}
+ {-1667426400 -3600 1 -0100}
+ {-1647730800 -7200 0 -0200}
+ {-1635890400 -3600 1 -0100}
+ {-1616194800 -7200 0 -0200}
+ {-1604354400 -3600 1 -0100}
+ {-1584658800 -7200 0 -0200}
+ {-1572732000 -3600 1 -0100}
+ {-1553036400 -7200 0 -0200}
+ {-1541196000 -3600 1 -0100}
+ {-1521500400 -7200 0 -0200}
+ {-1442444400 -3600 1 -0100}
+ {-1427670000 -7200 0 -0200}
+ {-1379286000 -3600 1 -0100}
+ {-1364770800 -7200 0 -0200}
+ {-1348441200 -3600 1 -0100}
+ {-1333321200 -7200 0 -0200}
+ {-1316386800 -3600 1 -0100}
+ {-1301266800 -7200 0 -0200}
+ {-1284332400 -3600 1 -0100}
+ {-1269817200 -7200 0 -0200}
+ {-1221433200 -3600 1 -0100}
+ {-1206918000 -7200 0 -0200}
+ {-1191193200 -3600 1 -0100}
+ {-1175468400 -7200 0 -0200}
+ {-1127689200 -3600 1 -0100}
+ {-1111964400 -7200 0 -0200}
+ {-1096844400 -3600 1 -0100}
+ {-1080514800 -7200 0 -0200}
+ {-1063580400 -3600 1 -0100}
+ {-1049065200 -7200 0 -0200}
+ {-1033340400 -3600 1 -0100}
+ {-1017615600 -7200 0 -0200}
+ {-1002495600 -3600 1 -0100}
+ {-986166000 -7200 0 -0200}
+ {-969231600 -3600 1 -0100}
+ {-950482800 -7200 0 -0200}
+ {-942015600 -3600 1 -0100}
+ {-922489200 -7200 0 -0200}
+ {-906937200 -3600 1 -0100}
+ {-891126000 -7200 0 -0200}
+ {-877302000 -3600 1 -0100}
+ {-873676800 0 1 +0000}
+ {-864000000 -3600 1 -0100}
+ {-857948400 -7200 0 -0200}
+ {-845852400 -3600 1 -0100}
+ {-842832000 0 1 +0000}
+ {-831340800 -3600 1 -0100}
+ {-825894000 -7200 0 -0200}
+ {-814402800 -3600 1 -0100}
+ {-810777600 0 1 +0000}
+ {-799891200 -3600 1 -0100}
+ {-794444400 -7200 0 -0200}
+ {-782953200 -3600 1 -0100}
+ {-779328000 0 1 +0000}
+ {-768441600 -3600 1 -0100}
+ {-762994800 -7200 0 -0200}
+ {-749084400 -3600 1 -0100}
+ {-733359600 -7200 0 -0200}
+ {-717624000 -3600 1 -0100}
+ {-701899200 -7200 0 -0200}
+ {-686174400 -3600 1 -0100}
+ {-670449600 -7200 0 -0200}
+ {-654724800 -3600 1 -0100}
+ {-639000000 -7200 0 -0200}
+ {-623275200 -3600 1 -0100}
+ {-607550400 -7200 0 -0200}
+ {-591825600 -3600 1 -0100}
+ {-575496000 -7200 0 -0200}
+ {-559771200 -3600 1 -0100}
+ {-544046400 -7200 0 -0200}
+ {-528321600 -3600 1 -0100}
+ {-512596800 -7200 0 -0200}
+ {-496872000 -3600 1 -0100}
+ {-481147200 -7200 0 -0200}
+ {-465422400 -3600 1 -0100}
+ {-449697600 -7200 0 -0200}
+ {-433972800 -3600 1 -0100}
+ {-417643200 -7200 0 -0200}
+ {-401918400 -3600 1 -0100}
+ {-386193600 -7200 0 -0200}
+ {-370468800 -3600 1 -0100}
+ {-354744000 -7200 0 -0200}
+ {-339019200 -3600 1 -0100}
+ {-323294400 -7200 0 -0200}
+ {-307569600 -3600 1 -0100}
+ {-291844800 -7200 0 -0200}
+ {-276120000 -3600 1 -0100}
+ {-260395200 -7200 0 -0200}
+ {-244670400 -3600 1 -0100}
+ {-228340800 -7200 0 -0200}
+ {-212616000 -3600 1 -0100}
+ {-196891200 -7200 0 -0200}
+ {-181166400 -3600 1 -0100}
+ {-165441600 -7200 0 -0200}
+ {-149716800 -3600 1 -0100}
+ {-133992000 -7200 0 -0200}
+ {-118267200 -3600 1 -0100}
+ {-102542400 -3600 0 -0100}
+ {386125200 0 0 +0000}
+ {401850000 -3600 0 -0100}
+ {417574800 0 1 +0000}
+ {433299600 -3600 0 -0100}
+ {449024400 0 1 +0000}
+ {465354000 -3600 0 -0100}
+ {481078800 0 1 +0000}
+ {496803600 -3600 0 -0100}
+ {504925200 -3600 0 -0100}
+ {512528400 0 1 +0000}
+ {528253200 -3600 0 -0100}
+ {543978000 0 1 +0000}
+ {559702800 -3600 0 -0100}
+ {575427600 0 1 +0000}
+ {591152400 -3600 0 -0100}
+ {606877200 0 1 +0000}
+ {622602000 -3600 0 -0100}
+ {638326800 0 1 +0000}
+ {654656400 -3600 0 -0100}
+ {670381200 0 1 +0000}
+ {686106000 -3600 0 -0100}
+ {701830800 0 1 +0000}
+ {717555600 -3600 0 -0100}
+ {725421600 0 0 WET}
+ {733280400 3600 1 WEST}
+ {740278800 0 0 +0000}
+ {749005200 -3600 0 -0100}
+ {764730000 0 1 +0000}
+ {780454800 -3600 0 -0100}
+ {796179600 0 1 +0000}
+ {811904400 -3600 0 -0100}
+ {828234000 0 1 +0000}
+ {846378000 -3600 0 -0100}
+ {859683600 0 1 +0000}
+ {877827600 -3600 0 -0100}
+ {891133200 0 1 +0000}
+ {909277200 -3600 0 -0100}
+ {922582800 0 1 +0000}
+ {941331600 -3600 0 -0100}
+ {954032400 0 1 +0000}
+ {972781200 -3600 0 -0100}
+ {985482000 0 1 +0000}
+ {1004230800 -3600 0 -0100}
+ {1017536400 0 1 +0000}
+ {1035680400 -3600 0 -0100}
+ {1048986000 0 1 +0000}
+ {1067130000 -3600 0 -0100}
+ {1080435600 0 1 +0000}
+ {1099184400 -3600 0 -0100}
+ {1111885200 0 1 +0000}
+ {1130634000 -3600 0 -0100}
+ {1143334800 0 1 +0000}
+ {1162083600 -3600 0 -0100}
+ {1174784400 0 1 +0000}
+ {1193533200 -3600 0 -0100}
+ {1206838800 0 1 +0000}
+ {1224982800 -3600 0 -0100}
+ {1238288400 0 1 +0000}
+ {1256432400 -3600 0 -0100}
+ {1269738000 0 1 +0000}
+ {1288486800 -3600 0 -0100}
+ {1301187600 0 1 +0000}
+ {1319936400 -3600 0 -0100}
+ {1332637200 0 1 +0000}
+ {1351386000 -3600 0 -0100}
+ {1364691600 0 1 +0000}
+ {1382835600 -3600 0 -0100}
+ {1396141200 0 1 +0000}
+ {1414285200 -3600 0 -0100}
+ {1427590800 0 1 +0000}
+ {1445734800 -3600 0 -0100}
+ {1459040400 0 1 +0000}
+ {1477789200 -3600 0 -0100}
+ {1490490000 0 1 +0000}
+ {1509238800 -3600 0 -0100}
+ {1521939600 0 1 +0000}
+ {1540688400 -3600 0 -0100}
+ {1553994000 0 1 +0000}
+ {1572138000 -3600 0 -0100}
+ {1585443600 0 1 +0000}
+ {1603587600 -3600 0 -0100}
+ {1616893200 0 1 +0000}
+ {1635642000 -3600 0 -0100}
+ {1648342800 0 1 +0000}
+ {1667091600 -3600 0 -0100}
+ {1679792400 0 1 +0000}
+ {1698541200 -3600 0 -0100}
+ {1711846800 0 1 +0000}
+ {1729990800 -3600 0 -0100}
+ {1743296400 0 1 +0000}
+ {1761440400 -3600 0 -0100}
+ {1774746000 0 1 +0000}
+ {1792890000 -3600 0 -0100}
+ {1806195600 0 1 +0000}
+ {1824944400 -3600 0 -0100}
+ {1837645200 0 1 +0000}
+ {1856394000 -3600 0 -0100}
+ {1869094800 0 1 +0000}
+ {1887843600 -3600 0 -0100}
+ {1901149200 0 1 +0000}
+ {1919293200 -3600 0 -0100}
+ {1932598800 0 1 +0000}
+ {1950742800 -3600 0 -0100}
+ {1964048400 0 1 +0000}
+ {1982797200 -3600 0 -0100}
+ {1995498000 0 1 +0000}
+ {2014246800 -3600 0 -0100}
+ {2026947600 0 1 +0000}
+ {2045696400 -3600 0 -0100}
+ {2058397200 0 1 +0000}
+ {2077146000 -3600 0 -0100}
+ {2090451600 0 1 +0000}
+ {2108595600 -3600 0 -0100}
+ {2121901200 0 1 +0000}
+ {2140045200 -3600 0 -0100}
+ {2153350800 0 1 +0000}
+ {2172099600 -3600 0 -0100}
+ {2184800400 0 1 +0000}
+ {2203549200 -3600 0 -0100}
+ {2216250000 0 1 +0000}
+ {2234998800 -3600 0 -0100}
+ {2248304400 0 1 +0000}
+ {2266448400 -3600 0 -0100}
+ {2279754000 0 1 +0000}
+ {2297898000 -3600 0 -0100}
+ {2311203600 0 1 +0000}
+ {2329347600 -3600 0 -0100}
+ {2342653200 0 1 +0000}
+ {2361402000 -3600 0 -0100}
+ {2374102800 0 1 +0000}
+ {2392851600 -3600 0 -0100}
+ {2405552400 0 1 +0000}
+ {2424301200 -3600 0 -0100}
+ {2437606800 0 1 +0000}
+ {2455750800 -3600 0 -0100}
+ {2469056400 0 1 +0000}
+ {2487200400 -3600 0 -0100}
+ {2500506000 0 1 +0000}
+ {2519254800 -3600 0 -0100}
+ {2531955600 0 1 +0000}
+ {2550704400 -3600 0 -0100}
+ {2563405200 0 1 +0000}
+ {2582154000 -3600 0 -0100}
+ {2595459600 0 1 +0000}
+ {2613603600 -3600 0 -0100}
+ {2626909200 0 1 +0000}
+ {2645053200 -3600 0 -0100}
+ {2658358800 0 1 +0000}
+ {2676502800 -3600 0 -0100}
+ {2689808400 0 1 +0000}
+ {2708557200 -3600 0 -0100}
+ {2721258000 0 1 +0000}
+ {2740006800 -3600 0 -0100}
+ {2752707600 0 1 +0000}
+ {2771456400 -3600 0 -0100}
+ {2784762000 0 1 +0000}
+ {2802906000 -3600 0 -0100}
+ {2816211600 0 1 +0000}
+ {2834355600 -3600 0 -0100}
+ {2847661200 0 1 +0000}
+ {2866410000 -3600 0 -0100}
+ {2879110800 0 1 +0000}
+ {2897859600 -3600 0 -0100}
+ {2910560400 0 1 +0000}
+ {2929309200 -3600 0 -0100}
+ {2942010000 0 1 +0000}
+ {2960758800 -3600 0 -0100}
+ {2974064400 0 1 +0000}
+ {2992208400 -3600 0 -0100}
+ {3005514000 0 1 +0000}
+ {3023658000 -3600 0 -0100}
+ {3036963600 0 1 +0000}
+ {3055712400 -3600 0 -0100}
+ {3068413200 0 1 +0000}
+ {3087162000 -3600 0 -0100}
+ {3099862800 0 1 +0000}
+ {3118611600 -3600 0 -0100}
+ {3131917200 0 1 +0000}
+ {3150061200 -3600 0 -0100}
+ {3163366800 0 1 +0000}
+ {3181510800 -3600 0 -0100}
+ {3194816400 0 1 +0000}
+ {3212960400 -3600 0 -0100}
+ {3226266000 0 1 +0000}
+ {3245014800 -3600 0 -0100}
+ {3257715600 0 1 +0000}
+ {3276464400 -3600 0 -0100}
+ {3289165200 0 1 +0000}
+ {3307914000 -3600 0 -0100}
+ {3321219600 0 1 +0000}
+ {3339363600 -3600 0 -0100}
+ {3352669200 0 1 +0000}
+ {3370813200 -3600 0 -0100}
+ {3384118800 0 1 +0000}
+ {3402867600 -3600 0 -0100}
+ {3415568400 0 1 +0000}
+ {3434317200 -3600 0 -0100}
+ {3447018000 0 1 +0000}
+ {3465766800 -3600 0 -0100}
+ {3479072400 0 1 +0000}
+ {3497216400 -3600 0 -0100}
+ {3510522000 0 1 +0000}
+ {3528666000 -3600 0 -0100}
+ {3541971600 0 1 +0000}
+ {3560115600 -3600 0 -0100}
+ {3573421200 0 1 +0000}
+ {3592170000 -3600 0 -0100}
+ {3604870800 0 1 +0000}
+ {3623619600 -3600 0 -0100}
+ {3636320400 0 1 +0000}
+ {3655069200 -3600 0 -0100}
+ {3668374800 0 1 +0000}
+ {3686518800 -3600 0 -0100}
+ {3699824400 0 1 +0000}
+ {3717968400 -3600 0 -0100}
+ {3731274000 0 1 +0000}
+ {3750022800 -3600 0 -0100}
+ {3762723600 0 1 +0000}
+ {3781472400 -3600 0 -0100}
+ {3794173200 0 1 +0000}
+ {3812922000 -3600 0 -0100}
+ {3825622800 0 1 +0000}
+ {3844371600 -3600 0 -0100}
+ {3857677200 0 1 +0000}
+ {3875821200 -3600 0 -0100}
+ {3889126800 0 1 +0000}
+ {3907270800 -3600 0 -0100}
+ {3920576400 0 1 +0000}
+ {3939325200 -3600 0 -0100}
+ {3952026000 0 1 +0000}
+ {3970774800 -3600 0 -0100}
+ {3983475600 0 1 +0000}
+ {4002224400 -3600 0 -0100}
+ {4015530000 0 1 +0000}
+ {4033674000 -3600 0 -0100}
+ {4046979600 0 1 +0000}
+ {4065123600 -3600 0 -0100}
+ {4078429200 0 1 +0000}
+ {4096573200 -3600 0 -0100}
}
diff --git a/library/tzdata/Atlantic/Canary b/library/tzdata/Atlantic/Canary
index b5c2997..12d2984 100644
--- a/library/tzdata/Atlantic/Canary
+++ b/library/tzdata/Atlantic/Canary
@@ -2,7 +2,7 @@
set TZData(:Atlantic/Canary) {
{-9223372036854775808 -3696 0 LMT}
- {-1509663504 -3600 0 -01}
+ {-1509663504 -3600 0 -0100}
{-733874400 0 0 WET}
{323827200 3600 1 WEST}
{338950800 0 0 WET}
diff --git a/library/tzdata/Atlantic/Cape_Verde b/library/tzdata/Atlantic/Cape_Verde
index 595db0b..5d94ea7 100644
--- a/library/tzdata/Atlantic/Cape_Verde
+++ b/library/tzdata/Atlantic/Cape_Verde
@@ -2,8 +2,8 @@
set TZData(:Atlantic/Cape_Verde) {
{-9223372036854775808 -5644 0 LMT}
- {-1830376800 -7200 0 -02}
- {-862610400 -3600 1 -01}
- {-764118000 -7200 0 -02}
- {186120000 -3600 0 -01}
+ {-1830376800 -7200 0 -0200}
+ {-862610400 -3600 1 -0100}
+ {-764118000 -7200 0 -0200}
+ {186120000 -3600 0 -0100}
}
diff --git a/library/tzdata/Atlantic/Madeira b/library/tzdata/Atlantic/Madeira
index 8a3b7e8..71b45e7 100644
--- a/library/tzdata/Atlantic/Madeira
+++ b/library/tzdata/Atlantic/Madeira
@@ -3,121 +3,117 @@
set TZData(:Atlantic/Madeira) {
{-9223372036854775808 -4056 0 LMT}
{-2713906344 -4056 0 FMT}
- {-1830380400 -3600 0 -01}
- {-1689552000 0 1 +00}
- {-1677798000 -3600 0 -01}
- {-1667433600 0 1 +00}
- {-1647734400 -3600 0 -01}
- {-1635811200 0 1 +00}
- {-1616198400 -3600 0 -01}
- {-1604361600 0 1 +00}
- {-1584662400 -3600 0 -01}
- {-1572739200 0 1 +00}
- {-1553040000 -3600 0 -01}
- {-1541203200 0 1 +00}
- {-1521504000 -3600 0 -01}
- {-1442448000 0 1 +00}
- {-1426809600 -3600 0 -01}
- {-1379289600 0 1 +00}
- {-1364774400 -3600 0 -01}
- {-1348444800 0 1 +00}
- {-1333324800 -3600 0 -01}
- {-1316390400 0 1 +00}
- {-1301270400 -3600 0 -01}
- {-1284336000 0 1 +00}
- {-1269820800 -3600 0 -01}
- {-1221436800 0 1 +00}
- {-1206921600 -3600 0 -01}
- {-1191196800 0 1 +00}
- {-1175472000 -3600 0 -01}
- {-1127692800 0 1 +00}
- {-1111968000 -3600 0 -01}
- {-1096848000 0 1 +00}
- {-1080518400 -3600 0 -01}
- {-1063584000 0 1 +00}
- {-1049068800 -3600 0 -01}
- {-1033344000 0 1 +00}
- {-1017619200 -3600 0 -01}
- {-1002499200 0 1 +00}
- {-986169600 -3600 0 -01}
- {-969235200 0 1 +00}
- {-950486400 -3600 0 -01}
- {-942019200 0 1 +00}
- {-922665600 -3600 0 -01}
- {-906940800 0 1 +00}
- {-891129600 -3600 0 -01}
- {-877305600 0 1 +00}
- {-864003600 0 0 +00}
- {-857952000 -3600 0 -01}
- {-845856000 0 1 +00}
- {-831344400 0 0 +00}
- {-825897600 -3600 0 -01}
- {-814406400 0 1 +00}
- {-799894800 0 0 +00}
- {-794448000 -3600 0 -01}
- {-782956800 0 1 +00}
- {-768445200 0 0 +00}
- {-762998400 -3600 0 -01}
- {-749088000 0 1 +00}
- {-733363200 -3600 0 -01}
- {-717627600 0 1 +00}
- {-701902800 -3600 0 -01}
- {-686178000 0 1 +00}
- {-670453200 -3600 0 -01}
- {-654728400 0 1 +00}
- {-639003600 -3600 0 -01}
- {-623278800 0 1 +00}
- {-607554000 -3600 0 -01}
- {-591829200 0 1 +00}
- {-575499600 -3600 0 -01}
- {-559774800 0 1 +00}
- {-544050000 -3600 0 -01}
- {-528325200 0 1 +00}
- {-512600400 -3600 0 -01}
- {-496875600 0 1 +00}
- {-481150800 -3600 0 -01}
- {-465426000 0 1 +00}
- {-449701200 -3600 0 -01}
- {-433976400 0 1 +00}
- {-417646800 -3600 0 -01}
- {-401922000 0 1 +00}
- {-386197200 -3600 0 -01}
- {-370472400 0 1 +00}
- {-354747600 -3600 0 -01}
- {-339022800 0 1 +00}
- {-323298000 -3600 0 -01}
- {-307573200 0 1 +00}
- {-291848400 -3600 0 -01}
- {-276123600 0 1 +00}
- {-260398800 -3600 0 -01}
- {-244674000 0 1 +00}
- {-228344400 -3600 0 -01}
- {-212619600 0 1 +00}
- {-196894800 -3600 0 -01}
- {-181170000 0 1 +00}
- {-165445200 -3600 0 -01}
- {-149720400 0 1 +00}
- {-133995600 -3600 0 -01}
- {-118270800 0 0 WET}
- {228268800 3600 1 WEST}
- {243993600 0 0 WET}
- {260323200 3600 1 WEST}
- {276048000 0 0 WET}
- {291772800 3600 1 WEST}
- {307501200 0 0 WET}
- {323222400 3600 1 WEST}
- {338950800 0 0 WET}
- {354675600 3600 1 WEST}
- {370400400 0 0 WET}
- {386125200 3600 1 WEST}
- {401850000 0 0 WET}
- {417578400 3600 1 WEST}
- {433299600 0 0 WET}
- {449024400 3600 1 WEST}
- {465354000 0 0 WET}
- {481078800 3600 1 WEST}
- {496803600 0 0 WET}
- {512528400 3600 1 WEST}
+ {-1830380400 -3600 0 -0100}
+ {-1689552000 0 1 +0000}
+ {-1677798000 -3600 0 -0100}
+ {-1667430000 0 1 +0000}
+ {-1647734400 -3600 0 -0100}
+ {-1635894000 0 1 +0000}
+ {-1616198400 -3600 0 -0100}
+ {-1604358000 0 1 +0000}
+ {-1584662400 -3600 0 -0100}
+ {-1572735600 0 1 +0000}
+ {-1553040000 -3600 0 -0100}
+ {-1541199600 0 1 +0000}
+ {-1521504000 -3600 0 -0100}
+ {-1442448000 0 1 +0000}
+ {-1427673600 -3600 0 -0100}
+ {-1379289600 0 1 +0000}
+ {-1364774400 -3600 0 -0100}
+ {-1348444800 0 1 +0000}
+ {-1333324800 -3600 0 -0100}
+ {-1316390400 0 1 +0000}
+ {-1301270400 -3600 0 -0100}
+ {-1284336000 0 1 +0000}
+ {-1269820800 -3600 0 -0100}
+ {-1221436800 0 1 +0000}
+ {-1206921600 -3600 0 -0100}
+ {-1191196800 0 1 +0000}
+ {-1175472000 -3600 0 -0100}
+ {-1127692800 0 1 +0000}
+ {-1111968000 -3600 0 -0100}
+ {-1096848000 0 1 +0000}
+ {-1080518400 -3600 0 -0100}
+ {-1063584000 0 1 +0000}
+ {-1049068800 -3600 0 -0100}
+ {-1033344000 0 1 +0000}
+ {-1017619200 -3600 0 -0100}
+ {-1002499200 0 1 +0000}
+ {-986169600 -3600 0 -0100}
+ {-969235200 0 1 +0000}
+ {-950486400 -3600 0 -0100}
+ {-942019200 0 1 +0000}
+ {-922492800 -3600 0 -0100}
+ {-906940800 0 1 +0000}
+ {-891129600 -3600 0 -0100}
+ {-877305600 0 1 +0000}
+ {-873680400 3600 1 +0100}
+ {-864003600 0 1 +0000}
+ {-857952000 -3600 0 -0100}
+ {-845856000 0 1 +0000}
+ {-842835600 3600 1 +0100}
+ {-831344400 0 1 +0000}
+ {-825897600 -3600 0 -0100}
+ {-814406400 0 1 +0000}
+ {-810781200 3600 1 +0100}
+ {-799894800 0 1 +0000}
+ {-794448000 -3600 0 -0100}
+ {-782956800 0 1 +0000}
+ {-779331600 3600 1 +0100}
+ {-768445200 0 1 +0000}
+ {-762998400 -3600 0 -0100}
+ {-749088000 0 1 +0000}
+ {-733363200 -3600 0 -0100}
+ {-717627600 0 1 +0000}
+ {-701902800 -3600 0 -0100}
+ {-686178000 0 1 +0000}
+ {-670453200 -3600 0 -0100}
+ {-654728400 0 1 +0000}
+ {-639003600 -3600 0 -0100}
+ {-623278800 0 1 +0000}
+ {-607554000 -3600 0 -0100}
+ {-591829200 0 1 +0000}
+ {-575499600 -3600 0 -0100}
+ {-559774800 0 1 +0000}
+ {-544050000 -3600 0 -0100}
+ {-528325200 0 1 +0000}
+ {-512600400 -3600 0 -0100}
+ {-496875600 0 1 +0000}
+ {-481150800 -3600 0 -0100}
+ {-465426000 0 1 +0000}
+ {-449701200 -3600 0 -0100}
+ {-433976400 0 1 +0000}
+ {-417646800 -3600 0 -0100}
+ {-401922000 0 1 +0000}
+ {-386197200 -3600 0 -0100}
+ {-370472400 0 1 +0000}
+ {-354747600 -3600 0 -0100}
+ {-339022800 0 1 +0000}
+ {-323298000 -3600 0 -0100}
+ {-307573200 0 1 +0000}
+ {-291848400 -3600 0 -0100}
+ {-276123600 0 1 +0000}
+ {-260398800 -3600 0 -0100}
+ {-244674000 0 1 +0000}
+ {-228344400 -3600 0 -0100}
+ {-212619600 0 1 +0000}
+ {-196894800 -3600 0 -0100}
+ {-181170000 0 1 +0000}
+ {-165445200 -3600 0 -0100}
+ {-149720400 0 1 +0000}
+ {-133995600 -3600 0 -0100}
+ {-118270800 0 1 +0000}
+ {-102546000 0 0 WET}
+ {386726400 3600 0 WEST}
+ {401846400 0 0 WET}
+ {417571200 3600 1 WEST}
+ {433296000 0 0 WET}
+ {449020800 3600 1 WEST}
+ {465350400 0 0 WET}
+ {481075200 3600 1 WEST}
+ {496800000 0 0 WET}
+ {512524800 3600 1 WEST}
+ {523148400 3600 0 WEST}
{528253200 0 0 WET}
{543978000 3600 1 WEST}
{559702800 0 0 WET}
diff --git a/library/tzdata/Atlantic/South_Georgia b/library/tzdata/Atlantic/South_Georgia
index eb7307c..57a3a63 100644
--- a/library/tzdata/Atlantic/South_Georgia
+++ b/library/tzdata/Atlantic/South_Georgia
@@ -2,5 +2,5 @@
set TZData(:Atlantic/South_Georgia) {
{-9223372036854775808 -8768 0 LMT}
- {-2524512832 -7200 0 -02}
+ {-2524512832 -7200 0 -0200}
}
diff --git a/library/tzdata/Atlantic/Stanley b/library/tzdata/Atlantic/Stanley
index 48473ca..7914fe8 100644
--- a/library/tzdata/Atlantic/Stanley
+++ b/library/tzdata/Atlantic/Stanley
@@ -3,73 +3,73 @@
set TZData(:Atlantic/Stanley) {
{-9223372036854775808 -13884 0 LMT}
{-2524507716 -13884 0 SMT}
- {-1824235716 -14400 0 -04}
- {-1018209600 -10800 1 -04}
- {-1003093200 -14400 0 -04}
- {-986760000 -10800 1 -04}
- {-971643600 -14400 0 -04}
- {-954705600 -10800 1 -04}
- {-939589200 -14400 0 -04}
- {-923256000 -10800 1 -04}
- {-908139600 -14400 0 -04}
- {-891806400 -10800 1 -04}
- {-876690000 -14400 0 -04}
- {-860356800 -10800 1 -04}
- {420606000 -7200 0 -03}
- {433303200 -7200 1 -03}
- {452052000 -10800 0 -03}
- {464151600 -7200 1 -03}
- {483501600 -10800 0 -03}
- {495597600 -14400 0 -04}
- {495604800 -10800 1 -04}
- {514350000 -14400 0 -04}
- {527054400 -10800 1 -04}
- {545799600 -14400 0 -04}
- {558504000 -10800 1 -04}
- {577249200 -14400 0 -04}
- {589953600 -10800 1 -04}
- {608698800 -14400 0 -04}
- {621403200 -10800 1 -04}
- {640753200 -14400 0 -04}
- {652852800 -10800 1 -04}
- {672202800 -14400 0 -04}
- {684907200 -10800 1 -04}
- {703652400 -14400 0 -04}
- {716356800 -10800 1 -04}
- {735102000 -14400 0 -04}
- {747806400 -10800 1 -04}
- {766551600 -14400 0 -04}
- {779256000 -10800 1 -04}
- {798001200 -14400 0 -04}
- {810705600 -10800 1 -04}
- {830055600 -14400 0 -04}
- {842760000 -10800 1 -04}
- {861505200 -14400 0 -04}
- {874209600 -10800 1 -04}
- {892954800 -14400 0 -04}
- {905659200 -10800 1 -04}
- {924404400 -14400 0 -04}
- {937108800 -10800 1 -04}
- {955854000 -14400 0 -04}
- {968558400 -10800 1 -04}
- {987310800 -14400 0 -04}
- {999410400 -10800 1 -04}
- {1019365200 -14400 0 -04}
- {1030860000 -10800 1 -04}
- {1050814800 -14400 0 -04}
- {1062914400 -10800 1 -04}
- {1082264400 -14400 0 -04}
- {1094364000 -10800 1 -04}
- {1113714000 -14400 0 -04}
- {1125813600 -10800 1 -04}
- {1145163600 -14400 0 -04}
- {1157263200 -10800 1 -04}
- {1176613200 -14400 0 -04}
- {1188712800 -10800 1 -04}
- {1208667600 -14400 0 -04}
- {1220767200 -10800 1 -04}
- {1240117200 -14400 0 -04}
- {1252216800 -10800 1 -04}
- {1271566800 -14400 0 -04}
- {1283662800 -10800 0 -03}
+ {-1824235716 -14400 0 -0400}
+ {-1018209600 -10800 1 -0300}
+ {-1003093200 -14400 0 -0400}
+ {-986760000 -10800 1 -0300}
+ {-971643600 -14400 0 -0400}
+ {-954705600 -10800 1 -0300}
+ {-939589200 -14400 0 -0400}
+ {-923256000 -10800 1 -0300}
+ {-908139600 -14400 0 -0400}
+ {-891806400 -10800 1 -0300}
+ {-876690000 -14400 0 -0400}
+ {-860356800 -10800 1 -0300}
+ {420606000 -7200 0 -0200}
+ {433303200 -7200 1 -0200}
+ {452052000 -10800 0 -0300}
+ {464151600 -7200 1 -0200}
+ {483501600 -10800 0 -0300}
+ {495597600 -14400 0 -0400}
+ {495604800 -10800 1 -0300}
+ {514350000 -14400 0 -0400}
+ {527054400 -10800 1 -0300}
+ {545799600 -14400 0 -0400}
+ {558504000 -10800 1 -0300}
+ {577249200 -14400 0 -0400}
+ {589953600 -10800 1 -0300}
+ {608698800 -14400 0 -0400}
+ {621403200 -10800 1 -0300}
+ {640753200 -14400 0 -0400}
+ {652852800 -10800 1 -0300}
+ {672202800 -14400 0 -0400}
+ {684907200 -10800 1 -0300}
+ {703652400 -14400 0 -0400}
+ {716356800 -10800 1 -0300}
+ {735102000 -14400 0 -0400}
+ {747806400 -10800 1 -0300}
+ {766551600 -14400 0 -0400}
+ {779256000 -10800 1 -0300}
+ {798001200 -14400 0 -0400}
+ {810705600 -10800 1 -0300}
+ {830055600 -14400 0 -0400}
+ {842760000 -10800 1 -0300}
+ {861505200 -14400 0 -0400}
+ {874209600 -10800 1 -0300}
+ {892954800 -14400 0 -0400}
+ {905659200 -10800 1 -0300}
+ {924404400 -14400 0 -0400}
+ {937108800 -10800 1 -0300}
+ {955854000 -14400 0 -0400}
+ {968558400 -10800 1 -0300}
+ {987310800 -14400 0 -0400}
+ {999410400 -10800 1 -0300}
+ {1019365200 -14400 0 -0400}
+ {1030860000 -10800 1 -0300}
+ {1050814800 -14400 0 -0400}
+ {1062914400 -10800 1 -0300}
+ {1082264400 -14400 0 -0400}
+ {1094364000 -10800 1 -0300}
+ {1113714000 -14400 0 -0400}
+ {1125813600 -10800 1 -0300}
+ {1145163600 -14400 0 -0400}
+ {1157263200 -10800 1 -0300}
+ {1176613200 -14400 0 -0400}
+ {1188712800 -10800 1 -0300}
+ {1208667600 -14400 0 -0400}
+ {1220767200 -10800 1 -0300}
+ {1240117200 -14400 0 -0400}
+ {1252216800 -10800 1 -0300}
+ {1271566800 -14400 0 -0400}
+ {1283662800 -10800 0 -0300}
}
diff --git a/library/tzdata/Australia/Eucla b/library/tzdata/Australia/Eucla
index 1d81a3d..3a12462 100644
--- a/library/tzdata/Australia/Eucla
+++ b/library/tzdata/Australia/Eucla
@@ -2,24 +2,24 @@
set TZData(:Australia/Eucla) {
{-9223372036854775808 30928 0 LMT}
- {-2337928528 31500 0 +0945}
+ {-2337928528 31500 0 +0845}
{-1672555500 35100 1 +0945}
- {-1665384300 31500 0 +0945}
+ {-1665384300 31500 0 +0845}
{-883637100 35100 1 +0945}
- {-876120300 31500 0 +0945}
+ {-876120300 31500 0 +0845}
{-860395500 35100 1 +0945}
- {-844670700 31500 0 +0945}
+ {-844670700 31500 0 +0845}
{-836473500 35100 0 +0945}
{152039700 35100 1 +0945}
- {162926100 31500 0 +0945}
+ {162926100 31500 0 +0845}
{436295700 35100 1 +0945}
- {447182100 31500 0 +0945}
+ {447182100 31500 0 +0845}
{690311700 35100 1 +0945}
- {699383700 31500 0 +0945}
+ {699383700 31500 0 +0845}
{1165079700 35100 1 +0945}
- {1174756500 31500 0 +0945}
+ {1174756500 31500 0 +0845}
{1193505300 35100 1 +0945}
- {1206810900 31500 0 +0945}
+ {1206810900 31500 0 +0845}
{1224954900 35100 1 +0945}
- {1238260500 31500 0 +0945}
+ {1238260500 31500 0 +0845}
}
diff --git a/library/tzdata/Australia/Lord_Howe b/library/tzdata/Australia/Lord_Howe
index c595967..b60aca4 100644
--- a/library/tzdata/Australia/Lord_Howe
+++ b/library/tzdata/Australia/Lord_Howe
@@ -4,242 +4,242 @@ set TZData(:Australia/Lord_Howe) {
{-9223372036854775808 38180 0 LMT}
{-2364114980 36000 0 AEST}
{352216800 37800 0 +1030}
- {372785400 41400 1 +1030}
+ {372785400 41400 1 +1130}
{384273000 37800 0 +1030}
- {404839800 41400 1 +1030}
+ {404839800 41400 1 +1130}
{415722600 37800 0 +1030}
- {436289400 41400 1 +1030}
+ {436289400 41400 1 +1130}
{447172200 37800 0 +1030}
- {467739000 41400 1 +1030}
+ {467739000 41400 1 +1130}
{478621800 37800 0 +1030}
{488984400 37800 0 +1030}
- {499188600 39600 1 +1030}
+ {499188600 39600 1 +1100}
{511282800 37800 0 +1030}
- {530033400 39600 1 +1030}
+ {530033400 39600 1 +1100}
{542732400 37800 0 +1030}
- {562087800 39600 1 +1030}
+ {562087800 39600 1 +1100}
{574786800 37800 0 +1030}
- {594142200 39600 1 +1030}
+ {594142200 39600 1 +1100}
{606236400 37800 0 +1030}
- {625591800 39600 1 +1030}
+ {625591800 39600 1 +1100}
{636476400 37800 0 +1030}
- {657041400 39600 1 +1030}
+ {657041400 39600 1 +1100}
{667926000 37800 0 +1030}
- {688491000 39600 1 +1030}
+ {688491000 39600 1 +1100}
{699375600 37800 0 +1030}
- {719940600 39600 1 +1030}
+ {719940600 39600 1 +1100}
{731430000 37800 0 +1030}
- {751995000 39600 1 +1030}
+ {751995000 39600 1 +1100}
{762879600 37800 0 +1030}
- {783444600 39600 1 +1030}
+ {783444600 39600 1 +1100}
{794329200 37800 0 +1030}
- {814894200 39600 1 +1030}
+ {814894200 39600 1 +1100}
{828198000 37800 0 +1030}
- {846343800 39600 1 +1030}
+ {846343800 39600 1 +1100}
{859647600 37800 0 +1030}
- {877793400 39600 1 +1030}
+ {877793400 39600 1 +1100}
{891097200 37800 0 +1030}
- {909243000 39600 1 +1030}
+ {909243000 39600 1 +1100}
{922546800 37800 0 +1030}
- {941297400 39600 1 +1030}
+ {941297400 39600 1 +1100}
{953996400 37800 0 +1030}
- {967303800 39600 1 +1030}
+ {967303800 39600 1 +1100}
{985446000 37800 0 +1030}
- {1004196600 39600 1 +1030}
+ {1004196600 39600 1 +1100}
{1017500400 37800 0 +1030}
- {1035646200 39600 1 +1030}
+ {1035646200 39600 1 +1100}
{1048950000 37800 0 +1030}
- {1067095800 39600 1 +1030}
+ {1067095800 39600 1 +1100}
{1080399600 37800 0 +1030}
- {1099150200 39600 1 +1030}
+ {1099150200 39600 1 +1100}
{1111849200 37800 0 +1030}
- {1130599800 39600 1 +1030}
+ {1130599800 39600 1 +1100}
{1143903600 37800 0 +1030}
- {1162049400 39600 1 +1030}
+ {1162049400 39600 1 +1100}
{1174748400 37800 0 +1030}
- {1193499000 39600 1 +1030}
+ {1193499000 39600 1 +1100}
{1207407600 37800 0 +1030}
- {1223134200 39600 1 +1030}
+ {1223134200 39600 1 +1100}
{1238857200 37800 0 +1030}
- {1254583800 39600 1 +1030}
+ {1254583800 39600 1 +1100}
{1270306800 37800 0 +1030}
- {1286033400 39600 1 +1030}
+ {1286033400 39600 1 +1100}
{1301756400 37800 0 +1030}
- {1317483000 39600 1 +1030}
+ {1317483000 39600 1 +1100}
{1333206000 37800 0 +1030}
- {1349537400 39600 1 +1030}
+ {1349537400 39600 1 +1100}
{1365260400 37800 0 +1030}
- {1380987000 39600 1 +1030}
+ {1380987000 39600 1 +1100}
{1396710000 37800 0 +1030}
- {1412436600 39600 1 +1030}
+ {1412436600 39600 1 +1100}
{1428159600 37800 0 +1030}
- {1443886200 39600 1 +1030}
+ {1443886200 39600 1 +1100}
{1459609200 37800 0 +1030}
- {1475335800 39600 1 +1030}
+ {1475335800 39600 1 +1100}
{1491058800 37800 0 +1030}
- {1506785400 39600 1 +1030}
+ {1506785400 39600 1 +1100}
{1522508400 37800 0 +1030}
- {1538839800 39600 1 +1030}
+ {1538839800 39600 1 +1100}
{1554562800 37800 0 +1030}
- {1570289400 39600 1 +1030}
+ {1570289400 39600 1 +1100}
{1586012400 37800 0 +1030}
- {1601739000 39600 1 +1030}
+ {1601739000 39600 1 +1100}
{1617462000 37800 0 +1030}
- {1633188600 39600 1 +1030}
+ {1633188600 39600 1 +1100}
{1648911600 37800 0 +1030}
- {1664638200 39600 1 +1030}
+ {1664638200 39600 1 +1100}
{1680361200 37800 0 +1030}
- {1696087800 39600 1 +1030}
+ {1696087800 39600 1 +1100}
{1712415600 37800 0 +1030}
- {1728142200 39600 1 +1030}
+ {1728142200 39600 1 +1100}
{1743865200 37800 0 +1030}
- {1759591800 39600 1 +1030}
+ {1759591800 39600 1 +1100}
{1775314800 37800 0 +1030}
- {1791041400 39600 1 +1030}
+ {1791041400 39600 1 +1100}
{1806764400 37800 0 +1030}
- {1822491000 39600 1 +1030}
+ {1822491000 39600 1 +1100}
{1838214000 37800 0 +1030}
- {1853940600 39600 1 +1030}
+ {1853940600 39600 1 +1100}
{1869663600 37800 0 +1030}
- {1885995000 39600 1 +1030}
+ {1885995000 39600 1 +1100}
{1901718000 37800 0 +1030}
- {1917444600 39600 1 +1030}
+ {1917444600 39600 1 +1100}
{1933167600 37800 0 +1030}
- {1948894200 39600 1 +1030}
+ {1948894200 39600 1 +1100}
{1964617200 37800 0 +1030}
- {1980343800 39600 1 +1030}
+ {1980343800 39600 1 +1100}
{1996066800 37800 0 +1030}
- {2011793400 39600 1 +1030}
+ {2011793400 39600 1 +1100}
{2027516400 37800 0 +1030}
- {2043243000 39600 1 +1030}
+ {2043243000 39600 1 +1100}
{2058966000 37800 0 +1030}
- {2075297400 39600 1 +1030}
+ {2075297400 39600 1 +1100}
{2091020400 37800 0 +1030}
- {2106747000 39600 1 +1030}
+ {2106747000 39600 1 +1100}
{2122470000 37800 0 +1030}
- {2138196600 39600 1 +1030}
+ {2138196600 39600 1 +1100}
{2153919600 37800 0 +1030}
- {2169646200 39600 1 +1030}
+ {2169646200 39600 1 +1100}
{2185369200 37800 0 +1030}
- {2201095800 39600 1 +1030}
+ {2201095800 39600 1 +1100}
{2216818800 37800 0 +1030}
- {2233150200 39600 1 +1030}
+ {2233150200 39600 1 +1100}
{2248873200 37800 0 +1030}
- {2264599800 39600 1 +1030}
+ {2264599800 39600 1 +1100}
{2280322800 37800 0 +1030}
- {2296049400 39600 1 +1030}
+ {2296049400 39600 1 +1100}
{2311772400 37800 0 +1030}
- {2327499000 39600 1 +1030}
+ {2327499000 39600 1 +1100}
{2343222000 37800 0 +1030}
- {2358948600 39600 1 +1030}
+ {2358948600 39600 1 +1100}
{2374671600 37800 0 +1030}
- {2390398200 39600 1 +1030}
+ {2390398200 39600 1 +1100}
{2406121200 37800 0 +1030}
- {2422452600 39600 1 +1030}
+ {2422452600 39600 1 +1100}
{2438175600 37800 0 +1030}
- {2453902200 39600 1 +1030}
+ {2453902200 39600 1 +1100}
{2469625200 37800 0 +1030}
- {2485351800 39600 1 +1030}
+ {2485351800 39600 1 +1100}
{2501074800 37800 0 +1030}
- {2516801400 39600 1 +1030}
+ {2516801400 39600 1 +1100}
{2532524400 37800 0 +1030}
- {2548251000 39600 1 +1030}
+ {2548251000 39600 1 +1100}
{2563974000 37800 0 +1030}
- {2579700600 39600 1 +1030}
+ {2579700600 39600 1 +1100}
{2596028400 37800 0 +1030}
- {2611755000 39600 1 +1030}
+ {2611755000 39600 1 +1100}
{2627478000 37800 0 +1030}
- {2643204600 39600 1 +1030}
+ {2643204600 39600 1 +1100}
{2658927600 37800 0 +1030}
- {2674654200 39600 1 +1030}
+ {2674654200 39600 1 +1100}
{2690377200 37800 0 +1030}
- {2706103800 39600 1 +1030}
+ {2706103800 39600 1 +1100}
{2721826800 37800 0 +1030}
- {2737553400 39600 1 +1030}
+ {2737553400 39600 1 +1100}
{2753276400 37800 0 +1030}
- {2769607800 39600 1 +1030}
+ {2769607800 39600 1 +1100}
{2785330800 37800 0 +1030}
- {2801057400 39600 1 +1030}
+ {2801057400 39600 1 +1100}
{2816780400 37800 0 +1030}
- {2832507000 39600 1 +1030}
+ {2832507000 39600 1 +1100}
{2848230000 37800 0 +1030}
- {2863956600 39600 1 +1030}
+ {2863956600 39600 1 +1100}
{2879679600 37800 0 +1030}
- {2895406200 39600 1 +1030}
+ {2895406200 39600 1 +1100}
{2911129200 37800 0 +1030}
- {2926855800 39600 1 +1030}
+ {2926855800 39600 1 +1100}
{2942578800 37800 0 +1030}
- {2958910200 39600 1 +1030}
+ {2958910200 39600 1 +1100}
{2974633200 37800 0 +1030}
- {2990359800 39600 1 +1030}
+ {2990359800 39600 1 +1100}
{3006082800 37800 0 +1030}
- {3021809400 39600 1 +1030}
+ {3021809400 39600 1 +1100}
{3037532400 37800 0 +1030}
- {3053259000 39600 1 +1030}
+ {3053259000 39600 1 +1100}
{3068982000 37800 0 +1030}
- {3084708600 39600 1 +1030}
+ {3084708600 39600 1 +1100}
{3100431600 37800 0 +1030}
- {3116763000 39600 1 +1030}
+ {3116763000 39600 1 +1100}
{3132486000 37800 0 +1030}
- {3148212600 39600 1 +1030}
+ {3148212600 39600 1 +1100}
{3163935600 37800 0 +1030}
- {3179662200 39600 1 +1030}
+ {3179662200 39600 1 +1100}
{3195385200 37800 0 +1030}
- {3211111800 39600 1 +1030}
+ {3211111800 39600 1 +1100}
{3226834800 37800 0 +1030}
- {3242561400 39600 1 +1030}
+ {3242561400 39600 1 +1100}
{3258284400 37800 0 +1030}
- {3274011000 39600 1 +1030}
+ {3274011000 39600 1 +1100}
{3289734000 37800 0 +1030}
- {3306065400 39600 1 +1030}
+ {3306065400 39600 1 +1100}
{3321788400 37800 0 +1030}
- {3337515000 39600 1 +1030}
+ {3337515000 39600 1 +1100}
{3353238000 37800 0 +1030}
- {3368964600 39600 1 +1030}
+ {3368964600 39600 1 +1100}
{3384687600 37800 0 +1030}
- {3400414200 39600 1 +1030}
+ {3400414200 39600 1 +1100}
{3416137200 37800 0 +1030}
- {3431863800 39600 1 +1030}
+ {3431863800 39600 1 +1100}
{3447586800 37800 0 +1030}
- {3463313400 39600 1 +1030}
+ {3463313400 39600 1 +1100}
{3479641200 37800 0 +1030}
- {3495367800 39600 1 +1030}
+ {3495367800 39600 1 +1100}
{3511090800 37800 0 +1030}
- {3526817400 39600 1 +1030}
+ {3526817400 39600 1 +1100}
{3542540400 37800 0 +1030}
- {3558267000 39600 1 +1030}
+ {3558267000 39600 1 +1100}
{3573990000 37800 0 +1030}
- {3589716600 39600 1 +1030}
+ {3589716600 39600 1 +1100}
{3605439600 37800 0 +1030}
- {3621166200 39600 1 +1030}
+ {3621166200 39600 1 +1100}
{3636889200 37800 0 +1030}
- {3653220600 39600 1 +1030}
+ {3653220600 39600 1 +1100}
{3668943600 37800 0 +1030}
- {3684670200 39600 1 +1030}
+ {3684670200 39600 1 +1100}
{3700393200 37800 0 +1030}
- {3716119800 39600 1 +1030}
+ {3716119800 39600 1 +1100}
{3731842800 37800 0 +1030}
- {3747569400 39600 1 +1030}
+ {3747569400 39600 1 +1100}
{3763292400 37800 0 +1030}
- {3779019000 39600 1 +1030}
+ {3779019000 39600 1 +1100}
{3794742000 37800 0 +1030}
- {3810468600 39600 1 +1030}
+ {3810468600 39600 1 +1100}
{3826191600 37800 0 +1030}
- {3842523000 39600 1 +1030}
+ {3842523000 39600 1 +1100}
{3858246000 37800 0 +1030}
- {3873972600 39600 1 +1030}
+ {3873972600 39600 1 +1100}
{3889695600 37800 0 +1030}
- {3905422200 39600 1 +1030}
+ {3905422200 39600 1 +1100}
{3921145200 37800 0 +1030}
- {3936871800 39600 1 +1030}
+ {3936871800 39600 1 +1100}
{3952594800 37800 0 +1030}
- {3968321400 39600 1 +1030}
+ {3968321400 39600 1 +1100}
{3984044400 37800 0 +1030}
- {4000375800 39600 1 +1030}
+ {4000375800 39600 1 +1100}
{4016098800 37800 0 +1030}
- {4031825400 39600 1 +1030}
+ {4031825400 39600 1 +1100}
{4047548400 37800 0 +1030}
- {4063275000 39600 1 +1030}
+ {4063275000 39600 1 +1100}
{4078998000 37800 0 +1030}
- {4094724600 39600 1 +1030}
+ {4094724600 39600 1 +1100}
}
diff --git a/library/tzdata/CET b/library/tzdata/CET
index b08750a..91e6ce6 100644
--- a/library/tzdata/CET
+++ b/library/tzdata/CET
@@ -1,265 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:CET) {
- {-9223372036854775808 3600 0 CET}
- {-1693706400 7200 1 CEST}
- {-1680483600 3600 0 CET}
- {-1663455600 7200 1 CEST}
- {-1650150000 3600 0 CET}
- {-1632006000 7200 1 CEST}
- {-1618700400 3600 0 CET}
- {-938905200 7200 1 CEST}
- {-857257200 3600 0 CET}
- {-844556400 7200 1 CEST}
- {-828226800 3600 0 CET}
- {-812502000 7200 1 CEST}
- {-796777200 3600 0 CET}
- {-781052400 7200 1 CEST}
- {-766623600 3600 0 CET}
- {228877200 7200 1 CEST}
- {243997200 3600 0 CET}
- {260326800 7200 1 CEST}
- {276051600 3600 0 CET}
- {291776400 7200 1 CEST}
- {307501200 3600 0 CET}
- {323830800 7200 1 CEST}
- {338950800 3600 0 CET}
- {354675600 7200 1 CEST}
- {370400400 3600 0 CET}
- {386125200 7200 1 CEST}
- {401850000 3600 0 CET}
- {417574800 7200 1 CEST}
- {433299600 3600 0 CET}
- {449024400 7200 1 CEST}
- {465354000 3600 0 CET}
- {481078800 7200 1 CEST}
- {496803600 3600 0 CET}
- {512528400 7200 1 CEST}
- {528253200 3600 0 CET}
- {543978000 7200 1 CEST}
- {559702800 3600 0 CET}
- {575427600 7200 1 CEST}
- {591152400 3600 0 CET}
- {606877200 7200 1 CEST}
- {622602000 3600 0 CET}
- {638326800 7200 1 CEST}
- {654656400 3600 0 CET}
- {670381200 7200 1 CEST}
- {686106000 3600 0 CET}
- {701830800 7200 1 CEST}
- {717555600 3600 0 CET}
- {733280400 7200 1 CEST}
- {749005200 3600 0 CET}
- {764730000 7200 1 CEST}
- {780454800 3600 0 CET}
- {796179600 7200 1 CEST}
- {811904400 3600 0 CET}
- {828234000 7200 1 CEST}
- {846378000 3600 0 CET}
- {859683600 7200 1 CEST}
- {877827600 3600 0 CET}
- {891133200 7200 1 CEST}
- {909277200 3600 0 CET}
- {922582800 7200 1 CEST}
- {941331600 3600 0 CET}
- {954032400 7200 1 CEST}
- {972781200 3600 0 CET}
- {985482000 7200 1 CEST}
- {1004230800 3600 0 CET}
- {1017536400 7200 1 CEST}
- {1035680400 3600 0 CET}
- {1048986000 7200 1 CEST}
- {1067130000 3600 0 CET}
- {1080435600 7200 1 CEST}
- {1099184400 3600 0 CET}
- {1111885200 7200 1 CEST}
- {1130634000 3600 0 CET}
- {1143334800 7200 1 CEST}
- {1162083600 3600 0 CET}
- {1174784400 7200 1 CEST}
- {1193533200 3600 0 CET}
- {1206838800 7200 1 CEST}
- {1224982800 3600 0 CET}
- {1238288400 7200 1 CEST}
- {1256432400 3600 0 CET}
- {1269738000 7200 1 CEST}
- {1288486800 3600 0 CET}
- {1301187600 7200 1 CEST}
- {1319936400 3600 0 CET}
- {1332637200 7200 1 CEST}
- {1351386000 3600 0 CET}
- {1364691600 7200 1 CEST}
- {1382835600 3600 0 CET}
- {1396141200 7200 1 CEST}
- {1414285200 3600 0 CET}
- {1427590800 7200 1 CEST}
- {1445734800 3600 0 CET}
- {1459040400 7200 1 CEST}
- {1477789200 3600 0 CET}
- {1490490000 7200 1 CEST}
- {1509238800 3600 0 CET}
- {1521939600 7200 1 CEST}
- {1540688400 3600 0 CET}
- {1553994000 7200 1 CEST}
- {1572138000 3600 0 CET}
- {1585443600 7200 1 CEST}
- {1603587600 3600 0 CET}
- {1616893200 7200 1 CEST}
- {1635642000 3600 0 CET}
- {1648342800 7200 1 CEST}
- {1667091600 3600 0 CET}
- {1679792400 7200 1 CEST}
- {1698541200 3600 0 CET}
- {1711846800 7200 1 CEST}
- {1729990800 3600 0 CET}
- {1743296400 7200 1 CEST}
- {1761440400 3600 0 CET}
- {1774746000 7200 1 CEST}
- {1792890000 3600 0 CET}
- {1806195600 7200 1 CEST}
- {1824944400 3600 0 CET}
- {1837645200 7200 1 CEST}
- {1856394000 3600 0 CET}
- {1869094800 7200 1 CEST}
- {1887843600 3600 0 CET}
- {1901149200 7200 1 CEST}
- {1919293200 3600 0 CET}
- {1932598800 7200 1 CEST}
- {1950742800 3600 0 CET}
- {1964048400 7200 1 CEST}
- {1982797200 3600 0 CET}
- {1995498000 7200 1 CEST}
- {2014246800 3600 0 CET}
- {2026947600 7200 1 CEST}
- {2045696400 3600 0 CET}
- {2058397200 7200 1 CEST}
- {2077146000 3600 0 CET}
- {2090451600 7200 1 CEST}
- {2108595600 3600 0 CET}
- {2121901200 7200 1 CEST}
- {2140045200 3600 0 CET}
- {2153350800 7200 1 CEST}
- {2172099600 3600 0 CET}
- {2184800400 7200 1 CEST}
- {2203549200 3600 0 CET}
- {2216250000 7200 1 CEST}
- {2234998800 3600 0 CET}
- {2248304400 7200 1 CEST}
- {2266448400 3600 0 CET}
- {2279754000 7200 1 CEST}
- {2297898000 3600 0 CET}
- {2311203600 7200 1 CEST}
- {2329347600 3600 0 CET}
- {2342653200 7200 1 CEST}
- {2361402000 3600 0 CET}
- {2374102800 7200 1 CEST}
- {2392851600 3600 0 CET}
- {2405552400 7200 1 CEST}
- {2424301200 3600 0 CET}
- {2437606800 7200 1 CEST}
- {2455750800 3600 0 CET}
- {2469056400 7200 1 CEST}
- {2487200400 3600 0 CET}
- {2500506000 7200 1 CEST}
- {2519254800 3600 0 CET}
- {2531955600 7200 1 CEST}
- {2550704400 3600 0 CET}
- {2563405200 7200 1 CEST}
- {2582154000 3600 0 CET}
- {2595459600 7200 1 CEST}
- {2613603600 3600 0 CET}
- {2626909200 7200 1 CEST}
- {2645053200 3600 0 CET}
- {2658358800 7200 1 CEST}
- {2676502800 3600 0 CET}
- {2689808400 7200 1 CEST}
- {2708557200 3600 0 CET}
- {2721258000 7200 1 CEST}
- {2740006800 3600 0 CET}
- {2752707600 7200 1 CEST}
- {2771456400 3600 0 CET}
- {2784762000 7200 1 CEST}
- {2802906000 3600 0 CET}
- {2816211600 7200 1 CEST}
- {2834355600 3600 0 CET}
- {2847661200 7200 1 CEST}
- {2866410000 3600 0 CET}
- {2879110800 7200 1 CEST}
- {2897859600 3600 0 CET}
- {2910560400 7200 1 CEST}
- {2929309200 3600 0 CET}
- {2942010000 7200 1 CEST}
- {2960758800 3600 0 CET}
- {2974064400 7200 1 CEST}
- {2992208400 3600 0 CET}
- {3005514000 7200 1 CEST}
- {3023658000 3600 0 CET}
- {3036963600 7200 1 CEST}
- {3055712400 3600 0 CET}
- {3068413200 7200 1 CEST}
- {3087162000 3600 0 CET}
- {3099862800 7200 1 CEST}
- {3118611600 3600 0 CET}
- {3131917200 7200 1 CEST}
- {3150061200 3600 0 CET}
- {3163366800 7200 1 CEST}
- {3181510800 3600 0 CET}
- {3194816400 7200 1 CEST}
- {3212960400 3600 0 CET}
- {3226266000 7200 1 CEST}
- {3245014800 3600 0 CET}
- {3257715600 7200 1 CEST}
- {3276464400 3600 0 CET}
- {3289165200 7200 1 CEST}
- {3307914000 3600 0 CET}
- {3321219600 7200 1 CEST}
- {3339363600 3600 0 CET}
- {3352669200 7200 1 CEST}
- {3370813200 3600 0 CET}
- {3384118800 7200 1 CEST}
- {3402867600 3600 0 CET}
- {3415568400 7200 1 CEST}
- {3434317200 3600 0 CET}
- {3447018000 7200 1 CEST}
- {3465766800 3600 0 CET}
- {3479072400 7200 1 CEST}
- {3497216400 3600 0 CET}
- {3510522000 7200 1 CEST}
- {3528666000 3600 0 CET}
- {3541971600 7200 1 CEST}
- {3560115600 3600 0 CET}
- {3573421200 7200 1 CEST}
- {3592170000 3600 0 CET}
- {3604870800 7200 1 CEST}
- {3623619600 3600 0 CET}
- {3636320400 7200 1 CEST}
- {3655069200 3600 0 CET}
- {3668374800 7200 1 CEST}
- {3686518800 3600 0 CET}
- {3699824400 7200 1 CEST}
- {3717968400 3600 0 CET}
- {3731274000 7200 1 CEST}
- {3750022800 3600 0 CET}
- {3762723600 7200 1 CEST}
- {3781472400 3600 0 CET}
- {3794173200 7200 1 CEST}
- {3812922000 3600 0 CET}
- {3825622800 7200 1 CEST}
- {3844371600 3600 0 CET}
- {3857677200 7200 1 CEST}
- {3875821200 3600 0 CET}
- {3889126800 7200 1 CEST}
- {3907270800 3600 0 CET}
- {3920576400 7200 1 CEST}
- {3939325200 3600 0 CET}
- {3952026000 7200 1 CEST}
- {3970774800 3600 0 CET}
- {3983475600 7200 1 CEST}
- {4002224400 3600 0 CET}
- {4015530000 7200 1 CEST}
- {4033674000 3600 0 CET}
- {4046979600 7200 1 CEST}
- {4065123600 3600 0 CET}
- {4078429200 7200 1 CEST}
- {4096573200 3600 0 CET}
+if {![info exists TZData(Europe/Brussels)]} {
+ LoadTimeZoneFile Europe/Brussels
}
+set TZData(:CET) $TZData(:Europe/Brussels)
diff --git a/library/tzdata/CST6CDT b/library/tzdata/CST6CDT
index 11e45f0..c70d814 100644
--- a/library/tzdata/CST6CDT
+++ b/library/tzdata/CST6CDT
@@ -1,278 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:CST6CDT) {
- {-9223372036854775808 -21600 0 CST}
- {-1633276800 -18000 1 CDT}
- {-1615136400 -21600 0 CST}
- {-1601827200 -18000 1 CDT}
- {-1583686800 -21600 0 CST}
- {-880214400 -18000 1 CWT}
- {-769395600 -18000 1 CPT}
- {-765392400 -21600 0 CST}
- {-84384000 -18000 1 CDT}
- {-68662800 -21600 0 CST}
- {-52934400 -18000 1 CDT}
- {-37213200 -21600 0 CST}
- {-21484800 -18000 1 CDT}
- {-5763600 -21600 0 CST}
- {9964800 -18000 1 CDT}
- {25686000 -21600 0 CST}
- {41414400 -18000 1 CDT}
- {57740400 -21600 0 CST}
- {73468800 -18000 1 CDT}
- {89190000 -21600 0 CST}
- {104918400 -18000 1 CDT}
- {120639600 -21600 0 CST}
- {126691200 -18000 1 CDT}
- {152089200 -21600 0 CST}
- {162374400 -18000 1 CDT}
- {183538800 -21600 0 CST}
- {199267200 -18000 1 CDT}
- {215593200 -21600 0 CST}
- {230716800 -18000 1 CDT}
- {247042800 -21600 0 CST}
- {262771200 -18000 1 CDT}
- {278492400 -21600 0 CST}
- {294220800 -18000 1 CDT}
- {309942000 -21600 0 CST}
- {325670400 -18000 1 CDT}
- {341391600 -21600 0 CST}
- {357120000 -18000 1 CDT}
- {372841200 -21600 0 CST}
- {388569600 -18000 1 CDT}
- {404895600 -21600 0 CST}
- {420019200 -18000 1 CDT}
- {436345200 -21600 0 CST}
- {452073600 -18000 1 CDT}
- {467794800 -21600 0 CST}
- {483523200 -18000 1 CDT}
- {499244400 -21600 0 CST}
- {514972800 -18000 1 CDT}
- {530694000 -21600 0 CST}
- {544608000 -18000 1 CDT}
- {562143600 -21600 0 CST}
- {576057600 -18000 1 CDT}
- {594198000 -21600 0 CST}
- {607507200 -18000 1 CDT}
- {625647600 -21600 0 CST}
- {638956800 -18000 1 CDT}
- {657097200 -21600 0 CST}
- {671011200 -18000 1 CDT}
- {688546800 -21600 0 CST}
- {702460800 -18000 1 CDT}
- {719996400 -21600 0 CST}
- {733910400 -18000 1 CDT}
- {752050800 -21600 0 CST}
- {765360000 -18000 1 CDT}
- {783500400 -21600 0 CST}
- {796809600 -18000 1 CDT}
- {814950000 -21600 0 CST}
- {828864000 -18000 1 CDT}
- {846399600 -21600 0 CST}
- {860313600 -18000 1 CDT}
- {877849200 -21600 0 CST}
- {891763200 -18000 1 CDT}
- {909298800 -21600 0 CST}
- {923212800 -18000 1 CDT}
- {941353200 -21600 0 CST}
- {954662400 -18000 1 CDT}
- {972802800 -21600 0 CST}
- {986112000 -18000 1 CDT}
- {1004252400 -21600 0 CST}
- {1018166400 -18000 1 CDT}
- {1035702000 -21600 0 CST}
- {1049616000 -18000 1 CDT}
- {1067151600 -21600 0 CST}
- {1081065600 -18000 1 CDT}
- {1099206000 -21600 0 CST}
- {1112515200 -18000 1 CDT}
- {1130655600 -21600 0 CST}
- {1143964800 -18000 1 CDT}
- {1162105200 -21600 0 CST}
- {1173600000 -18000 1 CDT}
- {1194159600 -21600 0 CST}
- {1205049600 -18000 1 CDT}
- {1225609200 -21600 0 CST}
- {1236499200 -18000 1 CDT}
- {1257058800 -21600 0 CST}
- {1268553600 -18000 1 CDT}
- {1289113200 -21600 0 CST}
- {1300003200 -18000 1 CDT}
- {1320562800 -21600 0 CST}
- {1331452800 -18000 1 CDT}
- {1352012400 -21600 0 CST}
- {1362902400 -18000 1 CDT}
- {1383462000 -21600 0 CST}
- {1394352000 -18000 1 CDT}
- {1414911600 -21600 0 CST}
- {1425801600 -18000 1 CDT}
- {1446361200 -21600 0 CST}
- {1457856000 -18000 1 CDT}
- {1478415600 -21600 0 CST}
- {1489305600 -18000 1 CDT}
- {1509865200 -21600 0 CST}
- {1520755200 -18000 1 CDT}
- {1541314800 -21600 0 CST}
- {1552204800 -18000 1 CDT}
- {1572764400 -21600 0 CST}
- {1583654400 -18000 1 CDT}
- {1604214000 -21600 0 CST}
- {1615708800 -18000 1 CDT}
- {1636268400 -21600 0 CST}
- {1647158400 -18000 1 CDT}
- {1667718000 -21600 0 CST}
- {1678608000 -18000 1 CDT}
- {1699167600 -21600 0 CST}
- {1710057600 -18000 1 CDT}
- {1730617200 -21600 0 CST}
- {1741507200 -18000 1 CDT}
- {1762066800 -21600 0 CST}
- {1772956800 -18000 1 CDT}
- {1793516400 -21600 0 CST}
- {1805011200 -18000 1 CDT}
- {1825570800 -21600 0 CST}
- {1836460800 -18000 1 CDT}
- {1857020400 -21600 0 CST}
- {1867910400 -18000 1 CDT}
- {1888470000 -21600 0 CST}
- {1899360000 -18000 1 CDT}
- {1919919600 -21600 0 CST}
- {1930809600 -18000 1 CDT}
- {1951369200 -21600 0 CST}
- {1962864000 -18000 1 CDT}
- {1983423600 -21600 0 CST}
- {1994313600 -18000 1 CDT}
- {2014873200 -21600 0 CST}
- {2025763200 -18000 1 CDT}
- {2046322800 -21600 0 CST}
- {2057212800 -18000 1 CDT}
- {2077772400 -21600 0 CST}
- {2088662400 -18000 1 CDT}
- {2109222000 -21600 0 CST}
- {2120112000 -18000 1 CDT}
- {2140671600 -21600 0 CST}
- {2152166400 -18000 1 CDT}
- {2172726000 -21600 0 CST}
- {2183616000 -18000 1 CDT}
- {2204175600 -21600 0 CST}
- {2215065600 -18000 1 CDT}
- {2235625200 -21600 0 CST}
- {2246515200 -18000 1 CDT}
- {2267074800 -21600 0 CST}
- {2277964800 -18000 1 CDT}
- {2298524400 -21600 0 CST}
- {2309414400 -18000 1 CDT}
- {2329974000 -21600 0 CST}
- {2341468800 -18000 1 CDT}
- {2362028400 -21600 0 CST}
- {2372918400 -18000 1 CDT}
- {2393478000 -21600 0 CST}
- {2404368000 -18000 1 CDT}
- {2424927600 -21600 0 CST}
- {2435817600 -18000 1 CDT}
- {2456377200 -21600 0 CST}
- {2467267200 -18000 1 CDT}
- {2487826800 -21600 0 CST}
- {2499321600 -18000 1 CDT}
- {2519881200 -21600 0 CST}
- {2530771200 -18000 1 CDT}
- {2551330800 -21600 0 CST}
- {2562220800 -18000 1 CDT}
- {2582780400 -21600 0 CST}
- {2593670400 -18000 1 CDT}
- {2614230000 -21600 0 CST}
- {2625120000 -18000 1 CDT}
- {2645679600 -21600 0 CST}
- {2656569600 -18000 1 CDT}
- {2677129200 -21600 0 CST}
- {2688624000 -18000 1 CDT}
- {2709183600 -21600 0 CST}
- {2720073600 -18000 1 CDT}
- {2740633200 -21600 0 CST}
- {2751523200 -18000 1 CDT}
- {2772082800 -21600 0 CST}
- {2782972800 -18000 1 CDT}
- {2803532400 -21600 0 CST}
- {2814422400 -18000 1 CDT}
- {2834982000 -21600 0 CST}
- {2846476800 -18000 1 CDT}
- {2867036400 -21600 0 CST}
- {2877926400 -18000 1 CDT}
- {2898486000 -21600 0 CST}
- {2909376000 -18000 1 CDT}
- {2929935600 -21600 0 CST}
- {2940825600 -18000 1 CDT}
- {2961385200 -21600 0 CST}
- {2972275200 -18000 1 CDT}
- {2992834800 -21600 0 CST}
- {3003724800 -18000 1 CDT}
- {3024284400 -21600 0 CST}
- {3035779200 -18000 1 CDT}
- {3056338800 -21600 0 CST}
- {3067228800 -18000 1 CDT}
- {3087788400 -21600 0 CST}
- {3098678400 -18000 1 CDT}
- {3119238000 -21600 0 CST}
- {3130128000 -18000 1 CDT}
- {3150687600 -21600 0 CST}
- {3161577600 -18000 1 CDT}
- {3182137200 -21600 0 CST}
- {3193027200 -18000 1 CDT}
- {3213586800 -21600 0 CST}
- {3225081600 -18000 1 CDT}
- {3245641200 -21600 0 CST}
- {3256531200 -18000 1 CDT}
- {3277090800 -21600 0 CST}
- {3287980800 -18000 1 CDT}
- {3308540400 -21600 0 CST}
- {3319430400 -18000 1 CDT}
- {3339990000 -21600 0 CST}
- {3350880000 -18000 1 CDT}
- {3371439600 -21600 0 CST}
- {3382934400 -18000 1 CDT}
- {3403494000 -21600 0 CST}
- {3414384000 -18000 1 CDT}
- {3434943600 -21600 0 CST}
- {3445833600 -18000 1 CDT}
- {3466393200 -21600 0 CST}
- {3477283200 -18000 1 CDT}
- {3497842800 -21600 0 CST}
- {3508732800 -18000 1 CDT}
- {3529292400 -21600 0 CST}
- {3540182400 -18000 1 CDT}
- {3560742000 -21600 0 CST}
- {3572236800 -18000 1 CDT}
- {3592796400 -21600 0 CST}
- {3603686400 -18000 1 CDT}
- {3624246000 -21600 0 CST}
- {3635136000 -18000 1 CDT}
- {3655695600 -21600 0 CST}
- {3666585600 -18000 1 CDT}
- {3687145200 -21600 0 CST}
- {3698035200 -18000 1 CDT}
- {3718594800 -21600 0 CST}
- {3730089600 -18000 1 CDT}
- {3750649200 -21600 0 CST}
- {3761539200 -18000 1 CDT}
- {3782098800 -21600 0 CST}
- {3792988800 -18000 1 CDT}
- {3813548400 -21600 0 CST}
- {3824438400 -18000 1 CDT}
- {3844998000 -21600 0 CST}
- {3855888000 -18000 1 CDT}
- {3876447600 -21600 0 CST}
- {3887337600 -18000 1 CDT}
- {3907897200 -21600 0 CST}
- {3919392000 -18000 1 CDT}
- {3939951600 -21600 0 CST}
- {3950841600 -18000 1 CDT}
- {3971401200 -21600 0 CST}
- {3982291200 -18000 1 CDT}
- {4002850800 -21600 0 CST}
- {4013740800 -18000 1 CDT}
- {4034300400 -21600 0 CST}
- {4045190400 -18000 1 CDT}
- {4065750000 -21600 0 CST}
- {4076640000 -18000 1 CDT}
- {4097199600 -21600 0 CST}
+if {![info exists TZData(America/Chicago)]} {
+ LoadTimeZoneFile America/Chicago
}
+set TZData(:CST6CDT) $TZData(:America/Chicago)
diff --git a/library/tzdata/EET b/library/tzdata/EET
index e7c102a..efe413c 100644
--- a/library/tzdata/EET
+++ b/library/tzdata/EET
@@ -1,251 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:EET) {
- {-9223372036854775808 7200 0 EET}
- {228877200 10800 1 EEST}
- {243997200 7200 0 EET}
- {260326800 10800 1 EEST}
- {276051600 7200 0 EET}
- {291776400 10800 1 EEST}
- {307501200 7200 0 EET}
- {323830800 10800 1 EEST}
- {338950800 7200 0 EET}
- {354675600 10800 1 EEST}
- {370400400 7200 0 EET}
- {386125200 10800 1 EEST}
- {401850000 7200 0 EET}
- {417574800 10800 1 EEST}
- {433299600 7200 0 EET}
- {449024400 10800 1 EEST}
- {465354000 7200 0 EET}
- {481078800 10800 1 EEST}
- {496803600 7200 0 EET}
- {512528400 10800 1 EEST}
- {528253200 7200 0 EET}
- {543978000 10800 1 EEST}
- {559702800 7200 0 EET}
- {575427600 10800 1 EEST}
- {591152400 7200 0 EET}
- {606877200 10800 1 EEST}
- {622602000 7200 0 EET}
- {638326800 10800 1 EEST}
- {654656400 7200 0 EET}
- {670381200 10800 1 EEST}
- {686106000 7200 0 EET}
- {701830800 10800 1 EEST}
- {717555600 7200 0 EET}
- {733280400 10800 1 EEST}
- {749005200 7200 0 EET}
- {764730000 10800 1 EEST}
- {780454800 7200 0 EET}
- {796179600 10800 1 EEST}
- {811904400 7200 0 EET}
- {828234000 10800 1 EEST}
- {846378000 7200 0 EET}
- {859683600 10800 1 EEST}
- {877827600 7200 0 EET}
- {891133200 10800 1 EEST}
- {909277200 7200 0 EET}
- {922582800 10800 1 EEST}
- {941331600 7200 0 EET}
- {954032400 10800 1 EEST}
- {972781200 7200 0 EET}
- {985482000 10800 1 EEST}
- {1004230800 7200 0 EET}
- {1017536400 10800 1 EEST}
- {1035680400 7200 0 EET}
- {1048986000 10800 1 EEST}
- {1067130000 7200 0 EET}
- {1080435600 10800 1 EEST}
- {1099184400 7200 0 EET}
- {1111885200 10800 1 EEST}
- {1130634000 7200 0 EET}
- {1143334800 10800 1 EEST}
- {1162083600 7200 0 EET}
- {1174784400 10800 1 EEST}
- {1193533200 7200 0 EET}
- {1206838800 10800 1 EEST}
- {1224982800 7200 0 EET}
- {1238288400 10800 1 EEST}
- {1256432400 7200 0 EET}
- {1269738000 10800 1 EEST}
- {1288486800 7200 0 EET}
- {1301187600 10800 1 EEST}
- {1319936400 7200 0 EET}
- {1332637200 10800 1 EEST}
- {1351386000 7200 0 EET}
- {1364691600 10800 1 EEST}
- {1382835600 7200 0 EET}
- {1396141200 10800 1 EEST}
- {1414285200 7200 0 EET}
- {1427590800 10800 1 EEST}
- {1445734800 7200 0 EET}
- {1459040400 10800 1 EEST}
- {1477789200 7200 0 EET}
- {1490490000 10800 1 EEST}
- {1509238800 7200 0 EET}
- {1521939600 10800 1 EEST}
- {1540688400 7200 0 EET}
- {1553994000 10800 1 EEST}
- {1572138000 7200 0 EET}
- {1585443600 10800 1 EEST}
- {1603587600 7200 0 EET}
- {1616893200 10800 1 EEST}
- {1635642000 7200 0 EET}
- {1648342800 10800 1 EEST}
- {1667091600 7200 0 EET}
- {1679792400 10800 1 EEST}
- {1698541200 7200 0 EET}
- {1711846800 10800 1 EEST}
- {1729990800 7200 0 EET}
- {1743296400 10800 1 EEST}
- {1761440400 7200 0 EET}
- {1774746000 10800 1 EEST}
- {1792890000 7200 0 EET}
- {1806195600 10800 1 EEST}
- {1824944400 7200 0 EET}
- {1837645200 10800 1 EEST}
- {1856394000 7200 0 EET}
- {1869094800 10800 1 EEST}
- {1887843600 7200 0 EET}
- {1901149200 10800 1 EEST}
- {1919293200 7200 0 EET}
- {1932598800 10800 1 EEST}
- {1950742800 7200 0 EET}
- {1964048400 10800 1 EEST}
- {1982797200 7200 0 EET}
- {1995498000 10800 1 EEST}
- {2014246800 7200 0 EET}
- {2026947600 10800 1 EEST}
- {2045696400 7200 0 EET}
- {2058397200 10800 1 EEST}
- {2077146000 7200 0 EET}
- {2090451600 10800 1 EEST}
- {2108595600 7200 0 EET}
- {2121901200 10800 1 EEST}
- {2140045200 7200 0 EET}
- {2153350800 10800 1 EEST}
- {2172099600 7200 0 EET}
- {2184800400 10800 1 EEST}
- {2203549200 7200 0 EET}
- {2216250000 10800 1 EEST}
- {2234998800 7200 0 EET}
- {2248304400 10800 1 EEST}
- {2266448400 7200 0 EET}
- {2279754000 10800 1 EEST}
- {2297898000 7200 0 EET}
- {2311203600 10800 1 EEST}
- {2329347600 7200 0 EET}
- {2342653200 10800 1 EEST}
- {2361402000 7200 0 EET}
- {2374102800 10800 1 EEST}
- {2392851600 7200 0 EET}
- {2405552400 10800 1 EEST}
- {2424301200 7200 0 EET}
- {2437606800 10800 1 EEST}
- {2455750800 7200 0 EET}
- {2469056400 10800 1 EEST}
- {2487200400 7200 0 EET}
- {2500506000 10800 1 EEST}
- {2519254800 7200 0 EET}
- {2531955600 10800 1 EEST}
- {2550704400 7200 0 EET}
- {2563405200 10800 1 EEST}
- {2582154000 7200 0 EET}
- {2595459600 10800 1 EEST}
- {2613603600 7200 0 EET}
- {2626909200 10800 1 EEST}
- {2645053200 7200 0 EET}
- {2658358800 10800 1 EEST}
- {2676502800 7200 0 EET}
- {2689808400 10800 1 EEST}
- {2708557200 7200 0 EET}
- {2721258000 10800 1 EEST}
- {2740006800 7200 0 EET}
- {2752707600 10800 1 EEST}
- {2771456400 7200 0 EET}
- {2784762000 10800 1 EEST}
- {2802906000 7200 0 EET}
- {2816211600 10800 1 EEST}
- {2834355600 7200 0 EET}
- {2847661200 10800 1 EEST}
- {2866410000 7200 0 EET}
- {2879110800 10800 1 EEST}
- {2897859600 7200 0 EET}
- {2910560400 10800 1 EEST}
- {2929309200 7200 0 EET}
- {2942010000 10800 1 EEST}
- {2960758800 7200 0 EET}
- {2974064400 10800 1 EEST}
- {2992208400 7200 0 EET}
- {3005514000 10800 1 EEST}
- {3023658000 7200 0 EET}
- {3036963600 10800 1 EEST}
- {3055712400 7200 0 EET}
- {3068413200 10800 1 EEST}
- {3087162000 7200 0 EET}
- {3099862800 10800 1 EEST}
- {3118611600 7200 0 EET}
- {3131917200 10800 1 EEST}
- {3150061200 7200 0 EET}
- {3163366800 10800 1 EEST}
- {3181510800 7200 0 EET}
- {3194816400 10800 1 EEST}
- {3212960400 7200 0 EET}
- {3226266000 10800 1 EEST}
- {3245014800 7200 0 EET}
- {3257715600 10800 1 EEST}
- {3276464400 7200 0 EET}
- {3289165200 10800 1 EEST}
- {3307914000 7200 0 EET}
- {3321219600 10800 1 EEST}
- {3339363600 7200 0 EET}
- {3352669200 10800 1 EEST}
- {3370813200 7200 0 EET}
- {3384118800 10800 1 EEST}
- {3402867600 7200 0 EET}
- {3415568400 10800 1 EEST}
- {3434317200 7200 0 EET}
- {3447018000 10800 1 EEST}
- {3465766800 7200 0 EET}
- {3479072400 10800 1 EEST}
- {3497216400 7200 0 EET}
- {3510522000 10800 1 EEST}
- {3528666000 7200 0 EET}
- {3541971600 10800 1 EEST}
- {3560115600 7200 0 EET}
- {3573421200 10800 1 EEST}
- {3592170000 7200 0 EET}
- {3604870800 10800 1 EEST}
- {3623619600 7200 0 EET}
- {3636320400 10800 1 EEST}
- {3655069200 7200 0 EET}
- {3668374800 10800 1 EEST}
- {3686518800 7200 0 EET}
- {3699824400 10800 1 EEST}
- {3717968400 7200 0 EET}
- {3731274000 10800 1 EEST}
- {3750022800 7200 0 EET}
- {3762723600 10800 1 EEST}
- {3781472400 7200 0 EET}
- {3794173200 10800 1 EEST}
- {3812922000 7200 0 EET}
- {3825622800 10800 1 EEST}
- {3844371600 7200 0 EET}
- {3857677200 10800 1 EEST}
- {3875821200 7200 0 EET}
- {3889126800 10800 1 EEST}
- {3907270800 7200 0 EET}
- {3920576400 10800 1 EEST}
- {3939325200 7200 0 EET}
- {3952026000 10800 1 EEST}
- {3970774800 7200 0 EET}
- {3983475600 10800 1 EEST}
- {4002224400 7200 0 EET}
- {4015530000 10800 1 EEST}
- {4033674000 7200 0 EET}
- {4046979600 10800 1 EEST}
- {4065123600 7200 0 EET}
- {4078429200 10800 1 EEST}
- {4096573200 7200 0 EET}
+if {![info exists TZData(Europe/Athens)]} {
+ LoadTimeZoneFile Europe/Athens
}
+set TZData(:EET) $TZData(:Europe/Athens)
diff --git a/library/tzdata/EST b/library/tzdata/EST
index 72c5b17..99ac4f2 100644
--- a/library/tzdata/EST
+++ b/library/tzdata/EST
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:EST) {
- {-9223372036854775808 -18000 0 EST}
+if {![info exists TZData(America/Panama)]} {
+ LoadTimeZoneFile America/Panama
}
+set TZData(:EST) $TZData(:America/Panama)
diff --git a/library/tzdata/EST5EDT b/library/tzdata/EST5EDT
index 968833e..6cd0e62 100644
--- a/library/tzdata/EST5EDT
+++ b/library/tzdata/EST5EDT
@@ -1,278 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:EST5EDT) {
- {-9223372036854775808 -18000 0 EST}
- {-1633280400 -14400 1 EDT}
- {-1615140000 -18000 0 EST}
- {-1601830800 -14400 1 EDT}
- {-1583690400 -18000 0 EST}
- {-880218000 -14400 1 EWT}
- {-769395600 -14400 1 EPT}
- {-765396000 -18000 0 EST}
- {-84387600 -14400 1 EDT}
- {-68666400 -18000 0 EST}
- {-52938000 -14400 1 EDT}
- {-37216800 -18000 0 EST}
- {-21488400 -14400 1 EDT}
- {-5767200 -18000 0 EST}
- {9961200 -14400 1 EDT}
- {25682400 -18000 0 EST}
- {41410800 -14400 1 EDT}
- {57736800 -18000 0 EST}
- {73465200 -14400 1 EDT}
- {89186400 -18000 0 EST}
- {104914800 -14400 1 EDT}
- {120636000 -18000 0 EST}
- {126687600 -14400 1 EDT}
- {152085600 -18000 0 EST}
- {162370800 -14400 1 EDT}
- {183535200 -18000 0 EST}
- {199263600 -14400 1 EDT}
- {215589600 -18000 0 EST}
- {230713200 -14400 1 EDT}
- {247039200 -18000 0 EST}
- {262767600 -14400 1 EDT}
- {278488800 -18000 0 EST}
- {294217200 -14400 1 EDT}
- {309938400 -18000 0 EST}
- {325666800 -14400 1 EDT}
- {341388000 -18000 0 EST}
- {357116400 -14400 1 EDT}
- {372837600 -18000 0 EST}
- {388566000 -14400 1 EDT}
- {404892000 -18000 0 EST}
- {420015600 -14400 1 EDT}
- {436341600 -18000 0 EST}
- {452070000 -14400 1 EDT}
- {467791200 -18000 0 EST}
- {483519600 -14400 1 EDT}
- {499240800 -18000 0 EST}
- {514969200 -14400 1 EDT}
- {530690400 -18000 0 EST}
- {544604400 -14400 1 EDT}
- {562140000 -18000 0 EST}
- {576054000 -14400 1 EDT}
- {594194400 -18000 0 EST}
- {607503600 -14400 1 EDT}
- {625644000 -18000 0 EST}
- {638953200 -14400 1 EDT}
- {657093600 -18000 0 EST}
- {671007600 -14400 1 EDT}
- {688543200 -18000 0 EST}
- {702457200 -14400 1 EDT}
- {719992800 -18000 0 EST}
- {733906800 -14400 1 EDT}
- {752047200 -18000 0 EST}
- {765356400 -14400 1 EDT}
- {783496800 -18000 0 EST}
- {796806000 -14400 1 EDT}
- {814946400 -18000 0 EST}
- {828860400 -14400 1 EDT}
- {846396000 -18000 0 EST}
- {860310000 -14400 1 EDT}
- {877845600 -18000 0 EST}
- {891759600 -14400 1 EDT}
- {909295200 -18000 0 EST}
- {923209200 -14400 1 EDT}
- {941349600 -18000 0 EST}
- {954658800 -14400 1 EDT}
- {972799200 -18000 0 EST}
- {986108400 -14400 1 EDT}
- {1004248800 -18000 0 EST}
- {1018162800 -14400 1 EDT}
- {1035698400 -18000 0 EST}
- {1049612400 -14400 1 EDT}
- {1067148000 -18000 0 EST}
- {1081062000 -14400 1 EDT}
- {1099202400 -18000 0 EST}
- {1112511600 -14400 1 EDT}
- {1130652000 -18000 0 EST}
- {1143961200 -14400 1 EDT}
- {1162101600 -18000 0 EST}
- {1173596400 -14400 1 EDT}
- {1194156000 -18000 0 EST}
- {1205046000 -14400 1 EDT}
- {1225605600 -18000 0 EST}
- {1236495600 -14400 1 EDT}
- {1257055200 -18000 0 EST}
- {1268550000 -14400 1 EDT}
- {1289109600 -18000 0 EST}
- {1299999600 -14400 1 EDT}
- {1320559200 -18000 0 EST}
- {1331449200 -14400 1 EDT}
- {1352008800 -18000 0 EST}
- {1362898800 -14400 1 EDT}
- {1383458400 -18000 0 EST}
- {1394348400 -14400 1 EDT}
- {1414908000 -18000 0 EST}
- {1425798000 -14400 1 EDT}
- {1446357600 -18000 0 EST}
- {1457852400 -14400 1 EDT}
- {1478412000 -18000 0 EST}
- {1489302000 -14400 1 EDT}
- {1509861600 -18000 0 EST}
- {1520751600 -14400 1 EDT}
- {1541311200 -18000 0 EST}
- {1552201200 -14400 1 EDT}
- {1572760800 -18000 0 EST}
- {1583650800 -14400 1 EDT}
- {1604210400 -18000 0 EST}
- {1615705200 -14400 1 EDT}
- {1636264800 -18000 0 EST}
- {1647154800 -14400 1 EDT}
- {1667714400 -18000 0 EST}
- {1678604400 -14400 1 EDT}
- {1699164000 -18000 0 EST}
- {1710054000 -14400 1 EDT}
- {1730613600 -18000 0 EST}
- {1741503600 -14400 1 EDT}
- {1762063200 -18000 0 EST}
- {1772953200 -14400 1 EDT}
- {1793512800 -18000 0 EST}
- {1805007600 -14400 1 EDT}
- {1825567200 -18000 0 EST}
- {1836457200 -14400 1 EDT}
- {1857016800 -18000 0 EST}
- {1867906800 -14400 1 EDT}
- {1888466400 -18000 0 EST}
- {1899356400 -14400 1 EDT}
- {1919916000 -18000 0 EST}
- {1930806000 -14400 1 EDT}
- {1951365600 -18000 0 EST}
- {1962860400 -14400 1 EDT}
- {1983420000 -18000 0 EST}
- {1994310000 -14400 1 EDT}
- {2014869600 -18000 0 EST}
- {2025759600 -14400 1 EDT}
- {2046319200 -18000 0 EST}
- {2057209200 -14400 1 EDT}
- {2077768800 -18000 0 EST}
- {2088658800 -14400 1 EDT}
- {2109218400 -18000 0 EST}
- {2120108400 -14400 1 EDT}
- {2140668000 -18000 0 EST}
- {2152162800 -14400 1 EDT}
- {2172722400 -18000 0 EST}
- {2183612400 -14400 1 EDT}
- {2204172000 -18000 0 EST}
- {2215062000 -14400 1 EDT}
- {2235621600 -18000 0 EST}
- {2246511600 -14400 1 EDT}
- {2267071200 -18000 0 EST}
- {2277961200 -14400 1 EDT}
- {2298520800 -18000 0 EST}
- {2309410800 -14400 1 EDT}
- {2329970400 -18000 0 EST}
- {2341465200 -14400 1 EDT}
- {2362024800 -18000 0 EST}
- {2372914800 -14400 1 EDT}
- {2393474400 -18000 0 EST}
- {2404364400 -14400 1 EDT}
- {2424924000 -18000 0 EST}
- {2435814000 -14400 1 EDT}
- {2456373600 -18000 0 EST}
- {2467263600 -14400 1 EDT}
- {2487823200 -18000 0 EST}
- {2499318000 -14400 1 EDT}
- {2519877600 -18000 0 EST}
- {2530767600 -14400 1 EDT}
- {2551327200 -18000 0 EST}
- {2562217200 -14400 1 EDT}
- {2582776800 -18000 0 EST}
- {2593666800 -14400 1 EDT}
- {2614226400 -18000 0 EST}
- {2625116400 -14400 1 EDT}
- {2645676000 -18000 0 EST}
- {2656566000 -14400 1 EDT}
- {2677125600 -18000 0 EST}
- {2688620400 -14400 1 EDT}
- {2709180000 -18000 0 EST}
- {2720070000 -14400 1 EDT}
- {2740629600 -18000 0 EST}
- {2751519600 -14400 1 EDT}
- {2772079200 -18000 0 EST}
- {2782969200 -14400 1 EDT}
- {2803528800 -18000 0 EST}
- {2814418800 -14400 1 EDT}
- {2834978400 -18000 0 EST}
- {2846473200 -14400 1 EDT}
- {2867032800 -18000 0 EST}
- {2877922800 -14400 1 EDT}
- {2898482400 -18000 0 EST}
- {2909372400 -14400 1 EDT}
- {2929932000 -18000 0 EST}
- {2940822000 -14400 1 EDT}
- {2961381600 -18000 0 EST}
- {2972271600 -14400 1 EDT}
- {2992831200 -18000 0 EST}
- {3003721200 -14400 1 EDT}
- {3024280800 -18000 0 EST}
- {3035775600 -14400 1 EDT}
- {3056335200 -18000 0 EST}
- {3067225200 -14400 1 EDT}
- {3087784800 -18000 0 EST}
- {3098674800 -14400 1 EDT}
- {3119234400 -18000 0 EST}
- {3130124400 -14400 1 EDT}
- {3150684000 -18000 0 EST}
- {3161574000 -14400 1 EDT}
- {3182133600 -18000 0 EST}
- {3193023600 -14400 1 EDT}
- {3213583200 -18000 0 EST}
- {3225078000 -14400 1 EDT}
- {3245637600 -18000 0 EST}
- {3256527600 -14400 1 EDT}
- {3277087200 -18000 0 EST}
- {3287977200 -14400 1 EDT}
- {3308536800 -18000 0 EST}
- {3319426800 -14400 1 EDT}
- {3339986400 -18000 0 EST}
- {3350876400 -14400 1 EDT}
- {3371436000 -18000 0 EST}
- {3382930800 -14400 1 EDT}
- {3403490400 -18000 0 EST}
- {3414380400 -14400 1 EDT}
- {3434940000 -18000 0 EST}
- {3445830000 -14400 1 EDT}
- {3466389600 -18000 0 EST}
- {3477279600 -14400 1 EDT}
- {3497839200 -18000 0 EST}
- {3508729200 -14400 1 EDT}
- {3529288800 -18000 0 EST}
- {3540178800 -14400 1 EDT}
- {3560738400 -18000 0 EST}
- {3572233200 -14400 1 EDT}
- {3592792800 -18000 0 EST}
- {3603682800 -14400 1 EDT}
- {3624242400 -18000 0 EST}
- {3635132400 -14400 1 EDT}
- {3655692000 -18000 0 EST}
- {3666582000 -14400 1 EDT}
- {3687141600 -18000 0 EST}
- {3698031600 -14400 1 EDT}
- {3718591200 -18000 0 EST}
- {3730086000 -14400 1 EDT}
- {3750645600 -18000 0 EST}
- {3761535600 -14400 1 EDT}
- {3782095200 -18000 0 EST}
- {3792985200 -14400 1 EDT}
- {3813544800 -18000 0 EST}
- {3824434800 -14400 1 EDT}
- {3844994400 -18000 0 EST}
- {3855884400 -14400 1 EDT}
- {3876444000 -18000 0 EST}
- {3887334000 -14400 1 EDT}
- {3907893600 -18000 0 EST}
- {3919388400 -14400 1 EDT}
- {3939948000 -18000 0 EST}
- {3950838000 -14400 1 EDT}
- {3971397600 -18000 0 EST}
- {3982287600 -14400 1 EDT}
- {4002847200 -18000 0 EST}
- {4013737200 -14400 1 EDT}
- {4034296800 -18000 0 EST}
- {4045186800 -14400 1 EDT}
- {4065746400 -18000 0 EST}
- {4076636400 -14400 1 EDT}
- {4097196000 -18000 0 EST}
+if {![info exists TZData(America/New_York)]} {
+ LoadTimeZoneFile America/New_York
}
+set TZData(:EST5EDT) $TZData(:America/New_York)
diff --git a/library/tzdata/Etc/GMT+1 b/library/tzdata/Etc/GMT+1
index 70d39cf..d648b26 100644
--- a/library/tzdata/Etc/GMT+1
+++ b/library/tzdata/Etc/GMT+1
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+1) {
- {-9223372036854775808 -3600 0 -01}
+ {-9223372036854775808 -3600 0 -0100}
}
diff --git a/library/tzdata/Etc/GMT+10 b/library/tzdata/Etc/GMT+10
index 9165a08..7b73d1f 100644
--- a/library/tzdata/Etc/GMT+10
+++ b/library/tzdata/Etc/GMT+10
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+10) {
- {-9223372036854775808 -36000 0 -10}
+ {-9223372036854775808 -36000 0 -1000}
}
diff --git a/library/tzdata/Etc/GMT+11 b/library/tzdata/Etc/GMT+11
index a1aaf74..af33786 100644
--- a/library/tzdata/Etc/GMT+11
+++ b/library/tzdata/Etc/GMT+11
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+11) {
- {-9223372036854775808 -39600 0 -11}
+ {-9223372036854775808 -39600 0 -1100}
}
diff --git a/library/tzdata/Etc/GMT+12 b/library/tzdata/Etc/GMT+12
index d2c082a..24b227b 100644
--- a/library/tzdata/Etc/GMT+12
+++ b/library/tzdata/Etc/GMT+12
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+12) {
- {-9223372036854775808 -43200 0 -12}
+ {-9223372036854775808 -43200 0 -1200}
}
diff --git a/library/tzdata/Etc/GMT+2 b/library/tzdata/Etc/GMT+2
index 46cca7d..1e67672 100644
--- a/library/tzdata/Etc/GMT+2
+++ b/library/tzdata/Etc/GMT+2
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+2) {
- {-9223372036854775808 -7200 0 -02}
+ {-9223372036854775808 -7200 0 -0200}
}
diff --git a/library/tzdata/Etc/GMT+3 b/library/tzdata/Etc/GMT+3
index e1e3001..f717b28 100644
--- a/library/tzdata/Etc/GMT+3
+++ b/library/tzdata/Etc/GMT+3
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+3) {
- {-9223372036854775808 -10800 0 -03}
+ {-9223372036854775808 -10800 0 -0300}
}
diff --git a/library/tzdata/Etc/GMT+4 b/library/tzdata/Etc/GMT+4
index 32afa24..164b807 100644
--- a/library/tzdata/Etc/GMT+4
+++ b/library/tzdata/Etc/GMT+4
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+4) {
- {-9223372036854775808 -14400 0 -04}
+ {-9223372036854775808 -14400 0 -0400}
}
diff --git a/library/tzdata/Etc/GMT+5 b/library/tzdata/Etc/GMT+5
index 747abf5..e4ea69c 100644
--- a/library/tzdata/Etc/GMT+5
+++ b/library/tzdata/Etc/GMT+5
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+5) {
- {-9223372036854775808 -18000 0 -05}
+ {-9223372036854775808 -18000 0 -0500}
}
diff --git a/library/tzdata/Etc/GMT+6 b/library/tzdata/Etc/GMT+6
index 1096839..f1bba4b 100644
--- a/library/tzdata/Etc/GMT+6
+++ b/library/tzdata/Etc/GMT+6
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+6) {
- {-9223372036854775808 -21600 0 -06}
+ {-9223372036854775808 -21600 0 -0600}
}
diff --git a/library/tzdata/Etc/GMT+7 b/library/tzdata/Etc/GMT+7
index 6d47863..a4608fc 100644
--- a/library/tzdata/Etc/GMT+7
+++ b/library/tzdata/Etc/GMT+7
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+7) {
- {-9223372036854775808 -25200 0 -07}
+ {-9223372036854775808 -25200 0 -0700}
}
diff --git a/library/tzdata/Etc/GMT+8 b/library/tzdata/Etc/GMT+8
index 33c0f69..03393d6 100644
--- a/library/tzdata/Etc/GMT+8
+++ b/library/tzdata/Etc/GMT+8
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+8) {
- {-9223372036854775808 -28800 0 -08}
+ {-9223372036854775808 -28800 0 -0800}
}
diff --git a/library/tzdata/Etc/GMT+9 b/library/tzdata/Etc/GMT+9
index 4119bf4..0f2617c 100644
--- a/library/tzdata/Etc/GMT+9
+++ b/library/tzdata/Etc/GMT+9
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT+9) {
- {-9223372036854775808 -32400 0 -09}
+ {-9223372036854775808 -32400 0 -0900}
}
diff --git a/library/tzdata/Etc/GMT-1 b/library/tzdata/Etc/GMT-1
index e7ac44b..b95d183 100644
--- a/library/tzdata/Etc/GMT-1
+++ b/library/tzdata/Etc/GMT-1
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-1) {
- {-9223372036854775808 3600 0 +01}
+ {-9223372036854775808 3600 0 +0100}
}
diff --git a/library/tzdata/Etc/GMT-10 b/library/tzdata/Etc/GMT-10
index fdbd1e3..fbcce6c 100644
--- a/library/tzdata/Etc/GMT-10
+++ b/library/tzdata/Etc/GMT-10
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-10) {
- {-9223372036854775808 36000 0 +10}
+ {-9223372036854775808 36000 0 +1000}
}
diff --git a/library/tzdata/Etc/GMT-11 b/library/tzdata/Etc/GMT-11
index 4b28ad0..803c9cd 100644
--- a/library/tzdata/Etc/GMT-11
+++ b/library/tzdata/Etc/GMT-11
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-11) {
- {-9223372036854775808 39600 0 +11}
+ {-9223372036854775808 39600 0 +1100}
}
diff --git a/library/tzdata/Etc/GMT-12 b/library/tzdata/Etc/GMT-12
index 594bac3..a7c78a5 100644
--- a/library/tzdata/Etc/GMT-12
+++ b/library/tzdata/Etc/GMT-12
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-12) {
- {-9223372036854775808 43200 0 +12}
+ {-9223372036854775808 43200 0 +1200}
}
diff --git a/library/tzdata/Etc/GMT-13 b/library/tzdata/Etc/GMT-13
index f61159e..508d278 100644
--- a/library/tzdata/Etc/GMT-13
+++ b/library/tzdata/Etc/GMT-13
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-13) {
- {-9223372036854775808 46800 0 +13}
+ {-9223372036854775808 46800 0 +1300}
}
diff --git a/library/tzdata/Etc/GMT-14 b/library/tzdata/Etc/GMT-14
index 493800f..f899bf5 100644
--- a/library/tzdata/Etc/GMT-14
+++ b/library/tzdata/Etc/GMT-14
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-14) {
- {-9223372036854775808 50400 0 +14}
+ {-9223372036854775808 50400 0 +1400}
}
diff --git a/library/tzdata/Etc/GMT-2 b/library/tzdata/Etc/GMT-2
index 51fdbed..02951c1 100644
--- a/library/tzdata/Etc/GMT-2
+++ b/library/tzdata/Etc/GMT-2
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-2) {
- {-9223372036854775808 7200 0 +02}
+ {-9223372036854775808 7200 0 +0200}
}
diff --git a/library/tzdata/Etc/GMT-3 b/library/tzdata/Etc/GMT-3
index 7aed39d..babb2d7 100644
--- a/library/tzdata/Etc/GMT-3
+++ b/library/tzdata/Etc/GMT-3
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-3) {
- {-9223372036854775808 10800 0 +03}
+ {-9223372036854775808 10800 0 +0300}
}
diff --git a/library/tzdata/Etc/GMT-4 b/library/tzdata/Etc/GMT-4
index 6ca6372..b1b81ed 100644
--- a/library/tzdata/Etc/GMT-4
+++ b/library/tzdata/Etc/GMT-4
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-4) {
- {-9223372036854775808 14400 0 +04}
+ {-9223372036854775808 14400 0 +0400}
}
diff --git a/library/tzdata/Etc/GMT-5 b/library/tzdata/Etc/GMT-5
index 6c47a31..703db52 100644
--- a/library/tzdata/Etc/GMT-5
+++ b/library/tzdata/Etc/GMT-5
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-5) {
- {-9223372036854775808 18000 0 +05}
+ {-9223372036854775808 18000 0 +0500}
}
diff --git a/library/tzdata/Etc/GMT-6 b/library/tzdata/Etc/GMT-6
index 202e7f8..84ac0d9 100644
--- a/library/tzdata/Etc/GMT-6
+++ b/library/tzdata/Etc/GMT-6
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-6) {
- {-9223372036854775808 21600 0 +06}
+ {-9223372036854775808 21600 0 +0600}
}
diff --git a/library/tzdata/Etc/GMT-7 b/library/tzdata/Etc/GMT-7
index c6deaf3..139eba9 100644
--- a/library/tzdata/Etc/GMT-7
+++ b/library/tzdata/Etc/GMT-7
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-7) {
- {-9223372036854775808 25200 0 +07}
+ {-9223372036854775808 25200 0 +0700}
}
diff --git a/library/tzdata/Etc/GMT-8 b/library/tzdata/Etc/GMT-8
index 4bed42e..0aee31e 100644
--- a/library/tzdata/Etc/GMT-8
+++ b/library/tzdata/Etc/GMT-8
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-8) {
- {-9223372036854775808 28800 0 +08}
+ {-9223372036854775808 28800 0 +0800}
}
diff --git a/library/tzdata/Etc/GMT-9 b/library/tzdata/Etc/GMT-9
index 2a7625b..0da0545 100644
--- a/library/tzdata/Etc/GMT-9
+++ b/library/tzdata/Etc/GMT-9
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
set TZData(:Etc/GMT-9) {
- {-9223372036854775808 32400 0 +09}
+ {-9223372036854775808 32400 0 +0900}
}
diff --git a/library/tzdata/Europe/Astrakhan b/library/tzdata/Europe/Astrakhan
index 9881bb8..92b8fc6 100644
--- a/library/tzdata/Europe/Astrakhan
+++ b/library/tzdata/Europe/Astrakhan
@@ -2,70 +2,70 @@
set TZData(:Europe/Astrakhan) {
{-9223372036854775808 11532 0 LMT}
- {-1441249932 10800 0 +03}
- {-1247540400 14400 0 +05}
- {354916800 18000 1 +05}
- {370724400 14400 0 +04}
- {386452800 18000 1 +05}
- {402260400 14400 0 +04}
- {417988800 18000 1 +05}
- {433796400 14400 0 +04}
- {449611200 18000 1 +05}
- {465343200 14400 0 +04}
- {481068000 18000 1 +05}
- {496792800 14400 0 +04}
- {512517600 18000 1 +05}
- {528242400 14400 0 +04}
- {543967200 18000 1 +05}
- {559692000 14400 0 +04}
- {575416800 18000 1 +05}
- {591141600 14400 0 +04}
- {606866400 10800 0 +04}
- {606870000 14400 1 +04}
- {622594800 10800 0 +03}
- {638319600 14400 1 +04}
- {654649200 10800 0 +03}
- {670374000 14400 0 +04}
- {701820000 10800 0 +04}
- {701823600 14400 1 +04}
- {717548400 10800 0 +03}
- {733273200 14400 1 +04}
- {748998000 10800 0 +03}
- {764722800 14400 1 +04}
- {780447600 10800 0 +03}
- {796172400 14400 1 +04}
- {811897200 10800 0 +03}
- {828226800 14400 1 +04}
- {846370800 10800 0 +03}
- {859676400 14400 1 +04}
- {877820400 10800 0 +03}
- {891126000 14400 1 +04}
- {909270000 10800 0 +03}
- {922575600 14400 1 +04}
- {941324400 10800 0 +03}
- {954025200 14400 1 +04}
- {972774000 10800 0 +03}
- {985474800 14400 1 +04}
- {1004223600 10800 0 +03}
- {1017529200 14400 1 +04}
- {1035673200 10800 0 +03}
- {1048978800 14400 1 +04}
- {1067122800 10800 0 +03}
- {1080428400 14400 1 +04}
- {1099177200 10800 0 +03}
- {1111878000 14400 1 +04}
- {1130626800 10800 0 +03}
- {1143327600 14400 1 +04}
- {1162076400 10800 0 +03}
- {1174777200 14400 1 +04}
- {1193526000 10800 0 +03}
- {1206831600 14400 1 +04}
- {1224975600 10800 0 +03}
- {1238281200 14400 1 +04}
- {1256425200 10800 0 +03}
- {1269730800 14400 1 +04}
- {1288479600 10800 0 +03}
- {1301180400 14400 0 +04}
- {1414274400 10800 0 +03}
- {1459033200 14400 0 +04}
+ {-1441249932 10800 0 +0300}
+ {-1247540400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 10800 0 +0300}
+ {606870000 14400 1 +0400}
+ {622594800 10800 0 +0300}
+ {638319600 14400 1 +0400}
+ {654649200 10800 0 +0300}
+ {670374000 14400 0 +0400}
+ {701820000 10800 0 +0300}
+ {701823600 14400 1 +0400}
+ {717548400 10800 0 +0300}
+ {733273200 14400 1 +0400}
+ {748998000 10800 0 +0300}
+ {764722800 14400 1 +0400}
+ {780447600 10800 0 +0300}
+ {796172400 14400 1 +0400}
+ {811897200 10800 0 +0300}
+ {828226800 14400 1 +0400}
+ {846370800 10800 0 +0300}
+ {859676400 14400 1 +0400}
+ {877820400 10800 0 +0300}
+ {891126000 14400 1 +0400}
+ {909270000 10800 0 +0300}
+ {922575600 14400 1 +0400}
+ {941324400 10800 0 +0300}
+ {954025200 14400 1 +0400}
+ {972774000 10800 0 +0300}
+ {985474800 14400 1 +0400}
+ {1004223600 10800 0 +0300}
+ {1017529200 14400 1 +0400}
+ {1035673200 10800 0 +0300}
+ {1048978800 14400 1 +0400}
+ {1067122800 10800 0 +0300}
+ {1080428400 14400 1 +0400}
+ {1099177200 10800 0 +0300}
+ {1111878000 14400 1 +0400}
+ {1130626800 10800 0 +0300}
+ {1143327600 14400 1 +0400}
+ {1162076400 10800 0 +0300}
+ {1174777200 14400 1 +0400}
+ {1193526000 10800 0 +0300}
+ {1206831600 14400 1 +0400}
+ {1224975600 10800 0 +0300}
+ {1238281200 14400 1 +0400}
+ {1256425200 10800 0 +0300}
+ {1269730800 14400 1 +0400}
+ {1288479600 10800 0 +0300}
+ {1301180400 14400 0 +0400}
+ {1414274400 10800 0 +0300}
+ {1459033200 14400 0 +0400}
}
diff --git a/library/tzdata/Europe/Istanbul b/library/tzdata/Europe/Istanbul
index a4b9b89..7a14bab 100644
--- a/library/tzdata/Europe/Istanbul
+++ b/library/tzdata/Europe/Istanbul
@@ -49,10 +49,10 @@ set TZData(:Europe/Istanbul) {
{228873600 10800 1 EEST}
{245804400 7200 0 EET}
{260323200 10800 1 EEST}
- {267919200 10800 0 +03}
- {277254000 10800 0 +03}
- {428454000 14400 1 +04}
- {433893600 10800 0 +03}
+ {267919200 10800 0 +0300}
+ {277254000 10800 0 +0300}
+ {428454000 14400 1 +0400}
+ {433893600 10800 0 +0300}
{468111600 7200 0 EET}
{482799600 10800 1 EEST}
{496710000 7200 0 EET}
@@ -121,5 +121,5 @@ set TZData(:Europe/Istanbul) {
{1445734800 10800 1 EEST}
{1446944400 7200 0 EET}
{1459040400 10800 1 EEST}
- {1473199200 10800 0 +03}
+ {1473199200 10800 0 +0300}
}
diff --git a/library/tzdata/Europe/Kaliningrad b/library/tzdata/Europe/Kaliningrad
index 2ce7f35..2cf66c8 100644
--- a/library/tzdata/Europe/Kaliningrad
+++ b/library/tzdata/Europe/Kaliningrad
@@ -81,6 +81,6 @@ set TZData(:Europe/Kaliningrad) {
{1256428800 7200 0 EET}
{1269734400 10800 1 EEST}
{1288483200 7200 0 EET}
- {1301184000 10800 0 +03}
+ {1301184000 10800 0 +0300}
{1414278000 7200 0 EET}
}
diff --git a/library/tzdata/Europe/Kirov b/library/tzdata/Europe/Kirov
index 8762d22..c9da76e 100644
--- a/library/tzdata/Europe/Kirov
+++ b/library/tzdata/Europe/Kirov
@@ -2,69 +2,69 @@
set TZData(:Europe/Kirov) {
{-9223372036854775808 11928 0 LMT}
- {-1593820800 10800 0 +03}
- {-1247540400 14400 0 +05}
- {354916800 18000 1 +05}
- {370724400 14400 0 +04}
- {386452800 18000 1 +05}
- {402260400 14400 0 +04}
- {417988800 18000 1 +05}
- {433796400 14400 0 +04}
- {449611200 18000 1 +05}
- {465343200 14400 0 +04}
- {481068000 18000 1 +05}
- {496792800 14400 0 +04}
- {512517600 18000 1 +05}
- {528242400 14400 0 +04}
- {543967200 18000 1 +05}
- {559692000 14400 0 +04}
- {575416800 18000 1 +05}
- {591141600 14400 0 +04}
- {606866400 10800 0 +04}
- {606870000 14400 1 +04}
- {622594800 10800 0 +03}
- {638319600 14400 1 +04}
- {654649200 10800 0 +03}
- {670374000 14400 0 +04}
- {701820000 10800 0 +04}
- {701823600 14400 1 +04}
- {717548400 10800 0 +03}
- {733273200 14400 1 +04}
- {748998000 10800 0 +03}
- {764722800 14400 1 +04}
- {780447600 10800 0 +03}
- {796172400 14400 1 +04}
- {811897200 10800 0 +03}
- {828226800 14400 1 +04}
- {846370800 10800 0 +03}
- {859676400 14400 1 +04}
- {877820400 10800 0 +03}
- {891126000 14400 1 +04}
- {909270000 10800 0 +03}
- {922575600 14400 1 +04}
- {941324400 10800 0 +03}
- {954025200 14400 1 +04}
- {972774000 10800 0 +03}
- {985474800 14400 1 +04}
- {1004223600 10800 0 +03}
- {1017529200 14400 1 +04}
- {1035673200 10800 0 +03}
- {1048978800 14400 1 +04}
- {1067122800 10800 0 +03}
- {1080428400 14400 1 +04}
- {1099177200 10800 0 +03}
- {1111878000 14400 1 +04}
- {1130626800 10800 0 +03}
- {1143327600 14400 1 +04}
- {1162076400 10800 0 +03}
- {1174777200 14400 1 +04}
- {1193526000 10800 0 +03}
- {1206831600 14400 1 +04}
- {1224975600 10800 0 +03}
- {1238281200 14400 1 +04}
- {1256425200 10800 0 +03}
- {1269730800 14400 1 +04}
- {1288479600 10800 0 +03}
- {1301180400 14400 0 +04}
- {1414274400 10800 0 +03}
+ {-1593820800 10800 0 +0300}
+ {-1247540400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 10800 0 MSD}
+ {606870000 14400 1 MSD}
+ {622594800 10800 0 MSK}
+ {638319600 14400 1 MSD}
+ {654649200 10800 0 MSK}
+ {670374000 14400 0 +0400}
+ {701820000 10800 0 MSD}
+ {701823600 14400 1 MSD}
+ {717548400 10800 0 MSK}
+ {733273200 14400 1 MSD}
+ {748998000 10800 0 MSK}
+ {764722800 14400 1 MSD}
+ {780447600 10800 0 MSK}
+ {796172400 14400 1 MSD}
+ {811897200 10800 0 MSK}
+ {828226800 14400 1 MSD}
+ {846370800 10800 0 MSK}
+ {859676400 14400 1 MSD}
+ {877820400 10800 0 MSK}
+ {891126000 14400 1 MSD}
+ {909270000 10800 0 MSK}
+ {922575600 14400 1 MSD}
+ {941324400 10800 0 MSK}
+ {954025200 14400 1 MSD}
+ {972774000 10800 0 MSK}
+ {985474800 14400 1 MSD}
+ {1004223600 10800 0 MSK}
+ {1017529200 14400 1 MSD}
+ {1035673200 10800 0 MSK}
+ {1048978800 14400 1 MSD}
+ {1067122800 10800 0 MSK}
+ {1080428400 14400 1 MSD}
+ {1099177200 10800 0 MSK}
+ {1111878000 14400 1 MSD}
+ {1130626800 10800 0 MSK}
+ {1143327600 14400 1 MSD}
+ {1162076400 10800 0 MSK}
+ {1174777200 14400 1 MSD}
+ {1193526000 10800 0 MSK}
+ {1206831600 14400 1 MSD}
+ {1224975600 10800 0 MSK}
+ {1238281200 14400 1 MSD}
+ {1256425200 10800 0 MSK}
+ {1269730800 14400 1 MSD}
+ {1288479600 10800 0 MSK}
+ {1301180400 14400 0 MSK}
+ {1414274400 10800 0 MSK}
}
diff --git a/library/tzdata/Europe/Lisbon b/library/tzdata/Europe/Lisbon
index b6a069e..c13271f 100644
--- a/library/tzdata/Europe/Lisbon
+++ b/library/tzdata/Europe/Lisbon
@@ -6,18 +6,18 @@ set TZData(:Europe/Lisbon) {
{-1830384000 0 0 WET}
{-1689555600 3600 1 WEST}
{-1677801600 0 0 WET}
- {-1667437200 3600 1 WEST}
+ {-1667433600 3600 1 WEST}
{-1647738000 0 0 WET}
- {-1635814800 3600 1 WEST}
+ {-1635897600 3600 1 WEST}
{-1616202000 0 0 WET}
- {-1604365200 3600 1 WEST}
+ {-1604361600 3600 1 WEST}
{-1584666000 0 0 WET}
- {-1572742800 3600 1 WEST}
+ {-1572739200 3600 1 WEST}
{-1553043600 0 0 WET}
- {-1541206800 3600 1 WEST}
+ {-1541203200 3600 1 WEST}
{-1521507600 0 0 WET}
{-1442451600 3600 1 WEST}
- {-1426813200 0 0 WET}
+ {-1427677200 0 0 WET}
{-1379293200 3600 1 WEST}
{-1364778000 0 0 WET}
{-1348448400 3600 1 WEST}
@@ -43,7 +43,7 @@ set TZData(:Europe/Lisbon) {
{-969238800 3600 1 WEST}
{-950490000 0 0 WET}
{-942022800 3600 1 WEST}
- {-922669200 0 0 WET}
+ {-922496400 0 0 WET}
{-906944400 3600 1 WEST}
{-891133200 0 0 WET}
{-877309200 3600 1 WEST}
@@ -102,26 +102,29 @@ set TZData(:Europe/Lisbon) {
{-165448800 0 0 WET}
{-149724000 3600 1 WEST}
{-133999200 0 0 WET}
- {-118274400 3600 0 CET}
+ {-118274400 3600 1 WEST}
+ {-102549600 3600 0 CET}
{212544000 0 0 WET}
+ {212547600 0 0 WET}
{228268800 3600 1 WEST}
{243993600 0 0 WET}
- {260323200 3600 1 WEST}
- {276048000 0 0 WET}
- {291772800 3600 1 WEST}
+ {260326800 3600 1 WEST}
+ {276051600 0 0 WET}
+ {291776400 3600 1 WEST}
{307501200 0 0 WET}
- {323222400 3600 1 WEST}
+ {323830800 3600 1 WEST}
{338950800 0 0 WET}
- {354675600 3600 1 WEST}
- {370400400 0 0 WET}
- {386125200 3600 1 WEST}
- {401850000 0 0 WET}
- {417578400 3600 1 WEST}
- {433299600 0 0 WET}
- {449024400 3600 1 WEST}
- {465354000 0 0 WET}
- {481078800 3600 1 WEST}
- {496803600 0 0 WET}
+ {354672000 3600 1 WEST}
+ {370396800 0 0 WET}
+ {386121600 3600 1 WEST}
+ {401846400 0 0 WET}
+ {417571200 3600 1 WEST}
+ {433296000 0 0 WET}
+ {449020800 3600 1 WEST}
+ {465350400 0 0 WET}
+ {481075200 3600 1 WEST}
+ {496800000 0 0 WET}
+ {504921600 0 0 WET}
{512528400 3600 1 WEST}
{528253200 0 0 WET}
{543978000 3600 1 WEST}
diff --git a/library/tzdata/Europe/Minsk b/library/tzdata/Europe/Minsk
index 7a6232e..1f44e7e 100644
--- a/library/tzdata/Europe/Minsk
+++ b/library/tzdata/Europe/Minsk
@@ -71,5 +71,5 @@ set TZData(:Europe/Minsk) {
{1256428800 7200 0 EET}
{1269734400 10800 1 EEST}
{1288483200 7200 0 EET}
- {1301184000 10800 0 +03}
+ {1301184000 10800 0 +0300}
}
diff --git a/library/tzdata/Europe/Samara b/library/tzdata/Europe/Samara
index 8f21c57..79be6e2 100644
--- a/library/tzdata/Europe/Samara
+++ b/library/tzdata/Europe/Samara
@@ -2,72 +2,72 @@
set TZData(:Europe/Samara) {
{-9223372036854775808 12020 0 LMT}
- {-1593820800 10800 0 +03}
- {-1247540400 14400 0 +04}
- {-1102305600 14400 0 +05}
- {354916800 18000 1 +05}
- {370724400 14400 0 +04}
- {386452800 18000 1 +05}
- {402260400 14400 0 +04}
- {417988800 18000 1 +05}
- {433796400 14400 0 +04}
- {449611200 18000 1 +05}
- {465343200 14400 0 +04}
- {481068000 18000 1 +05}
- {496792800 14400 0 +04}
- {512517600 18000 1 +05}
- {528242400 14400 0 +04}
- {543967200 18000 1 +05}
- {559692000 14400 0 +04}
- {575416800 18000 1 +05}
- {591141600 14400 0 +04}
- {606866400 10800 0 +04}
- {606870000 14400 1 +04}
- {622594800 10800 0 +03}
- {638319600 14400 1 +04}
- {654649200 10800 0 +03}
- {670374000 7200 0 +03}
- {670377600 10800 1 +03}
- {686102400 10800 0 +03}
- {687916800 14400 0 +04}
- {701820000 18000 1 +05}
- {717544800 14400 0 +04}
- {733269600 18000 1 +05}
- {748994400 14400 0 +04}
- {764719200 18000 1 +05}
- {780444000 14400 0 +04}
- {796168800 18000 1 +05}
- {811893600 14400 0 +04}
- {828223200 18000 1 +05}
- {846367200 14400 0 +04}
- {859672800 18000 1 +05}
- {877816800 14400 0 +04}
- {891122400 18000 1 +05}
- {909266400 14400 0 +04}
- {922572000 18000 1 +05}
- {941320800 14400 0 +04}
- {954021600 18000 1 +05}
- {972770400 14400 0 +04}
- {985471200 18000 1 +05}
- {1004220000 14400 0 +04}
- {1017525600 18000 1 +05}
- {1035669600 14400 0 +04}
- {1048975200 18000 1 +05}
- {1067119200 14400 0 +04}
- {1080424800 18000 1 +05}
- {1099173600 14400 0 +04}
- {1111874400 18000 1 +05}
- {1130623200 14400 0 +04}
- {1143324000 18000 1 +05}
- {1162072800 14400 0 +04}
- {1174773600 18000 1 +05}
- {1193522400 14400 0 +04}
- {1206828000 18000 1 +05}
- {1224972000 14400 0 +04}
- {1238277600 18000 1 +05}
- {1256421600 14400 0 +04}
- {1269727200 10800 0 +04}
- {1269730800 14400 1 +04}
- {1288479600 10800 0 +03}
- {1301180400 14400 0 +04}
+ {-1593820800 10800 0 +0300}
+ {-1247540400 14400 0 +0400}
+ {-1102305600 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 10800 0 +0300}
+ {606870000 14400 1 +0400}
+ {622594800 10800 0 +0300}
+ {638319600 14400 1 +0400}
+ {654649200 10800 0 +0300}
+ {670374000 7200 0 +0200}
+ {670377600 10800 1 +0300}
+ {686102400 10800 0 +0300}
+ {687916800 14400 0 +0400}
+ {701820000 18000 1 +0500}
+ {717544800 14400 0 +0400}
+ {733269600 18000 1 +0500}
+ {748994400 14400 0 +0400}
+ {764719200 18000 1 +0500}
+ {780444000 14400 0 +0400}
+ {796168800 18000 1 +0500}
+ {811893600 14400 0 +0400}
+ {828223200 18000 1 +0500}
+ {846367200 14400 0 +0400}
+ {859672800 18000 1 +0500}
+ {877816800 14400 0 +0400}
+ {891122400 18000 1 +0500}
+ {909266400 14400 0 +0400}
+ {922572000 18000 1 +0500}
+ {941320800 14400 0 +0400}
+ {954021600 18000 1 +0500}
+ {972770400 14400 0 +0400}
+ {985471200 18000 1 +0500}
+ {1004220000 14400 0 +0400}
+ {1017525600 18000 1 +0500}
+ {1035669600 14400 0 +0400}
+ {1048975200 18000 1 +0500}
+ {1067119200 14400 0 +0400}
+ {1080424800 18000 1 +0500}
+ {1099173600 14400 0 +0400}
+ {1111874400 18000 1 +0500}
+ {1130623200 14400 0 +0400}
+ {1143324000 18000 1 +0500}
+ {1162072800 14400 0 +0400}
+ {1174773600 18000 1 +0500}
+ {1193522400 14400 0 +0400}
+ {1206828000 18000 1 +0500}
+ {1224972000 14400 0 +0400}
+ {1238277600 18000 1 +0500}
+ {1256421600 14400 0 +0400}
+ {1269727200 10800 0 +0300}
+ {1269730800 14400 1 +0400}
+ {1288479600 10800 0 +0300}
+ {1301180400 14400 0 +0400}
}
diff --git a/library/tzdata/Europe/Saratov b/library/tzdata/Europe/Saratov
index d89a217..b4cc236 100644
--- a/library/tzdata/Europe/Saratov
+++ b/library/tzdata/Europe/Saratov
@@ -2,70 +2,70 @@
set TZData(:Europe/Saratov) {
{-9223372036854775808 11058 0 LMT}
- {-1593820800 10800 0 +03}
- {-1247540400 14400 0 +05}
- {354916800 18000 1 +05}
- {370724400 14400 0 +04}
- {386452800 18000 1 +05}
- {402260400 14400 0 +04}
- {417988800 18000 1 +05}
- {433796400 14400 0 +04}
- {449611200 18000 1 +05}
- {465343200 14400 0 +04}
- {481068000 18000 1 +05}
- {496792800 14400 0 +04}
- {512517600 18000 1 +05}
- {528242400 14400 0 +04}
- {543967200 18000 1 +05}
- {559692000 14400 0 +04}
- {575416800 10800 0 +04}
- {575420400 14400 1 +04}
- {591145200 10800 0 +03}
- {606870000 14400 1 +04}
- {622594800 10800 0 +03}
- {638319600 14400 1 +04}
- {654649200 10800 0 +03}
- {670374000 14400 0 +04}
- {701820000 10800 0 +04}
- {701823600 14400 1 +04}
- {717548400 10800 0 +03}
- {733273200 14400 1 +04}
- {748998000 10800 0 +03}
- {764722800 14400 1 +04}
- {780447600 10800 0 +03}
- {796172400 14400 1 +04}
- {811897200 10800 0 +03}
- {828226800 14400 1 +04}
- {846370800 10800 0 +03}
- {859676400 14400 1 +04}
- {877820400 10800 0 +03}
- {891126000 14400 1 +04}
- {909270000 10800 0 +03}
- {922575600 14400 1 +04}
- {941324400 10800 0 +03}
- {954025200 14400 1 +04}
- {972774000 10800 0 +03}
- {985474800 14400 1 +04}
- {1004223600 10800 0 +03}
- {1017529200 14400 1 +04}
- {1035673200 10800 0 +03}
- {1048978800 14400 1 +04}
- {1067122800 10800 0 +03}
- {1080428400 14400 1 +04}
- {1099177200 10800 0 +03}
- {1111878000 14400 1 +04}
- {1130626800 10800 0 +03}
- {1143327600 14400 1 +04}
- {1162076400 10800 0 +03}
- {1174777200 14400 1 +04}
- {1193526000 10800 0 +03}
- {1206831600 14400 1 +04}
- {1224975600 10800 0 +03}
- {1238281200 14400 1 +04}
- {1256425200 10800 0 +03}
- {1269730800 14400 1 +04}
- {1288479600 10800 0 +03}
- {1301180400 14400 0 +04}
- {1414274400 10800 0 +03}
- {1480806000 14400 0 +04}
+ {-1593820800 10800 0 +0300}
+ {-1247540400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 10800 0 +0300}
+ {575420400 14400 1 +0400}
+ {591145200 10800 0 +0300}
+ {606870000 14400 1 +0400}
+ {622594800 10800 0 +0300}
+ {638319600 14400 1 +0400}
+ {654649200 10800 0 +0300}
+ {670374000 14400 0 +0400}
+ {701820000 10800 0 +0300}
+ {701823600 14400 1 +0400}
+ {717548400 10800 0 +0300}
+ {733273200 14400 1 +0400}
+ {748998000 10800 0 +0300}
+ {764722800 14400 1 +0400}
+ {780447600 10800 0 +0300}
+ {796172400 14400 1 +0400}
+ {811897200 10800 0 +0300}
+ {828226800 14400 1 +0400}
+ {846370800 10800 0 +0300}
+ {859676400 14400 1 +0400}
+ {877820400 10800 0 +0300}
+ {891126000 14400 1 +0400}
+ {909270000 10800 0 +0300}
+ {922575600 14400 1 +0400}
+ {941324400 10800 0 +0300}
+ {954025200 14400 1 +0400}
+ {972774000 10800 0 +0300}
+ {985474800 14400 1 +0400}
+ {1004223600 10800 0 +0300}
+ {1017529200 14400 1 +0400}
+ {1035673200 10800 0 +0300}
+ {1048978800 14400 1 +0400}
+ {1067122800 10800 0 +0300}
+ {1080428400 14400 1 +0400}
+ {1099177200 10800 0 +0300}
+ {1111878000 14400 1 +0400}
+ {1130626800 10800 0 +0300}
+ {1143327600 14400 1 +0400}
+ {1162076400 10800 0 +0300}
+ {1174777200 14400 1 +0400}
+ {1193526000 10800 0 +0300}
+ {1206831600 14400 1 +0400}
+ {1224975600 10800 0 +0300}
+ {1238281200 14400 1 +0400}
+ {1256425200 10800 0 +0300}
+ {1269730800 14400 1 +0400}
+ {1288479600 10800 0 +0300}
+ {1301180400 14400 0 +0400}
+ {1414274400 10800 0 +0300}
+ {1480806000 14400 0 +0400}
}
diff --git a/library/tzdata/Europe/Ulyanovsk b/library/tzdata/Europe/Ulyanovsk
index 8fb3f9e..b1f7a22 100644
--- a/library/tzdata/Europe/Ulyanovsk
+++ b/library/tzdata/Europe/Ulyanovsk
@@ -2,72 +2,72 @@
set TZData(:Europe/Ulyanovsk) {
{-9223372036854775808 11616 0 LMT}
- {-1593820800 10800 0 +03}
- {-1247540400 14400 0 +05}
- {354916800 18000 1 +05}
- {370724400 14400 0 +04}
- {386452800 18000 1 +05}
- {402260400 14400 0 +04}
- {417988800 18000 1 +05}
- {433796400 14400 0 +04}
- {449611200 18000 1 +05}
- {465343200 14400 0 +04}
- {481068000 18000 1 +05}
- {496792800 14400 0 +04}
- {512517600 18000 1 +05}
- {528242400 14400 0 +04}
- {543967200 18000 1 +05}
- {559692000 14400 0 +04}
- {575416800 18000 1 +05}
- {591141600 14400 0 +04}
- {606866400 10800 0 +04}
- {606870000 14400 1 +04}
- {622594800 10800 0 +03}
- {638319600 14400 1 +04}
- {654649200 10800 0 +03}
- {670374000 7200 0 +03}
- {670377600 10800 1 +03}
- {686102400 7200 0 +02}
- {695779200 10800 0 +04}
- {701823600 14400 1 +04}
- {717548400 10800 0 +03}
- {733273200 14400 1 +04}
- {748998000 10800 0 +03}
- {764722800 14400 1 +04}
- {780447600 10800 0 +03}
- {796172400 14400 1 +04}
- {811897200 10800 0 +03}
- {828226800 14400 1 +04}
- {846370800 10800 0 +03}
- {859676400 14400 1 +04}
- {877820400 10800 0 +03}
- {891126000 14400 1 +04}
- {909270000 10800 0 +03}
- {922575600 14400 1 +04}
- {941324400 10800 0 +03}
- {954025200 14400 1 +04}
- {972774000 10800 0 +03}
- {985474800 14400 1 +04}
- {1004223600 10800 0 +03}
- {1017529200 14400 1 +04}
- {1035673200 10800 0 +03}
- {1048978800 14400 1 +04}
- {1067122800 10800 0 +03}
- {1080428400 14400 1 +04}
- {1099177200 10800 0 +03}
- {1111878000 14400 1 +04}
- {1130626800 10800 0 +03}
- {1143327600 14400 1 +04}
- {1162076400 10800 0 +03}
- {1174777200 14400 1 +04}
- {1193526000 10800 0 +03}
- {1206831600 14400 1 +04}
- {1224975600 10800 0 +03}
- {1238281200 14400 1 +04}
- {1256425200 10800 0 +03}
- {1269730800 14400 1 +04}
- {1288479600 10800 0 +03}
- {1301180400 14400 0 +04}
- {1414274400 10800 0 +03}
- {1459033200 14400 0 +04}
+ {-1593820800 10800 0 +0300}
+ {-1247540400 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 18000 1 +0500}
+ {591141600 14400 0 +0400}
+ {606866400 10800 0 +0300}
+ {606870000 14400 1 +0400}
+ {622594800 10800 0 +0300}
+ {638319600 14400 1 +0400}
+ {654649200 10800 0 +0300}
+ {670374000 7200 0 +0200}
+ {670377600 10800 1 +0300}
+ {686102400 7200 0 +0200}
+ {695779200 10800 0 +0300}
+ {701823600 14400 1 +0400}
+ {717548400 10800 0 +0300}
+ {733273200 14400 1 +0400}
+ {748998000 10800 0 +0300}
+ {764722800 14400 1 +0400}
+ {780447600 10800 0 +0300}
+ {796172400 14400 1 +0400}
+ {811897200 10800 0 +0300}
+ {828226800 14400 1 +0400}
+ {846370800 10800 0 +0300}
+ {859676400 14400 1 +0400}
+ {877820400 10800 0 +0300}
+ {891126000 14400 1 +0400}
+ {909270000 10800 0 +0300}
+ {922575600 14400 1 +0400}
+ {941324400 10800 0 +0300}
+ {954025200 14400 1 +0400}
+ {972774000 10800 0 +0300}
+ {985474800 14400 1 +0400}
+ {1004223600 10800 0 +0300}
+ {1017529200 14400 1 +0400}
+ {1035673200 10800 0 +0300}
+ {1048978800 14400 1 +0400}
+ {1067122800 10800 0 +0300}
+ {1080428400 14400 1 +0400}
+ {1099177200 10800 0 +0300}
+ {1111878000 14400 1 +0400}
+ {1130626800 10800 0 +0300}
+ {1143327600 14400 1 +0400}
+ {1162076400 10800 0 +0300}
+ {1174777200 14400 1 +0400}
+ {1193526000 10800 0 +0300}
+ {1206831600 14400 1 +0400}
+ {1224975600 10800 0 +0300}
+ {1238281200 14400 1 +0400}
+ {1256425200 10800 0 +0300}
+ {1269730800 14400 1 +0400}
+ {1288479600 10800 0 +0300}
+ {1301180400 14400 0 +0400}
+ {1414274400 10800 0 +0300}
+ {1459033200 14400 0 +0400}
}
diff --git a/library/tzdata/Europe/Volgograd b/library/tzdata/Europe/Volgograd
index 2ce2dfe..db8fa12 100644
--- a/library/tzdata/Europe/Volgograd
+++ b/library/tzdata/Europe/Volgograd
@@ -2,72 +2,72 @@
set TZData(:Europe/Volgograd) {
{-9223372036854775808 10660 0 LMT}
- {-1577761060 10800 0 +03}
- {-1247540400 14400 0 +04}
- {-256881600 14400 0 +05}
- {354916800 18000 1 +05}
- {370724400 14400 0 +04}
- {386452800 18000 1 +05}
- {402260400 14400 0 +04}
- {417988800 18000 1 +05}
- {433796400 14400 0 +04}
- {449611200 18000 1 +05}
- {465343200 14400 0 +04}
- {481068000 18000 1 +05}
- {496792800 14400 0 +04}
- {512517600 18000 1 +05}
- {528242400 14400 0 +04}
- {543967200 18000 1 +05}
- {559692000 14400 0 +04}
- {575416800 10800 0 +04}
- {575420400 14400 1 +04}
- {591145200 10800 0 +03}
- {606870000 14400 1 +04}
- {622594800 10800 0 +03}
- {638319600 14400 1 +04}
- {654649200 10800 0 +03}
- {670374000 14400 0 +04}
- {701820000 10800 0 +04}
- {701823600 14400 1 +04}
- {717548400 10800 0 +03}
- {733273200 14400 1 +04}
- {748998000 10800 0 +03}
- {764722800 14400 1 +04}
- {780447600 10800 0 +03}
- {796172400 14400 1 +04}
- {811897200 10800 0 +03}
- {828226800 14400 1 +04}
- {846370800 10800 0 +03}
- {859676400 14400 1 +04}
- {877820400 10800 0 +03}
- {891126000 14400 1 +04}
- {909270000 10800 0 +03}
- {922575600 14400 1 +04}
- {941324400 10800 0 +03}
- {954025200 14400 1 +04}
- {972774000 10800 0 +03}
- {985474800 14400 1 +04}
- {1004223600 10800 0 +03}
- {1017529200 14400 1 +04}
- {1035673200 10800 0 +03}
- {1048978800 14400 1 +04}
- {1067122800 10800 0 +03}
- {1080428400 14400 1 +04}
- {1099177200 10800 0 +03}
- {1111878000 14400 1 +04}
- {1130626800 10800 0 +03}
- {1143327600 14400 1 +04}
- {1162076400 10800 0 +03}
- {1174777200 14400 1 +04}
- {1193526000 10800 0 +03}
- {1206831600 14400 1 +04}
- {1224975600 10800 0 +03}
- {1238281200 14400 1 +04}
- {1256425200 10800 0 +03}
- {1269730800 14400 1 +04}
- {1288479600 10800 0 +03}
- {1301180400 14400 0 +04}
- {1414274400 10800 0 +03}
- {1540681200 14400 0 +04}
- {1609020000 10800 0 +03}
+ {-1577761060 10800 0 +0300}
+ {-1247540400 14400 0 +0400}
+ {-256881600 14400 0 +0400}
+ {354916800 18000 1 +0500}
+ {370724400 14400 0 +0400}
+ {386452800 18000 1 +0500}
+ {402260400 14400 0 +0400}
+ {417988800 18000 1 +0500}
+ {433796400 14400 0 +0400}
+ {449611200 18000 1 +0500}
+ {465343200 14400 0 +0400}
+ {481068000 18000 1 +0500}
+ {496792800 14400 0 +0400}
+ {512517600 18000 1 +0500}
+ {528242400 14400 0 +0400}
+ {543967200 18000 1 +0500}
+ {559692000 14400 0 +0400}
+ {575416800 10800 0 MSD}
+ {575420400 14400 1 MSD}
+ {591145200 10800 0 MSK}
+ {606870000 14400 1 MSD}
+ {622594800 10800 0 MSK}
+ {638319600 14400 1 MSD}
+ {654649200 10800 0 MSK}
+ {670374000 14400 0 +0400}
+ {701820000 10800 0 MSD}
+ {701823600 14400 1 MSD}
+ {717548400 10800 0 MSK}
+ {733273200 14400 1 MSD}
+ {748998000 10800 0 MSK}
+ {764722800 14400 1 MSD}
+ {780447600 10800 0 MSK}
+ {796172400 14400 1 MSD}
+ {811897200 10800 0 MSK}
+ {828226800 14400 1 MSD}
+ {846370800 10800 0 MSK}
+ {859676400 14400 1 MSD}
+ {877820400 10800 0 MSK}
+ {891126000 14400 1 MSD}
+ {909270000 10800 0 MSK}
+ {922575600 14400 1 MSD}
+ {941324400 10800 0 MSK}
+ {954025200 14400 1 MSD}
+ {972774000 10800 0 MSK}
+ {985474800 14400 1 MSD}
+ {1004223600 10800 0 MSK}
+ {1017529200 14400 1 MSD}
+ {1035673200 10800 0 MSK}
+ {1048978800 14400 1 MSD}
+ {1067122800 10800 0 MSK}
+ {1080428400 14400 1 MSD}
+ {1099177200 10800 0 MSK}
+ {1111878000 14400 1 MSD}
+ {1130626800 10800 0 MSK}
+ {1143327600 14400 1 MSD}
+ {1162076400 10800 0 MSK}
+ {1174777200 14400 1 MSD}
+ {1193526000 10800 0 MSK}
+ {1206831600 14400 1 MSD}
+ {1224975600 10800 0 MSK}
+ {1238281200 14400 1 MSD}
+ {1256425200 10800 0 MSK}
+ {1269730800 14400 1 MSD}
+ {1288479600 10800 0 MSK}
+ {1301180400 14400 0 MSK}
+ {1414274400 10800 0 MSK}
+ {1540681200 14400 0 +0400}
+ {1609020000 10800 0 MSK}
}
diff --git a/library/tzdata/HST b/library/tzdata/HST
index fea7f14..ee07dfa 100644
--- a/library/tzdata/HST
+++ b/library/tzdata/HST
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:HST) {
- {-9223372036854775808 -36000 0 HST}
+if {![info exists TZData(Pacific/Honolulu)]} {
+ LoadTimeZoneFile Pacific/Honolulu
}
+set TZData(:HST) $TZData(:Pacific/Honolulu)
diff --git a/library/tzdata/Indian/Chagos b/library/tzdata/Indian/Chagos
index 23ea790..c3d5139 100644
--- a/library/tzdata/Indian/Chagos
+++ b/library/tzdata/Indian/Chagos
@@ -2,6 +2,6 @@
set TZData(:Indian/Chagos) {
{-9223372036854775808 17380 0 LMT}
- {-1988167780 18000 0 +05}
- {820436400 21600 0 +06}
+ {-1988167780 18000 0 +0500}
+ {820436400 21600 0 +0600}
}
diff --git a/library/tzdata/Indian/Maldives b/library/tzdata/Indian/Maldives
index b23bf2b..01fdb77 100644
--- a/library/tzdata/Indian/Maldives
+++ b/library/tzdata/Indian/Maldives
@@ -3,5 +3,5 @@
set TZData(:Indian/Maldives) {
{-9223372036854775808 17640 0 LMT}
{-2840158440 17640 0 MMT}
- {-315636840 18000 0 +05}
+ {-315636840 18000 0 +0500}
}
diff --git a/library/tzdata/Indian/Mauritius b/library/tzdata/Indian/Mauritius
index 4c9a051..b41a613 100644
--- a/library/tzdata/Indian/Mauritius
+++ b/library/tzdata/Indian/Mauritius
@@ -2,9 +2,9 @@
set TZData(:Indian/Mauritius) {
{-9223372036854775808 13800 0 LMT}
- {-1988164200 14400 0 +04}
- {403041600 18000 1 +04}
- {417034800 14400 0 +04}
- {1224972000 18000 1 +04}
- {1238274000 14400 0 +04}
+ {-1988164200 14400 0 +0400}
+ {403041600 18000 1 +0500}
+ {417034800 14400 0 +0400}
+ {1224972000 18000 1 +0500}
+ {1238274000 14400 0 +0400}
}
diff --git a/library/tzdata/MET b/library/tzdata/MET
index 8789c97..5a68dc8 100644
--- a/library/tzdata/MET
+++ b/library/tzdata/MET
@@ -1,265 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:MET) {
- {-9223372036854775808 3600 0 MET}
- {-1693706400 7200 1 MEST}
- {-1680483600 3600 0 MET}
- {-1663455600 7200 1 MEST}
- {-1650150000 3600 0 MET}
- {-1632006000 7200 1 MEST}
- {-1618700400 3600 0 MET}
- {-938905200 7200 1 MEST}
- {-857257200 3600 0 MET}
- {-844556400 7200 1 MEST}
- {-828226800 3600 0 MET}
- {-812502000 7200 1 MEST}
- {-796777200 3600 0 MET}
- {-781052400 7200 1 MEST}
- {-766623600 3600 0 MET}
- {228877200 7200 1 MEST}
- {243997200 3600 0 MET}
- {260326800 7200 1 MEST}
- {276051600 3600 0 MET}
- {291776400 7200 1 MEST}
- {307501200 3600 0 MET}
- {323830800 7200 1 MEST}
- {338950800 3600 0 MET}
- {354675600 7200 1 MEST}
- {370400400 3600 0 MET}
- {386125200 7200 1 MEST}
- {401850000 3600 0 MET}
- {417574800 7200 1 MEST}
- {433299600 3600 0 MET}
- {449024400 7200 1 MEST}
- {465354000 3600 0 MET}
- {481078800 7200 1 MEST}
- {496803600 3600 0 MET}
- {512528400 7200 1 MEST}
- {528253200 3600 0 MET}
- {543978000 7200 1 MEST}
- {559702800 3600 0 MET}
- {575427600 7200 1 MEST}
- {591152400 3600 0 MET}
- {606877200 7200 1 MEST}
- {622602000 3600 0 MET}
- {638326800 7200 1 MEST}
- {654656400 3600 0 MET}
- {670381200 7200 1 MEST}
- {686106000 3600 0 MET}
- {701830800 7200 1 MEST}
- {717555600 3600 0 MET}
- {733280400 7200 1 MEST}
- {749005200 3600 0 MET}
- {764730000 7200 1 MEST}
- {780454800 3600 0 MET}
- {796179600 7200 1 MEST}
- {811904400 3600 0 MET}
- {828234000 7200 1 MEST}
- {846378000 3600 0 MET}
- {859683600 7200 1 MEST}
- {877827600 3600 0 MET}
- {891133200 7200 1 MEST}
- {909277200 3600 0 MET}
- {922582800 7200 1 MEST}
- {941331600 3600 0 MET}
- {954032400 7200 1 MEST}
- {972781200 3600 0 MET}
- {985482000 7200 1 MEST}
- {1004230800 3600 0 MET}
- {1017536400 7200 1 MEST}
- {1035680400 3600 0 MET}
- {1048986000 7200 1 MEST}
- {1067130000 3600 0 MET}
- {1080435600 7200 1 MEST}
- {1099184400 3600 0 MET}
- {1111885200 7200 1 MEST}
- {1130634000 3600 0 MET}
- {1143334800 7200 1 MEST}
- {1162083600 3600 0 MET}
- {1174784400 7200 1 MEST}
- {1193533200 3600 0 MET}
- {1206838800 7200 1 MEST}
- {1224982800 3600 0 MET}
- {1238288400 7200 1 MEST}
- {1256432400 3600 0 MET}
- {1269738000 7200 1 MEST}
- {1288486800 3600 0 MET}
- {1301187600 7200 1 MEST}
- {1319936400 3600 0 MET}
- {1332637200 7200 1 MEST}
- {1351386000 3600 0 MET}
- {1364691600 7200 1 MEST}
- {1382835600 3600 0 MET}
- {1396141200 7200 1 MEST}
- {1414285200 3600 0 MET}
- {1427590800 7200 1 MEST}
- {1445734800 3600 0 MET}
- {1459040400 7200 1 MEST}
- {1477789200 3600 0 MET}
- {1490490000 7200 1 MEST}
- {1509238800 3600 0 MET}
- {1521939600 7200 1 MEST}
- {1540688400 3600 0 MET}
- {1553994000 7200 1 MEST}
- {1572138000 3600 0 MET}
- {1585443600 7200 1 MEST}
- {1603587600 3600 0 MET}
- {1616893200 7200 1 MEST}
- {1635642000 3600 0 MET}
- {1648342800 7200 1 MEST}
- {1667091600 3600 0 MET}
- {1679792400 7200 1 MEST}
- {1698541200 3600 0 MET}
- {1711846800 7200 1 MEST}
- {1729990800 3600 0 MET}
- {1743296400 7200 1 MEST}
- {1761440400 3600 0 MET}
- {1774746000 7200 1 MEST}
- {1792890000 3600 0 MET}
- {1806195600 7200 1 MEST}
- {1824944400 3600 0 MET}
- {1837645200 7200 1 MEST}
- {1856394000 3600 0 MET}
- {1869094800 7200 1 MEST}
- {1887843600 3600 0 MET}
- {1901149200 7200 1 MEST}
- {1919293200 3600 0 MET}
- {1932598800 7200 1 MEST}
- {1950742800 3600 0 MET}
- {1964048400 7200 1 MEST}
- {1982797200 3600 0 MET}
- {1995498000 7200 1 MEST}
- {2014246800 3600 0 MET}
- {2026947600 7200 1 MEST}
- {2045696400 3600 0 MET}
- {2058397200 7200 1 MEST}
- {2077146000 3600 0 MET}
- {2090451600 7200 1 MEST}
- {2108595600 3600 0 MET}
- {2121901200 7200 1 MEST}
- {2140045200 3600 0 MET}
- {2153350800 7200 1 MEST}
- {2172099600 3600 0 MET}
- {2184800400 7200 1 MEST}
- {2203549200 3600 0 MET}
- {2216250000 7200 1 MEST}
- {2234998800 3600 0 MET}
- {2248304400 7200 1 MEST}
- {2266448400 3600 0 MET}
- {2279754000 7200 1 MEST}
- {2297898000 3600 0 MET}
- {2311203600 7200 1 MEST}
- {2329347600 3600 0 MET}
- {2342653200 7200 1 MEST}
- {2361402000 3600 0 MET}
- {2374102800 7200 1 MEST}
- {2392851600 3600 0 MET}
- {2405552400 7200 1 MEST}
- {2424301200 3600 0 MET}
- {2437606800 7200 1 MEST}
- {2455750800 3600 0 MET}
- {2469056400 7200 1 MEST}
- {2487200400 3600 0 MET}
- {2500506000 7200 1 MEST}
- {2519254800 3600 0 MET}
- {2531955600 7200 1 MEST}
- {2550704400 3600 0 MET}
- {2563405200 7200 1 MEST}
- {2582154000 3600 0 MET}
- {2595459600 7200 1 MEST}
- {2613603600 3600 0 MET}
- {2626909200 7200 1 MEST}
- {2645053200 3600 0 MET}
- {2658358800 7200 1 MEST}
- {2676502800 3600 0 MET}
- {2689808400 7200 1 MEST}
- {2708557200 3600 0 MET}
- {2721258000 7200 1 MEST}
- {2740006800 3600 0 MET}
- {2752707600 7200 1 MEST}
- {2771456400 3600 0 MET}
- {2784762000 7200 1 MEST}
- {2802906000 3600 0 MET}
- {2816211600 7200 1 MEST}
- {2834355600 3600 0 MET}
- {2847661200 7200 1 MEST}
- {2866410000 3600 0 MET}
- {2879110800 7200 1 MEST}
- {2897859600 3600 0 MET}
- {2910560400 7200 1 MEST}
- {2929309200 3600 0 MET}
- {2942010000 7200 1 MEST}
- {2960758800 3600 0 MET}
- {2974064400 7200 1 MEST}
- {2992208400 3600 0 MET}
- {3005514000 7200 1 MEST}
- {3023658000 3600 0 MET}
- {3036963600 7200 1 MEST}
- {3055712400 3600 0 MET}
- {3068413200 7200 1 MEST}
- {3087162000 3600 0 MET}
- {3099862800 7200 1 MEST}
- {3118611600 3600 0 MET}
- {3131917200 7200 1 MEST}
- {3150061200 3600 0 MET}
- {3163366800 7200 1 MEST}
- {3181510800 3600 0 MET}
- {3194816400 7200 1 MEST}
- {3212960400 3600 0 MET}
- {3226266000 7200 1 MEST}
- {3245014800 3600 0 MET}
- {3257715600 7200 1 MEST}
- {3276464400 3600 0 MET}
- {3289165200 7200 1 MEST}
- {3307914000 3600 0 MET}
- {3321219600 7200 1 MEST}
- {3339363600 3600 0 MET}
- {3352669200 7200 1 MEST}
- {3370813200 3600 0 MET}
- {3384118800 7200 1 MEST}
- {3402867600 3600 0 MET}
- {3415568400 7200 1 MEST}
- {3434317200 3600 0 MET}
- {3447018000 7200 1 MEST}
- {3465766800 3600 0 MET}
- {3479072400 7200 1 MEST}
- {3497216400 3600 0 MET}
- {3510522000 7200 1 MEST}
- {3528666000 3600 0 MET}
- {3541971600 7200 1 MEST}
- {3560115600 3600 0 MET}
- {3573421200 7200 1 MEST}
- {3592170000 3600 0 MET}
- {3604870800 7200 1 MEST}
- {3623619600 3600 0 MET}
- {3636320400 7200 1 MEST}
- {3655069200 3600 0 MET}
- {3668374800 7200 1 MEST}
- {3686518800 3600 0 MET}
- {3699824400 7200 1 MEST}
- {3717968400 3600 0 MET}
- {3731274000 7200 1 MEST}
- {3750022800 3600 0 MET}
- {3762723600 7200 1 MEST}
- {3781472400 3600 0 MET}
- {3794173200 7200 1 MEST}
- {3812922000 3600 0 MET}
- {3825622800 7200 1 MEST}
- {3844371600 3600 0 MET}
- {3857677200 7200 1 MEST}
- {3875821200 3600 0 MET}
- {3889126800 7200 1 MEST}
- {3907270800 3600 0 MET}
- {3920576400 7200 1 MEST}
- {3939325200 3600 0 MET}
- {3952026000 7200 1 MEST}
- {3970774800 3600 0 MET}
- {3983475600 7200 1 MEST}
- {4002224400 3600 0 MET}
- {4015530000 7200 1 MEST}
- {4033674000 3600 0 MET}
- {4046979600 7200 1 MEST}
- {4065123600 3600 0 MET}
- {4078429200 7200 1 MEST}
- {4096573200 3600 0 MET}
+if {![info exists TZData(Europe/Brussels)]} {
+ LoadTimeZoneFile Europe/Brussels
}
+set TZData(:MET) $TZData(:Europe/Brussels)
diff --git a/library/tzdata/MST b/library/tzdata/MST
index 8c967ab..094721c 100644
--- a/library/tzdata/MST
+++ b/library/tzdata/MST
@@ -1,5 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:MST) {
- {-9223372036854775808 -25200 0 MST}
+if {![info exists TZData(America/Phoenix)]} {
+ LoadTimeZoneFile America/Phoenix
}
+set TZData(:MST) $TZData(:America/Phoenix)
diff --git a/library/tzdata/MST7MDT b/library/tzdata/MST7MDT
index ff52048..3be553a 100644
--- a/library/tzdata/MST7MDT
+++ b/library/tzdata/MST7MDT
@@ -1,278 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:MST7MDT) {
- {-9223372036854775808 -25200 0 MST}
- {-1633273200 -21600 1 MDT}
- {-1615132800 -25200 0 MST}
- {-1601823600 -21600 1 MDT}
- {-1583683200 -25200 0 MST}
- {-880210800 -21600 1 MWT}
- {-769395600 -21600 1 MPT}
- {-765388800 -25200 0 MST}
- {-84380400 -21600 1 MDT}
- {-68659200 -25200 0 MST}
- {-52930800 -21600 1 MDT}
- {-37209600 -25200 0 MST}
- {-21481200 -21600 1 MDT}
- {-5760000 -25200 0 MST}
- {9968400 -21600 1 MDT}
- {25689600 -25200 0 MST}
- {41418000 -21600 1 MDT}
- {57744000 -25200 0 MST}
- {73472400 -21600 1 MDT}
- {89193600 -25200 0 MST}
- {104922000 -21600 1 MDT}
- {120643200 -25200 0 MST}
- {126694800 -21600 1 MDT}
- {152092800 -25200 0 MST}
- {162378000 -21600 1 MDT}
- {183542400 -25200 0 MST}
- {199270800 -21600 1 MDT}
- {215596800 -25200 0 MST}
- {230720400 -21600 1 MDT}
- {247046400 -25200 0 MST}
- {262774800 -21600 1 MDT}
- {278496000 -25200 0 MST}
- {294224400 -21600 1 MDT}
- {309945600 -25200 0 MST}
- {325674000 -21600 1 MDT}
- {341395200 -25200 0 MST}
- {357123600 -21600 1 MDT}
- {372844800 -25200 0 MST}
- {388573200 -21600 1 MDT}
- {404899200 -25200 0 MST}
- {420022800 -21600 1 MDT}
- {436348800 -25200 0 MST}
- {452077200 -21600 1 MDT}
- {467798400 -25200 0 MST}
- {483526800 -21600 1 MDT}
- {499248000 -25200 0 MST}
- {514976400 -21600 1 MDT}
- {530697600 -25200 0 MST}
- {544611600 -21600 1 MDT}
- {562147200 -25200 0 MST}
- {576061200 -21600 1 MDT}
- {594201600 -25200 0 MST}
- {607510800 -21600 1 MDT}
- {625651200 -25200 0 MST}
- {638960400 -21600 1 MDT}
- {657100800 -25200 0 MST}
- {671014800 -21600 1 MDT}
- {688550400 -25200 0 MST}
- {702464400 -21600 1 MDT}
- {720000000 -25200 0 MST}
- {733914000 -21600 1 MDT}
- {752054400 -25200 0 MST}
- {765363600 -21600 1 MDT}
- {783504000 -25200 0 MST}
- {796813200 -21600 1 MDT}
- {814953600 -25200 0 MST}
- {828867600 -21600 1 MDT}
- {846403200 -25200 0 MST}
- {860317200 -21600 1 MDT}
- {877852800 -25200 0 MST}
- {891766800 -21600 1 MDT}
- {909302400 -25200 0 MST}
- {923216400 -21600 1 MDT}
- {941356800 -25200 0 MST}
- {954666000 -21600 1 MDT}
- {972806400 -25200 0 MST}
- {986115600 -21600 1 MDT}
- {1004256000 -25200 0 MST}
- {1018170000 -21600 1 MDT}
- {1035705600 -25200 0 MST}
- {1049619600 -21600 1 MDT}
- {1067155200 -25200 0 MST}
- {1081069200 -21600 1 MDT}
- {1099209600 -25200 0 MST}
- {1112518800 -21600 1 MDT}
- {1130659200 -25200 0 MST}
- {1143968400 -21600 1 MDT}
- {1162108800 -25200 0 MST}
- {1173603600 -21600 1 MDT}
- {1194163200 -25200 0 MST}
- {1205053200 -21600 1 MDT}
- {1225612800 -25200 0 MST}
- {1236502800 -21600 1 MDT}
- {1257062400 -25200 0 MST}
- {1268557200 -21600 1 MDT}
- {1289116800 -25200 0 MST}
- {1300006800 -21600 1 MDT}
- {1320566400 -25200 0 MST}
- {1331456400 -21600 1 MDT}
- {1352016000 -25200 0 MST}
- {1362906000 -21600 1 MDT}
- {1383465600 -25200 0 MST}
- {1394355600 -21600 1 MDT}
- {1414915200 -25200 0 MST}
- {1425805200 -21600 1 MDT}
- {1446364800 -25200 0 MST}
- {1457859600 -21600 1 MDT}
- {1478419200 -25200 0 MST}
- {1489309200 -21600 1 MDT}
- {1509868800 -25200 0 MST}
- {1520758800 -21600 1 MDT}
- {1541318400 -25200 0 MST}
- {1552208400 -21600 1 MDT}
- {1572768000 -25200 0 MST}
- {1583658000 -21600 1 MDT}
- {1604217600 -25200 0 MST}
- {1615712400 -21600 1 MDT}
- {1636272000 -25200 0 MST}
- {1647162000 -21600 1 MDT}
- {1667721600 -25200 0 MST}
- {1678611600 -21600 1 MDT}
- {1699171200 -25200 0 MST}
- {1710061200 -21600 1 MDT}
- {1730620800 -25200 0 MST}
- {1741510800 -21600 1 MDT}
- {1762070400 -25200 0 MST}
- {1772960400 -21600 1 MDT}
- {1793520000 -25200 0 MST}
- {1805014800 -21600 1 MDT}
- {1825574400 -25200 0 MST}
- {1836464400 -21600 1 MDT}
- {1857024000 -25200 0 MST}
- {1867914000 -21600 1 MDT}
- {1888473600 -25200 0 MST}
- {1899363600 -21600 1 MDT}
- {1919923200 -25200 0 MST}
- {1930813200 -21600 1 MDT}
- {1951372800 -25200 0 MST}
- {1962867600 -21600 1 MDT}
- {1983427200 -25200 0 MST}
- {1994317200 -21600 1 MDT}
- {2014876800 -25200 0 MST}
- {2025766800 -21600 1 MDT}
- {2046326400 -25200 0 MST}
- {2057216400 -21600 1 MDT}
- {2077776000 -25200 0 MST}
- {2088666000 -21600 1 MDT}
- {2109225600 -25200 0 MST}
- {2120115600 -21600 1 MDT}
- {2140675200 -25200 0 MST}
- {2152170000 -21600 1 MDT}
- {2172729600 -25200 0 MST}
- {2183619600 -21600 1 MDT}
- {2204179200 -25200 0 MST}
- {2215069200 -21600 1 MDT}
- {2235628800 -25200 0 MST}
- {2246518800 -21600 1 MDT}
- {2267078400 -25200 0 MST}
- {2277968400 -21600 1 MDT}
- {2298528000 -25200 0 MST}
- {2309418000 -21600 1 MDT}
- {2329977600 -25200 0 MST}
- {2341472400 -21600 1 MDT}
- {2362032000 -25200 0 MST}
- {2372922000 -21600 1 MDT}
- {2393481600 -25200 0 MST}
- {2404371600 -21600 1 MDT}
- {2424931200 -25200 0 MST}
- {2435821200 -21600 1 MDT}
- {2456380800 -25200 0 MST}
- {2467270800 -21600 1 MDT}
- {2487830400 -25200 0 MST}
- {2499325200 -21600 1 MDT}
- {2519884800 -25200 0 MST}
- {2530774800 -21600 1 MDT}
- {2551334400 -25200 0 MST}
- {2562224400 -21600 1 MDT}
- {2582784000 -25200 0 MST}
- {2593674000 -21600 1 MDT}
- {2614233600 -25200 0 MST}
- {2625123600 -21600 1 MDT}
- {2645683200 -25200 0 MST}
- {2656573200 -21600 1 MDT}
- {2677132800 -25200 0 MST}
- {2688627600 -21600 1 MDT}
- {2709187200 -25200 0 MST}
- {2720077200 -21600 1 MDT}
- {2740636800 -25200 0 MST}
- {2751526800 -21600 1 MDT}
- {2772086400 -25200 0 MST}
- {2782976400 -21600 1 MDT}
- {2803536000 -25200 0 MST}
- {2814426000 -21600 1 MDT}
- {2834985600 -25200 0 MST}
- {2846480400 -21600 1 MDT}
- {2867040000 -25200 0 MST}
- {2877930000 -21600 1 MDT}
- {2898489600 -25200 0 MST}
- {2909379600 -21600 1 MDT}
- {2929939200 -25200 0 MST}
- {2940829200 -21600 1 MDT}
- {2961388800 -25200 0 MST}
- {2972278800 -21600 1 MDT}
- {2992838400 -25200 0 MST}
- {3003728400 -21600 1 MDT}
- {3024288000 -25200 0 MST}
- {3035782800 -21600 1 MDT}
- {3056342400 -25200 0 MST}
- {3067232400 -21600 1 MDT}
- {3087792000 -25200 0 MST}
- {3098682000 -21600 1 MDT}
- {3119241600 -25200 0 MST}
- {3130131600 -21600 1 MDT}
- {3150691200 -25200 0 MST}
- {3161581200 -21600 1 MDT}
- {3182140800 -25200 0 MST}
- {3193030800 -21600 1 MDT}
- {3213590400 -25200 0 MST}
- {3225085200 -21600 1 MDT}
- {3245644800 -25200 0 MST}
- {3256534800 -21600 1 MDT}
- {3277094400 -25200 0 MST}
- {3287984400 -21600 1 MDT}
- {3308544000 -25200 0 MST}
- {3319434000 -21600 1 MDT}
- {3339993600 -25200 0 MST}
- {3350883600 -21600 1 MDT}
- {3371443200 -25200 0 MST}
- {3382938000 -21600 1 MDT}
- {3403497600 -25200 0 MST}
- {3414387600 -21600 1 MDT}
- {3434947200 -25200 0 MST}
- {3445837200 -21600 1 MDT}
- {3466396800 -25200 0 MST}
- {3477286800 -21600 1 MDT}
- {3497846400 -25200 0 MST}
- {3508736400 -21600 1 MDT}
- {3529296000 -25200 0 MST}
- {3540186000 -21600 1 MDT}
- {3560745600 -25200 0 MST}
- {3572240400 -21600 1 MDT}
- {3592800000 -25200 0 MST}
- {3603690000 -21600 1 MDT}
- {3624249600 -25200 0 MST}
- {3635139600 -21600 1 MDT}
- {3655699200 -25200 0 MST}
- {3666589200 -21600 1 MDT}
- {3687148800 -25200 0 MST}
- {3698038800 -21600 1 MDT}
- {3718598400 -25200 0 MST}
- {3730093200 -21600 1 MDT}
- {3750652800 -25200 0 MST}
- {3761542800 -21600 1 MDT}
- {3782102400 -25200 0 MST}
- {3792992400 -21600 1 MDT}
- {3813552000 -25200 0 MST}
- {3824442000 -21600 1 MDT}
- {3845001600 -25200 0 MST}
- {3855891600 -21600 1 MDT}
- {3876451200 -25200 0 MST}
- {3887341200 -21600 1 MDT}
- {3907900800 -25200 0 MST}
- {3919395600 -21600 1 MDT}
- {3939955200 -25200 0 MST}
- {3950845200 -21600 1 MDT}
- {3971404800 -25200 0 MST}
- {3982294800 -21600 1 MDT}
- {4002854400 -25200 0 MST}
- {4013744400 -21600 1 MDT}
- {4034304000 -25200 0 MST}
- {4045194000 -21600 1 MDT}
- {4065753600 -25200 0 MST}
- {4076643600 -21600 1 MDT}
- {4097203200 -25200 0 MST}
+if {![info exists TZData(America/Denver)]} {
+ LoadTimeZoneFile America/Denver
}
+set TZData(:MST7MDT) $TZData(:America/Denver)
diff --git a/library/tzdata/PST8PDT b/library/tzdata/PST8PDT
index 87a94da..be7f9f7 100644
--- a/library/tzdata/PST8PDT
+++ b/library/tzdata/PST8PDT
@@ -1,278 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:PST8PDT) {
- {-9223372036854775808 -28800 0 PST}
- {-1633269600 -25200 1 PDT}
- {-1615129200 -28800 0 PST}
- {-1601820000 -25200 1 PDT}
- {-1583679600 -28800 0 PST}
- {-880207200 -25200 1 PWT}
- {-769395600 -25200 1 PPT}
- {-765385200 -28800 0 PST}
- {-84376800 -25200 1 PDT}
- {-68655600 -28800 0 PST}
- {-52927200 -25200 1 PDT}
- {-37206000 -28800 0 PST}
- {-21477600 -25200 1 PDT}
- {-5756400 -28800 0 PST}
- {9972000 -25200 1 PDT}
- {25693200 -28800 0 PST}
- {41421600 -25200 1 PDT}
- {57747600 -28800 0 PST}
- {73476000 -25200 1 PDT}
- {89197200 -28800 0 PST}
- {104925600 -25200 1 PDT}
- {120646800 -28800 0 PST}
- {126698400 -25200 1 PDT}
- {152096400 -28800 0 PST}
- {162381600 -25200 1 PDT}
- {183546000 -28800 0 PST}
- {199274400 -25200 1 PDT}
- {215600400 -28800 0 PST}
- {230724000 -25200 1 PDT}
- {247050000 -28800 0 PST}
- {262778400 -25200 1 PDT}
- {278499600 -28800 0 PST}
- {294228000 -25200 1 PDT}
- {309949200 -28800 0 PST}
- {325677600 -25200 1 PDT}
- {341398800 -28800 0 PST}
- {357127200 -25200 1 PDT}
- {372848400 -28800 0 PST}
- {388576800 -25200 1 PDT}
- {404902800 -28800 0 PST}
- {420026400 -25200 1 PDT}
- {436352400 -28800 0 PST}
- {452080800 -25200 1 PDT}
- {467802000 -28800 0 PST}
- {483530400 -25200 1 PDT}
- {499251600 -28800 0 PST}
- {514980000 -25200 1 PDT}
- {530701200 -28800 0 PST}
- {544615200 -25200 1 PDT}
- {562150800 -28800 0 PST}
- {576064800 -25200 1 PDT}
- {594205200 -28800 0 PST}
- {607514400 -25200 1 PDT}
- {625654800 -28800 0 PST}
- {638964000 -25200 1 PDT}
- {657104400 -28800 0 PST}
- {671018400 -25200 1 PDT}
- {688554000 -28800 0 PST}
- {702468000 -25200 1 PDT}
- {720003600 -28800 0 PST}
- {733917600 -25200 1 PDT}
- {752058000 -28800 0 PST}
- {765367200 -25200 1 PDT}
- {783507600 -28800 0 PST}
- {796816800 -25200 1 PDT}
- {814957200 -28800 0 PST}
- {828871200 -25200 1 PDT}
- {846406800 -28800 0 PST}
- {860320800 -25200 1 PDT}
- {877856400 -28800 0 PST}
- {891770400 -25200 1 PDT}
- {909306000 -28800 0 PST}
- {923220000 -25200 1 PDT}
- {941360400 -28800 0 PST}
- {954669600 -25200 1 PDT}
- {972810000 -28800 0 PST}
- {986119200 -25200 1 PDT}
- {1004259600 -28800 0 PST}
- {1018173600 -25200 1 PDT}
- {1035709200 -28800 0 PST}
- {1049623200 -25200 1 PDT}
- {1067158800 -28800 0 PST}
- {1081072800 -25200 1 PDT}
- {1099213200 -28800 0 PST}
- {1112522400 -25200 1 PDT}
- {1130662800 -28800 0 PST}
- {1143972000 -25200 1 PDT}
- {1162112400 -28800 0 PST}
- {1173607200 -25200 1 PDT}
- {1194166800 -28800 0 PST}
- {1205056800 -25200 1 PDT}
- {1225616400 -28800 0 PST}
- {1236506400 -25200 1 PDT}
- {1257066000 -28800 0 PST}
- {1268560800 -25200 1 PDT}
- {1289120400 -28800 0 PST}
- {1300010400 -25200 1 PDT}
- {1320570000 -28800 0 PST}
- {1331460000 -25200 1 PDT}
- {1352019600 -28800 0 PST}
- {1362909600 -25200 1 PDT}
- {1383469200 -28800 0 PST}
- {1394359200 -25200 1 PDT}
- {1414918800 -28800 0 PST}
- {1425808800 -25200 1 PDT}
- {1446368400 -28800 0 PST}
- {1457863200 -25200 1 PDT}
- {1478422800 -28800 0 PST}
- {1489312800 -25200 1 PDT}
- {1509872400 -28800 0 PST}
- {1520762400 -25200 1 PDT}
- {1541322000 -28800 0 PST}
- {1552212000 -25200 1 PDT}
- {1572771600 -28800 0 PST}
- {1583661600 -25200 1 PDT}
- {1604221200 -28800 0 PST}
- {1615716000 -25200 1 PDT}
- {1636275600 -28800 0 PST}
- {1647165600 -25200 1 PDT}
- {1667725200 -28800 0 PST}
- {1678615200 -25200 1 PDT}
- {1699174800 -28800 0 PST}
- {1710064800 -25200 1 PDT}
- {1730624400 -28800 0 PST}
- {1741514400 -25200 1 PDT}
- {1762074000 -28800 0 PST}
- {1772964000 -25200 1 PDT}
- {1793523600 -28800 0 PST}
- {1805018400 -25200 1 PDT}
- {1825578000 -28800 0 PST}
- {1836468000 -25200 1 PDT}
- {1857027600 -28800 0 PST}
- {1867917600 -25200 1 PDT}
- {1888477200 -28800 0 PST}
- {1899367200 -25200 1 PDT}
- {1919926800 -28800 0 PST}
- {1930816800 -25200 1 PDT}
- {1951376400 -28800 0 PST}
- {1962871200 -25200 1 PDT}
- {1983430800 -28800 0 PST}
- {1994320800 -25200 1 PDT}
- {2014880400 -28800 0 PST}
- {2025770400 -25200 1 PDT}
- {2046330000 -28800 0 PST}
- {2057220000 -25200 1 PDT}
- {2077779600 -28800 0 PST}
- {2088669600 -25200 1 PDT}
- {2109229200 -28800 0 PST}
- {2120119200 -25200 1 PDT}
- {2140678800 -28800 0 PST}
- {2152173600 -25200 1 PDT}
- {2172733200 -28800 0 PST}
- {2183623200 -25200 1 PDT}
- {2204182800 -28800 0 PST}
- {2215072800 -25200 1 PDT}
- {2235632400 -28800 0 PST}
- {2246522400 -25200 1 PDT}
- {2267082000 -28800 0 PST}
- {2277972000 -25200 1 PDT}
- {2298531600 -28800 0 PST}
- {2309421600 -25200 1 PDT}
- {2329981200 -28800 0 PST}
- {2341476000 -25200 1 PDT}
- {2362035600 -28800 0 PST}
- {2372925600 -25200 1 PDT}
- {2393485200 -28800 0 PST}
- {2404375200 -25200 1 PDT}
- {2424934800 -28800 0 PST}
- {2435824800 -25200 1 PDT}
- {2456384400 -28800 0 PST}
- {2467274400 -25200 1 PDT}
- {2487834000 -28800 0 PST}
- {2499328800 -25200 1 PDT}
- {2519888400 -28800 0 PST}
- {2530778400 -25200 1 PDT}
- {2551338000 -28800 0 PST}
- {2562228000 -25200 1 PDT}
- {2582787600 -28800 0 PST}
- {2593677600 -25200 1 PDT}
- {2614237200 -28800 0 PST}
- {2625127200 -25200 1 PDT}
- {2645686800 -28800 0 PST}
- {2656576800 -25200 1 PDT}
- {2677136400 -28800 0 PST}
- {2688631200 -25200 1 PDT}
- {2709190800 -28800 0 PST}
- {2720080800 -25200 1 PDT}
- {2740640400 -28800 0 PST}
- {2751530400 -25200 1 PDT}
- {2772090000 -28800 0 PST}
- {2782980000 -25200 1 PDT}
- {2803539600 -28800 0 PST}
- {2814429600 -25200 1 PDT}
- {2834989200 -28800 0 PST}
- {2846484000 -25200 1 PDT}
- {2867043600 -28800 0 PST}
- {2877933600 -25200 1 PDT}
- {2898493200 -28800 0 PST}
- {2909383200 -25200 1 PDT}
- {2929942800 -28800 0 PST}
- {2940832800 -25200 1 PDT}
- {2961392400 -28800 0 PST}
- {2972282400 -25200 1 PDT}
- {2992842000 -28800 0 PST}
- {3003732000 -25200 1 PDT}
- {3024291600 -28800 0 PST}
- {3035786400 -25200 1 PDT}
- {3056346000 -28800 0 PST}
- {3067236000 -25200 1 PDT}
- {3087795600 -28800 0 PST}
- {3098685600 -25200 1 PDT}
- {3119245200 -28800 0 PST}
- {3130135200 -25200 1 PDT}
- {3150694800 -28800 0 PST}
- {3161584800 -25200 1 PDT}
- {3182144400 -28800 0 PST}
- {3193034400 -25200 1 PDT}
- {3213594000 -28800 0 PST}
- {3225088800 -25200 1 PDT}
- {3245648400 -28800 0 PST}
- {3256538400 -25200 1 PDT}
- {3277098000 -28800 0 PST}
- {3287988000 -25200 1 PDT}
- {3308547600 -28800 0 PST}
- {3319437600 -25200 1 PDT}
- {3339997200 -28800 0 PST}
- {3350887200 -25200 1 PDT}
- {3371446800 -28800 0 PST}
- {3382941600 -25200 1 PDT}
- {3403501200 -28800 0 PST}
- {3414391200 -25200 1 PDT}
- {3434950800 -28800 0 PST}
- {3445840800 -25200 1 PDT}
- {3466400400 -28800 0 PST}
- {3477290400 -25200 1 PDT}
- {3497850000 -28800 0 PST}
- {3508740000 -25200 1 PDT}
- {3529299600 -28800 0 PST}
- {3540189600 -25200 1 PDT}
- {3560749200 -28800 0 PST}
- {3572244000 -25200 1 PDT}
- {3592803600 -28800 0 PST}
- {3603693600 -25200 1 PDT}
- {3624253200 -28800 0 PST}
- {3635143200 -25200 1 PDT}
- {3655702800 -28800 0 PST}
- {3666592800 -25200 1 PDT}
- {3687152400 -28800 0 PST}
- {3698042400 -25200 1 PDT}
- {3718602000 -28800 0 PST}
- {3730096800 -25200 1 PDT}
- {3750656400 -28800 0 PST}
- {3761546400 -25200 1 PDT}
- {3782106000 -28800 0 PST}
- {3792996000 -25200 1 PDT}
- {3813555600 -28800 0 PST}
- {3824445600 -25200 1 PDT}
- {3845005200 -28800 0 PST}
- {3855895200 -25200 1 PDT}
- {3876454800 -28800 0 PST}
- {3887344800 -25200 1 PDT}
- {3907904400 -28800 0 PST}
- {3919399200 -25200 1 PDT}
- {3939958800 -28800 0 PST}
- {3950848800 -25200 1 PDT}
- {3971408400 -28800 0 PST}
- {3982298400 -25200 1 PDT}
- {4002858000 -28800 0 PST}
- {4013748000 -25200 1 PDT}
- {4034307600 -28800 0 PST}
- {4045197600 -25200 1 PDT}
- {4065757200 -28800 0 PST}
- {4076647200 -25200 1 PDT}
- {4097206800 -28800 0 PST}
+if {![info exists TZData(America/Los_Angeles)]} {
+ LoadTimeZoneFile America/Los_Angeles
}
+set TZData(:PST8PDT) $TZData(:America/Los_Angeles)
diff --git a/library/tzdata/Pacific/Apia b/library/tzdata/Pacific/Apia
index 783a71b..5311ed5 100644
--- a/library/tzdata/Pacific/Apia
+++ b/library/tzdata/Pacific/Apia
@@ -3,29 +3,29 @@
set TZData(:Pacific/Apia) {
{-9223372036854775808 45184 0 LMT}
{-2445424384 -41216 0 LMT}
- {-1861878784 -41400 0 -1130}
- {-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}
+ {-1861878784 -41400 0 -1230}
+ {-631110600 -39600 0 -1100}
+ {1285498800 -36000 1 -1000}
+ {1301752800 -39600 0 -1100}
+ {1316872800 -36000 1 -1000}
+ {1325239200 50400 0 +1400}
+ {1333202400 46800 0 +1300}
+ {1348927200 50400 1 +1400}
+ {1365256800 46800 0 +1300}
+ {1380376800 50400 1 +1400}
+ {1396706400 46800 0 +1300}
+ {1411826400 50400 1 +1400}
+ {1428156000 46800 0 +1300}
+ {1443276000 50400 1 +1400}
+ {1459605600 46800 0 +1300}
+ {1474725600 50400 1 +1400}
+ {1491055200 46800 0 +1300}
+ {1506175200 50400 1 +1400}
+ {1522504800 46800 0 +1300}
+ {1538229600 50400 1 +1400}
+ {1554559200 46800 0 +1300}
+ {1569679200 50400 1 +1400}
+ {1586008800 46800 0 +1300}
+ {1601128800 50400 1 +1400}
+ {1617458400 46800 0 +1300}
}
diff --git a/library/tzdata/Pacific/Bougainville b/library/tzdata/Pacific/Bougainville
index 3c00b29..5faeec8 100644
--- a/library/tzdata/Pacific/Bougainville
+++ b/library/tzdata/Pacific/Bougainville
@@ -3,8 +3,8 @@
set TZData(:Pacific/Bougainville) {
{-9223372036854775808 37336 0 LMT}
{-2840178136 35312 0 PMMT}
- {-2366790512 36000 0 +10}
- {-868010400 32400 0 +09}
- {-768906000 36000 0 +10}
- {1419696000 39600 0 +11}
+ {-2366790512 36000 0 +1000}
+ {-868010400 32400 0 +0900}
+ {-768906000 36000 0 +1000}
+ {1419696000 39600 0 +1100}
}
diff --git a/library/tzdata/Pacific/Chatham b/library/tzdata/Pacific/Chatham
index 6c1ab19..cfe6848 100644
--- a/library/tzdata/Pacific/Chatham
+++ b/library/tzdata/Pacific/Chatham
@@ -4,255 +4,255 @@ set TZData(:Pacific/Chatham) {
{-9223372036854775808 44028 0 LMT}
{-3192437628 44100 0 +1215}
{-757426500 45900 0 +1245}
- {152632800 49500 1 +1245}
+ {152632800 49500 1 +1345}
{162309600 45900 0 +1245}
- {183477600 49500 1 +1245}
+ {183477600 49500 1 +1345}
{194968800 45900 0 +1245}
- {215532000 49500 1 +1245}
+ {215532000 49500 1 +1345}
{226418400 45900 0 +1245}
- {246981600 49500 1 +1245}
+ {246981600 49500 1 +1345}
{257868000 45900 0 +1245}
- {278431200 49500 1 +1245}
+ {278431200 49500 1 +1345}
{289317600 45900 0 +1245}
- {309880800 49500 1 +1245}
+ {309880800 49500 1 +1345}
{320767200 45900 0 +1245}
- {341330400 49500 1 +1245}
+ {341330400 49500 1 +1345}
{352216800 45900 0 +1245}
- {372780000 49500 1 +1245}
+ {372780000 49500 1 +1345}
{384271200 45900 0 +1245}
- {404834400 49500 1 +1245}
+ {404834400 49500 1 +1345}
{415720800 45900 0 +1245}
- {436284000 49500 1 +1245}
+ {436284000 49500 1 +1345}
{447170400 45900 0 +1245}
- {467733600 49500 1 +1245}
+ {467733600 49500 1 +1345}
{478620000 45900 0 +1245}
- {499183200 49500 1 +1245}
+ {499183200 49500 1 +1345}
{510069600 45900 0 +1245}
- {530632800 49500 1 +1245}
+ {530632800 49500 1 +1345}
{541519200 45900 0 +1245}
- {562082400 49500 1 +1245}
+ {562082400 49500 1 +1345}
{573573600 45900 0 +1245}
- {594136800 49500 1 +1245}
+ {594136800 49500 1 +1345}
{605023200 45900 0 +1245}
- {623772000 49500 1 +1245}
+ {623772000 49500 1 +1345}
{637682400 45900 0 +1245}
- {655221600 49500 1 +1245}
+ {655221600 49500 1 +1345}
{669132000 45900 0 +1245}
- {686671200 49500 1 +1245}
+ {686671200 49500 1 +1345}
{700581600 45900 0 +1245}
- {718120800 49500 1 +1245}
+ {718120800 49500 1 +1345}
{732636000 45900 0 +1245}
- {749570400 49500 1 +1245}
+ {749570400 49500 1 +1345}
{764085600 45900 0 +1245}
- {781020000 49500 1 +1245}
+ {781020000 49500 1 +1345}
{795535200 45900 0 +1245}
- {812469600 49500 1 +1245}
+ {812469600 49500 1 +1345}
{826984800 45900 0 +1245}
- {844524000 49500 1 +1245}
+ {844524000 49500 1 +1345}
{858434400 45900 0 +1245}
- {875973600 49500 1 +1245}
+ {875973600 49500 1 +1345}
{889884000 45900 0 +1245}
- {907423200 49500 1 +1245}
+ {907423200 49500 1 +1345}
{921938400 45900 0 +1245}
- {938872800 49500 1 +1245}
+ {938872800 49500 1 +1345}
{953388000 45900 0 +1245}
- {970322400 49500 1 +1245}
+ {970322400 49500 1 +1345}
{984837600 45900 0 +1245}
- {1002376800 49500 1 +1245}
+ {1002376800 49500 1 +1345}
{1016287200 45900 0 +1245}
- {1033826400 49500 1 +1245}
+ {1033826400 49500 1 +1345}
{1047736800 45900 0 +1245}
- {1065276000 49500 1 +1245}
+ {1065276000 49500 1 +1345}
{1079791200 45900 0 +1245}
- {1096725600 49500 1 +1245}
+ {1096725600 49500 1 +1345}
{1111240800 45900 0 +1245}
- {1128175200 49500 1 +1245}
+ {1128175200 49500 1 +1345}
{1142690400 45900 0 +1245}
- {1159624800 49500 1 +1245}
+ {1159624800 49500 1 +1345}
{1174140000 45900 0 +1245}
- {1191074400 49500 1 +1245}
+ {1191074400 49500 1 +1345}
{1207404000 45900 0 +1245}
- {1222524000 49500 1 +1245}
+ {1222524000 49500 1 +1345}
{1238853600 45900 0 +1245}
- {1253973600 49500 1 +1245}
+ {1253973600 49500 1 +1345}
{1270303200 45900 0 +1245}
- {1285423200 49500 1 +1245}
+ {1285423200 49500 1 +1345}
{1301752800 45900 0 +1245}
- {1316872800 49500 1 +1245}
+ {1316872800 49500 1 +1345}
{1333202400 45900 0 +1245}
- {1348927200 49500 1 +1245}
+ {1348927200 49500 1 +1345}
{1365256800 45900 0 +1245}
- {1380376800 49500 1 +1245}
+ {1380376800 49500 1 +1345}
{1396706400 45900 0 +1245}
- {1411826400 49500 1 +1245}
+ {1411826400 49500 1 +1345}
{1428156000 45900 0 +1245}
- {1443276000 49500 1 +1245}
+ {1443276000 49500 1 +1345}
{1459605600 45900 0 +1245}
- {1474725600 49500 1 +1245}
+ {1474725600 49500 1 +1345}
{1491055200 45900 0 +1245}
- {1506175200 49500 1 +1245}
+ {1506175200 49500 1 +1345}
{1522504800 45900 0 +1245}
- {1538229600 49500 1 +1245}
+ {1538229600 49500 1 +1345}
{1554559200 45900 0 +1245}
- {1569679200 49500 1 +1245}
+ {1569679200 49500 1 +1345}
{1586008800 45900 0 +1245}
- {1601128800 49500 1 +1245}
+ {1601128800 49500 1 +1345}
{1617458400 45900 0 +1245}
- {1632578400 49500 1 +1245}
+ {1632578400 49500 1 +1345}
{1648908000 45900 0 +1245}
- {1664028000 49500 1 +1245}
+ {1664028000 49500 1 +1345}
{1680357600 45900 0 +1245}
- {1695477600 49500 1 +1245}
+ {1695477600 49500 1 +1345}
{1712412000 45900 0 +1245}
- {1727532000 49500 1 +1245}
+ {1727532000 49500 1 +1345}
{1743861600 45900 0 +1245}
- {1758981600 49500 1 +1245}
+ {1758981600 49500 1 +1345}
{1775311200 45900 0 +1245}
- {1790431200 49500 1 +1245}
+ {1790431200 49500 1 +1345}
{1806760800 45900 0 +1245}
- {1821880800 49500 1 +1245}
+ {1821880800 49500 1 +1345}
{1838210400 45900 0 +1245}
- {1853330400 49500 1 +1245}
+ {1853330400 49500 1 +1345}
{1869660000 45900 0 +1245}
- {1885384800 49500 1 +1245}
+ {1885384800 49500 1 +1345}
{1901714400 45900 0 +1245}
- {1916834400 49500 1 +1245}
+ {1916834400 49500 1 +1345}
{1933164000 45900 0 +1245}
- {1948284000 49500 1 +1245}
+ {1948284000 49500 1 +1345}
{1964613600 45900 0 +1245}
- {1979733600 49500 1 +1245}
+ {1979733600 49500 1 +1345}
{1996063200 45900 0 +1245}
- {2011183200 49500 1 +1245}
+ {2011183200 49500 1 +1345}
{2027512800 45900 0 +1245}
- {2042632800 49500 1 +1245}
+ {2042632800 49500 1 +1345}
{2058962400 45900 0 +1245}
- {2074687200 49500 1 +1245}
+ {2074687200 49500 1 +1345}
{2091016800 45900 0 +1245}
- {2106136800 49500 1 +1245}
+ {2106136800 49500 1 +1345}
{2122466400 45900 0 +1245}
- {2137586400 49500 1 +1245}
+ {2137586400 49500 1 +1345}
{2153916000 45900 0 +1245}
- {2169036000 49500 1 +1245}
+ {2169036000 49500 1 +1345}
{2185365600 45900 0 +1245}
- {2200485600 49500 1 +1245}
+ {2200485600 49500 1 +1345}
{2216815200 45900 0 +1245}
- {2232540000 49500 1 +1245}
+ {2232540000 49500 1 +1345}
{2248869600 45900 0 +1245}
- {2263989600 49500 1 +1245}
+ {2263989600 49500 1 +1345}
{2280319200 45900 0 +1245}
- {2295439200 49500 1 +1245}
+ {2295439200 49500 1 +1345}
{2311768800 45900 0 +1245}
- {2326888800 49500 1 +1245}
+ {2326888800 49500 1 +1345}
{2343218400 45900 0 +1245}
- {2358338400 49500 1 +1245}
+ {2358338400 49500 1 +1345}
{2374668000 45900 0 +1245}
- {2389788000 49500 1 +1245}
+ {2389788000 49500 1 +1345}
{2406117600 45900 0 +1245}
- {2421842400 49500 1 +1245}
+ {2421842400 49500 1 +1345}
{2438172000 45900 0 +1245}
- {2453292000 49500 1 +1245}
+ {2453292000 49500 1 +1345}
{2469621600 45900 0 +1245}
- {2484741600 49500 1 +1245}
+ {2484741600 49500 1 +1345}
{2501071200 45900 0 +1245}
- {2516191200 49500 1 +1245}
+ {2516191200 49500 1 +1345}
{2532520800 45900 0 +1245}
- {2547640800 49500 1 +1245}
+ {2547640800 49500 1 +1345}
{2563970400 45900 0 +1245}
- {2579090400 49500 1 +1245}
+ {2579090400 49500 1 +1345}
{2596024800 45900 0 +1245}
- {2611144800 49500 1 +1245}
+ {2611144800 49500 1 +1345}
{2627474400 45900 0 +1245}
- {2642594400 49500 1 +1245}
+ {2642594400 49500 1 +1345}
{2658924000 45900 0 +1245}
- {2674044000 49500 1 +1245}
+ {2674044000 49500 1 +1345}
{2690373600 45900 0 +1245}
- {2705493600 49500 1 +1245}
+ {2705493600 49500 1 +1345}
{2721823200 45900 0 +1245}
- {2736943200 49500 1 +1245}
+ {2736943200 49500 1 +1345}
{2753272800 45900 0 +1245}
- {2768997600 49500 1 +1245}
+ {2768997600 49500 1 +1345}
{2785327200 45900 0 +1245}
- {2800447200 49500 1 +1245}
+ {2800447200 49500 1 +1345}
{2816776800 45900 0 +1245}
- {2831896800 49500 1 +1245}
+ {2831896800 49500 1 +1345}
{2848226400 45900 0 +1245}
- {2863346400 49500 1 +1245}
+ {2863346400 49500 1 +1345}
{2879676000 45900 0 +1245}
- {2894796000 49500 1 +1245}
+ {2894796000 49500 1 +1345}
{2911125600 45900 0 +1245}
- {2926245600 49500 1 +1245}
+ {2926245600 49500 1 +1345}
{2942575200 45900 0 +1245}
- {2958300000 49500 1 +1245}
+ {2958300000 49500 1 +1345}
{2974629600 45900 0 +1245}
- {2989749600 49500 1 +1245}
+ {2989749600 49500 1 +1345}
{3006079200 45900 0 +1245}
- {3021199200 49500 1 +1245}
+ {3021199200 49500 1 +1345}
{3037528800 45900 0 +1245}
- {3052648800 49500 1 +1245}
+ {3052648800 49500 1 +1345}
{3068978400 45900 0 +1245}
- {3084098400 49500 1 +1245}
+ {3084098400 49500 1 +1345}
{3100428000 45900 0 +1245}
- {3116152800 49500 1 +1245}
+ {3116152800 49500 1 +1345}
{3132482400 45900 0 +1245}
- {3147602400 49500 1 +1245}
+ {3147602400 49500 1 +1345}
{3163932000 45900 0 +1245}
- {3179052000 49500 1 +1245}
+ {3179052000 49500 1 +1345}
{3195381600 45900 0 +1245}
- {3210501600 49500 1 +1245}
+ {3210501600 49500 1 +1345}
{3226831200 45900 0 +1245}
- {3241951200 49500 1 +1245}
+ {3241951200 49500 1 +1345}
{3258280800 45900 0 +1245}
- {3273400800 49500 1 +1245}
+ {3273400800 49500 1 +1345}
{3289730400 45900 0 +1245}
- {3305455200 49500 1 +1245}
+ {3305455200 49500 1 +1345}
{3321784800 45900 0 +1245}
- {3336904800 49500 1 +1245}
+ {3336904800 49500 1 +1345}
{3353234400 45900 0 +1245}
- {3368354400 49500 1 +1245}
+ {3368354400 49500 1 +1345}
{3384684000 45900 0 +1245}
- {3399804000 49500 1 +1245}
+ {3399804000 49500 1 +1345}
{3416133600 45900 0 +1245}
- {3431253600 49500 1 +1245}
+ {3431253600 49500 1 +1345}
{3447583200 45900 0 +1245}
- {3462703200 49500 1 +1245}
+ {3462703200 49500 1 +1345}
{3479637600 45900 0 +1245}
- {3494757600 49500 1 +1245}
+ {3494757600 49500 1 +1345}
{3511087200 45900 0 +1245}
- {3526207200 49500 1 +1245}
+ {3526207200 49500 1 +1345}
{3542536800 45900 0 +1245}
- {3557656800 49500 1 +1245}
+ {3557656800 49500 1 +1345}
{3573986400 45900 0 +1245}
- {3589106400 49500 1 +1245}
+ {3589106400 49500 1 +1345}
{3605436000 45900 0 +1245}
- {3620556000 49500 1 +1245}
+ {3620556000 49500 1 +1345}
{3636885600 45900 0 +1245}
- {3652610400 49500 1 +1245}
+ {3652610400 49500 1 +1345}
{3668940000 45900 0 +1245}
- {3684060000 49500 1 +1245}
+ {3684060000 49500 1 +1345}
{3700389600 45900 0 +1245}
- {3715509600 49500 1 +1245}
+ {3715509600 49500 1 +1345}
{3731839200 45900 0 +1245}
- {3746959200 49500 1 +1245}
+ {3746959200 49500 1 +1345}
{3763288800 45900 0 +1245}
- {3778408800 49500 1 +1245}
+ {3778408800 49500 1 +1345}
{3794738400 45900 0 +1245}
- {3809858400 49500 1 +1245}
+ {3809858400 49500 1 +1345}
{3826188000 45900 0 +1245}
- {3841912800 49500 1 +1245}
+ {3841912800 49500 1 +1345}
{3858242400 45900 0 +1245}
- {3873362400 49500 1 +1245}
+ {3873362400 49500 1 +1345}
{3889692000 45900 0 +1245}
- {3904812000 49500 1 +1245}
+ {3904812000 49500 1 +1345}
{3921141600 45900 0 +1245}
- {3936261600 49500 1 +1245}
+ {3936261600 49500 1 +1345}
{3952591200 45900 0 +1245}
- {3967711200 49500 1 +1245}
+ {3967711200 49500 1 +1345}
{3984040800 45900 0 +1245}
- {3999765600 49500 1 +1245}
+ {3999765600 49500 1 +1345}
{4016095200 45900 0 +1245}
- {4031215200 49500 1 +1245}
+ {4031215200 49500 1 +1345}
{4047544800 45900 0 +1245}
- {4062664800 49500 1 +1245}
+ {4062664800 49500 1 +1345}
{4078994400 45900 0 +1245}
- {4094114400 49500 1 +1245}
+ {4094114400 49500 1 +1345}
}
diff --git a/library/tzdata/Pacific/Easter b/library/tzdata/Pacific/Easter
index 97e1f4f..4d82ec1 100644
--- a/library/tzdata/Pacific/Easter
+++ b/library/tzdata/Pacific/Easter
@@ -3,266 +3,266 @@
set TZData(:Pacific/Easter) {
{-9223372036854775808 -26248 0 LMT}
{-2524495352 -26248 0 EMT}
- {-1178124152 -25200 0 -07}
- {-36619200 -21600 1 -07}
- {-23922000 -25200 0 -07}
- {-3355200 -21600 1 -07}
- {7527600 -25200 0 -07}
- {24465600 -21600 1 -07}
- {37767600 -25200 0 -07}
- {55915200 -21600 1 -07}
- {69217200 -25200 0 -07}
- {87969600 -21600 1 -07}
- {100666800 -25200 0 -07}
- {118209600 -21600 1 -07}
- {132116400 -25200 0 -07}
- {150868800 -21600 1 -07}
- {163566000 -25200 0 -07}
- {182318400 -21600 1 -07}
- {195620400 -25200 0 -07}
- {213768000 -21600 1 -07}
- {227070000 -25200 0 -07}
- {245217600 -21600 1 -07}
- {258519600 -25200 0 -07}
- {277272000 -21600 1 -07}
- {289969200 -25200 0 -07}
- {308721600 -21600 1 -07}
- {321418800 -25200 0 -07}
- {340171200 -21600 1 -07}
- {353473200 -25200 0 -07}
- {371620800 -21600 1 -07}
- {384922800 -21600 0 -06}
- {403070400 -18000 1 -06}
- {416372400 -21600 0 -06}
- {434520000 -18000 1 -06}
- {447822000 -21600 0 -06}
- {466574400 -18000 1 -06}
- {479271600 -21600 0 -06}
- {498024000 -18000 1 -06}
- {510721200 -21600 0 -06}
- {529473600 -18000 1 -06}
- {545194800 -21600 0 -06}
- {560923200 -18000 1 -06}
- {574225200 -21600 0 -06}
- {592372800 -18000 1 -06}
- {605674800 -21600 0 -06}
- {624427200 -18000 1 -06}
- {637124400 -21600 0 -06}
- {653457600 -18000 1 -06}
- {668574000 -21600 0 -06}
- {687326400 -18000 1 -06}
- {700628400 -21600 0 -06}
- {718776000 -18000 1 -06}
- {732078000 -21600 0 -06}
- {750225600 -18000 1 -06}
- {763527600 -21600 0 -06}
- {781675200 -18000 1 -06}
- {794977200 -21600 0 -06}
- {813729600 -18000 1 -06}
- {826426800 -21600 0 -06}
- {845179200 -18000 1 -06}
- {859690800 -21600 0 -06}
- {876628800 -18000 1 -06}
- {889930800 -21600 0 -06}
- {906868800 -18000 1 -06}
- {923194800 -21600 0 -06}
- {939528000 -18000 1 -06}
- {952830000 -21600 0 -06}
- {971582400 -18000 1 -06}
- {984279600 -21600 0 -06}
- {1003032000 -18000 1 -06}
- {1015729200 -21600 0 -06}
- {1034481600 -18000 1 -06}
- {1047178800 -21600 0 -06}
- {1065931200 -18000 1 -06}
- {1079233200 -21600 0 -06}
- {1097380800 -18000 1 -06}
- {1110682800 -21600 0 -06}
- {1128830400 -18000 1 -06}
- {1142132400 -21600 0 -06}
- {1160884800 -18000 1 -06}
- {1173582000 -21600 0 -06}
- {1192334400 -18000 1 -06}
- {1206846000 -21600 0 -06}
- {1223784000 -18000 1 -06}
- {1237086000 -21600 0 -06}
- {1255233600 -18000 1 -06}
- {1270350000 -21600 0 -06}
- {1286683200 -18000 1 -06}
- {1304823600 -21600 0 -06}
- {1313899200 -18000 1 -06}
- {1335668400 -21600 0 -06}
- {1346558400 -18000 1 -06}
- {1367118000 -21600 0 -06}
- {1378612800 -18000 1 -06}
- {1398567600 -21600 0 -06}
- {1410062400 -18000 1 -06}
- {1463281200 -21600 0 -06}
- {1471147200 -18000 1 -06}
- {1494730800 -21600 0 -06}
- {1502596800 -18000 1 -06}
- {1526180400 -21600 0 -06}
- {1534046400 -18000 1 -06}
- {1554606000 -21600 0 -06}
- {1567915200 -18000 1 -06}
- {1586055600 -21600 0 -06}
- {1599364800 -18000 1 -06}
- {1617505200 -21600 0 -06}
- {1630814400 -18000 1 -06}
- {1648954800 -21600 0 -06}
- {1662868800 -18000 1 -06}
- {1680404400 -21600 0 -06}
- {1693713600 -18000 1 -06}
- {1712458800 -21600 0 -06}
- {1725768000 -18000 1 -06}
- {1743908400 -21600 0 -06}
- {1757217600 -18000 1 -06}
- {1775358000 -21600 0 -06}
- {1788667200 -18000 1 -06}
- {1806807600 -21600 0 -06}
- {1820116800 -18000 1 -06}
- {1838257200 -21600 0 -06}
- {1851566400 -18000 1 -06}
- {1870311600 -21600 0 -06}
- {1883016000 -18000 1 -06}
- {1901761200 -21600 0 -06}
- {1915070400 -18000 1 -06}
- {1933210800 -21600 0 -06}
- {1946520000 -18000 1 -06}
- {1964660400 -21600 0 -06}
- {1977969600 -18000 1 -06}
- {1996110000 -21600 0 -06}
- {2009419200 -18000 1 -06}
- {2027559600 -21600 0 -06}
- {2040868800 -18000 1 -06}
- {2059614000 -21600 0 -06}
- {2072318400 -18000 1 -06}
- {2091063600 -21600 0 -06}
- {2104372800 -18000 1 -06}
- {2122513200 -21600 0 -06}
- {2135822400 -18000 1 -06}
- {2153962800 -21600 0 -06}
- {2167272000 -18000 1 -06}
- {2185412400 -21600 0 -06}
- {2198721600 -18000 1 -06}
- {2217466800 -21600 0 -06}
- {2230171200 -18000 1 -06}
- {2248916400 -21600 0 -06}
- {2262225600 -18000 1 -06}
- {2280366000 -21600 0 -06}
- {2293675200 -18000 1 -06}
- {2311815600 -21600 0 -06}
- {2325124800 -18000 1 -06}
- {2343265200 -21600 0 -06}
- {2356574400 -18000 1 -06}
- {2374714800 -21600 0 -06}
- {2388024000 -18000 1 -06}
- {2406769200 -21600 0 -06}
- {2419473600 -18000 1 -06}
- {2438218800 -21600 0 -06}
- {2451528000 -18000 1 -06}
- {2469668400 -21600 0 -06}
- {2482977600 -18000 1 -06}
- {2501118000 -21600 0 -06}
- {2514427200 -18000 1 -06}
- {2532567600 -21600 0 -06}
- {2545876800 -18000 1 -06}
- {2564017200 -21600 0 -06}
- {2577326400 -18000 1 -06}
- {2596071600 -21600 0 -06}
- {2609380800 -18000 1 -06}
- {2627521200 -21600 0 -06}
- {2640830400 -18000 1 -06}
- {2658970800 -21600 0 -06}
- {2672280000 -18000 1 -06}
- {2690420400 -21600 0 -06}
- {2703729600 -18000 1 -06}
- {2721870000 -21600 0 -06}
- {2735179200 -18000 1 -06}
- {2753924400 -21600 0 -06}
- {2766628800 -18000 1 -06}
- {2785374000 -21600 0 -06}
- {2798683200 -18000 1 -06}
- {2816823600 -21600 0 -06}
- {2830132800 -18000 1 -06}
- {2848273200 -21600 0 -06}
- {2861582400 -18000 1 -06}
- {2879722800 -21600 0 -06}
- {2893032000 -18000 1 -06}
- {2911172400 -21600 0 -06}
- {2924481600 -18000 1 -06}
- {2943226800 -21600 0 -06}
- {2955931200 -18000 1 -06}
- {2974676400 -21600 0 -06}
- {2987985600 -18000 1 -06}
- {3006126000 -21600 0 -06}
- {3019435200 -18000 1 -06}
- {3037575600 -21600 0 -06}
- {3050884800 -18000 1 -06}
- {3069025200 -21600 0 -06}
- {3082334400 -18000 1 -06}
- {3101079600 -21600 0 -06}
- {3113784000 -18000 1 -06}
- {3132529200 -21600 0 -06}
- {3145838400 -18000 1 -06}
- {3163978800 -21600 0 -06}
- {3177288000 -18000 1 -06}
- {3195428400 -21600 0 -06}
- {3208737600 -18000 1 -06}
- {3226878000 -21600 0 -06}
- {3240187200 -18000 1 -06}
- {3258327600 -21600 0 -06}
- {3271636800 -18000 1 -06}
- {3290382000 -21600 0 -06}
- {3303086400 -18000 1 -06}
- {3321831600 -21600 0 -06}
- {3335140800 -18000 1 -06}
- {3353281200 -21600 0 -06}
- {3366590400 -18000 1 -06}
- {3384730800 -21600 0 -06}
- {3398040000 -18000 1 -06}
- {3416180400 -21600 0 -06}
- {3429489600 -18000 1 -06}
- {3447630000 -21600 0 -06}
- {3460939200 -18000 1 -06}
- {3479684400 -21600 0 -06}
- {3492993600 -18000 1 -06}
- {3511134000 -21600 0 -06}
- {3524443200 -18000 1 -06}
- {3542583600 -21600 0 -06}
- {3555892800 -18000 1 -06}
- {3574033200 -21600 0 -06}
- {3587342400 -18000 1 -06}
- {3605482800 -21600 0 -06}
- {3618792000 -18000 1 -06}
- {3637537200 -21600 0 -06}
- {3650241600 -18000 1 -06}
- {3668986800 -21600 0 -06}
- {3682296000 -18000 1 -06}
- {3700436400 -21600 0 -06}
- {3713745600 -18000 1 -06}
- {3731886000 -21600 0 -06}
- {3745195200 -18000 1 -06}
- {3763335600 -21600 0 -06}
- {3776644800 -18000 1 -06}
- {3794785200 -21600 0 -06}
- {3808094400 -18000 1 -06}
- {3826839600 -21600 0 -06}
- {3839544000 -18000 1 -06}
- {3858289200 -21600 0 -06}
- {3871598400 -18000 1 -06}
- {3889738800 -21600 0 -06}
- {3903048000 -18000 1 -06}
- {3921188400 -21600 0 -06}
- {3934497600 -18000 1 -06}
- {3952638000 -21600 0 -06}
- {3965947200 -18000 1 -06}
- {3984692400 -21600 0 -06}
- {3997396800 -18000 1 -06}
- {4016142000 -21600 0 -06}
- {4029451200 -18000 1 -06}
- {4047591600 -21600 0 -06}
- {4060900800 -18000 1 -06}
- {4079041200 -21600 0 -06}
- {4092350400 -18000 1 -06}
+ {-1178124152 -25200 0 -0700}
+ {-36619200 -21600 1 -0600}
+ {-23922000 -25200 0 -0700}
+ {-3355200 -21600 1 -0600}
+ {7527600 -25200 0 -0700}
+ {24465600 -21600 1 -0600}
+ {37767600 -25200 0 -0700}
+ {55915200 -21600 1 -0600}
+ {69217200 -25200 0 -0700}
+ {87969600 -21600 1 -0600}
+ {100666800 -25200 0 -0700}
+ {118209600 -21600 1 -0600}
+ {132116400 -25200 0 -0700}
+ {150868800 -21600 1 -0600}
+ {163566000 -25200 0 -0700}
+ {182318400 -21600 1 -0600}
+ {195620400 -25200 0 -0700}
+ {213768000 -21600 1 -0600}
+ {227070000 -25200 0 -0700}
+ {245217600 -21600 1 -0600}
+ {258519600 -25200 0 -0700}
+ {277272000 -21600 1 -0600}
+ {289969200 -25200 0 -0700}
+ {308721600 -21600 1 -0600}
+ {321418800 -25200 0 -0700}
+ {340171200 -21600 1 -0600}
+ {353473200 -25200 0 -0700}
+ {371620800 -21600 1 -0600}
+ {384922800 -21600 0 -0600}
+ {403070400 -18000 1 -0500}
+ {416372400 -21600 0 -0600}
+ {434520000 -18000 1 -0500}
+ {447822000 -21600 0 -0600}
+ {466574400 -18000 1 -0500}
+ {479271600 -21600 0 -0600}
+ {498024000 -18000 1 -0500}
+ {510721200 -21600 0 -0600}
+ {529473600 -18000 1 -0500}
+ {545194800 -21600 0 -0600}
+ {560923200 -18000 1 -0500}
+ {574225200 -21600 0 -0600}
+ {592372800 -18000 1 -0500}
+ {605674800 -21600 0 -0600}
+ {624427200 -18000 1 -0500}
+ {637124400 -21600 0 -0600}
+ {653457600 -18000 1 -0500}
+ {668574000 -21600 0 -0600}
+ {687326400 -18000 1 -0500}
+ {700628400 -21600 0 -0600}
+ {718776000 -18000 1 -0500}
+ {732078000 -21600 0 -0600}
+ {750225600 -18000 1 -0500}
+ {763527600 -21600 0 -0600}
+ {781675200 -18000 1 -0500}
+ {794977200 -21600 0 -0600}
+ {813729600 -18000 1 -0500}
+ {826426800 -21600 0 -0600}
+ {845179200 -18000 1 -0500}
+ {859690800 -21600 0 -0600}
+ {876628800 -18000 1 -0500}
+ {889930800 -21600 0 -0600}
+ {906868800 -18000 1 -0500}
+ {923194800 -21600 0 -0600}
+ {939528000 -18000 1 -0500}
+ {952830000 -21600 0 -0600}
+ {971582400 -18000 1 -0500}
+ {984279600 -21600 0 -0600}
+ {1003032000 -18000 1 -0500}
+ {1015729200 -21600 0 -0600}
+ {1034481600 -18000 1 -0500}
+ {1047178800 -21600 0 -0600}
+ {1065931200 -18000 1 -0500}
+ {1079233200 -21600 0 -0600}
+ {1097380800 -18000 1 -0500}
+ {1110682800 -21600 0 -0600}
+ {1128830400 -18000 1 -0500}
+ {1142132400 -21600 0 -0600}
+ {1160884800 -18000 1 -0500}
+ {1173582000 -21600 0 -0600}
+ {1192334400 -18000 1 -0500}
+ {1206846000 -21600 0 -0600}
+ {1223784000 -18000 1 -0500}
+ {1237086000 -21600 0 -0600}
+ {1255233600 -18000 1 -0500}
+ {1270350000 -21600 0 -0600}
+ {1286683200 -18000 1 -0500}
+ {1304823600 -21600 0 -0600}
+ {1313899200 -18000 1 -0500}
+ {1335668400 -21600 0 -0600}
+ {1346558400 -18000 1 -0500}
+ {1367118000 -21600 0 -0600}
+ {1378612800 -18000 1 -0500}
+ {1398567600 -21600 0 -0600}
+ {1410062400 -18000 1 -0500}
+ {1463281200 -21600 0 -0600}
+ {1471147200 -18000 1 -0500}
+ {1494730800 -21600 0 -0600}
+ {1502596800 -18000 1 -0500}
+ {1526180400 -21600 0 -0600}
+ {1534046400 -18000 1 -0500}
+ {1554606000 -21600 0 -0600}
+ {1567915200 -18000 1 -0500}
+ {1586055600 -21600 0 -0600}
+ {1599364800 -18000 1 -0500}
+ {1617505200 -21600 0 -0600}
+ {1630814400 -18000 1 -0500}
+ {1648954800 -21600 0 -0600}
+ {1662868800 -18000 1 -0500}
+ {1680404400 -21600 0 -0600}
+ {1693713600 -18000 1 -0500}
+ {1712458800 -21600 0 -0600}
+ {1725768000 -18000 1 -0500}
+ {1743908400 -21600 0 -0600}
+ {1757217600 -18000 1 -0500}
+ {1775358000 -21600 0 -0600}
+ {1788667200 -18000 1 -0500}
+ {1806807600 -21600 0 -0600}
+ {1820116800 -18000 1 -0500}
+ {1838257200 -21600 0 -0600}
+ {1851566400 -18000 1 -0500}
+ {1870311600 -21600 0 -0600}
+ {1883016000 -18000 1 -0500}
+ {1901761200 -21600 0 -0600}
+ {1915070400 -18000 1 -0500}
+ {1933210800 -21600 0 -0600}
+ {1946520000 -18000 1 -0500}
+ {1964660400 -21600 0 -0600}
+ {1977969600 -18000 1 -0500}
+ {1996110000 -21600 0 -0600}
+ {2009419200 -18000 1 -0500}
+ {2027559600 -21600 0 -0600}
+ {2040868800 -18000 1 -0500}
+ {2059614000 -21600 0 -0600}
+ {2072318400 -18000 1 -0500}
+ {2091063600 -21600 0 -0600}
+ {2104372800 -18000 1 -0500}
+ {2122513200 -21600 0 -0600}
+ {2135822400 -18000 1 -0500}
+ {2153962800 -21600 0 -0600}
+ {2167272000 -18000 1 -0500}
+ {2185412400 -21600 0 -0600}
+ {2198721600 -18000 1 -0500}
+ {2217466800 -21600 0 -0600}
+ {2230171200 -18000 1 -0500}
+ {2248916400 -21600 0 -0600}
+ {2262225600 -18000 1 -0500}
+ {2280366000 -21600 0 -0600}
+ {2293675200 -18000 1 -0500}
+ {2311815600 -21600 0 -0600}
+ {2325124800 -18000 1 -0500}
+ {2343265200 -21600 0 -0600}
+ {2356574400 -18000 1 -0500}
+ {2374714800 -21600 0 -0600}
+ {2388024000 -18000 1 -0500}
+ {2406769200 -21600 0 -0600}
+ {2419473600 -18000 1 -0500}
+ {2438218800 -21600 0 -0600}
+ {2451528000 -18000 1 -0500}
+ {2469668400 -21600 0 -0600}
+ {2482977600 -18000 1 -0500}
+ {2501118000 -21600 0 -0600}
+ {2514427200 -18000 1 -0500}
+ {2532567600 -21600 0 -0600}
+ {2545876800 -18000 1 -0500}
+ {2564017200 -21600 0 -0600}
+ {2577326400 -18000 1 -0500}
+ {2596071600 -21600 0 -0600}
+ {2609380800 -18000 1 -0500}
+ {2627521200 -21600 0 -0600}
+ {2640830400 -18000 1 -0500}
+ {2658970800 -21600 0 -0600}
+ {2672280000 -18000 1 -0500}
+ {2690420400 -21600 0 -0600}
+ {2703729600 -18000 1 -0500}
+ {2721870000 -21600 0 -0600}
+ {2735179200 -18000 1 -0500}
+ {2753924400 -21600 0 -0600}
+ {2766628800 -18000 1 -0500}
+ {2785374000 -21600 0 -0600}
+ {2798683200 -18000 1 -0500}
+ {2816823600 -21600 0 -0600}
+ {2830132800 -18000 1 -0500}
+ {2848273200 -21600 0 -0600}
+ {2861582400 -18000 1 -0500}
+ {2879722800 -21600 0 -0600}
+ {2893032000 -18000 1 -0500}
+ {2911172400 -21600 0 -0600}
+ {2924481600 -18000 1 -0500}
+ {2943226800 -21600 0 -0600}
+ {2955931200 -18000 1 -0500}
+ {2974676400 -21600 0 -0600}
+ {2987985600 -18000 1 -0500}
+ {3006126000 -21600 0 -0600}
+ {3019435200 -18000 1 -0500}
+ {3037575600 -21600 0 -0600}
+ {3050884800 -18000 1 -0500}
+ {3069025200 -21600 0 -0600}
+ {3082334400 -18000 1 -0500}
+ {3101079600 -21600 0 -0600}
+ {3113784000 -18000 1 -0500}
+ {3132529200 -21600 0 -0600}
+ {3145838400 -18000 1 -0500}
+ {3163978800 -21600 0 -0600}
+ {3177288000 -18000 1 -0500}
+ {3195428400 -21600 0 -0600}
+ {3208737600 -18000 1 -0500}
+ {3226878000 -21600 0 -0600}
+ {3240187200 -18000 1 -0500}
+ {3258327600 -21600 0 -0600}
+ {3271636800 -18000 1 -0500}
+ {3290382000 -21600 0 -0600}
+ {3303086400 -18000 1 -0500}
+ {3321831600 -21600 0 -0600}
+ {3335140800 -18000 1 -0500}
+ {3353281200 -21600 0 -0600}
+ {3366590400 -18000 1 -0500}
+ {3384730800 -21600 0 -0600}
+ {3398040000 -18000 1 -0500}
+ {3416180400 -21600 0 -0600}
+ {3429489600 -18000 1 -0500}
+ {3447630000 -21600 0 -0600}
+ {3460939200 -18000 1 -0500}
+ {3479684400 -21600 0 -0600}
+ {3492993600 -18000 1 -0500}
+ {3511134000 -21600 0 -0600}
+ {3524443200 -18000 1 -0500}
+ {3542583600 -21600 0 -0600}
+ {3555892800 -18000 1 -0500}
+ {3574033200 -21600 0 -0600}
+ {3587342400 -18000 1 -0500}
+ {3605482800 -21600 0 -0600}
+ {3618792000 -18000 1 -0500}
+ {3637537200 -21600 0 -0600}
+ {3650241600 -18000 1 -0500}
+ {3668986800 -21600 0 -0600}
+ {3682296000 -18000 1 -0500}
+ {3700436400 -21600 0 -0600}
+ {3713745600 -18000 1 -0500}
+ {3731886000 -21600 0 -0600}
+ {3745195200 -18000 1 -0500}
+ {3763335600 -21600 0 -0600}
+ {3776644800 -18000 1 -0500}
+ {3794785200 -21600 0 -0600}
+ {3808094400 -18000 1 -0500}
+ {3826839600 -21600 0 -0600}
+ {3839544000 -18000 1 -0500}
+ {3858289200 -21600 0 -0600}
+ {3871598400 -18000 1 -0500}
+ {3889738800 -21600 0 -0600}
+ {3903048000 -18000 1 -0500}
+ {3921188400 -21600 0 -0600}
+ {3934497600 -18000 1 -0500}
+ {3952638000 -21600 0 -0600}
+ {3965947200 -18000 1 -0500}
+ {3984692400 -21600 0 -0600}
+ {3997396800 -18000 1 -0500}
+ {4016142000 -21600 0 -0600}
+ {4029451200 -18000 1 -0500}
+ {4047591600 -21600 0 -0600}
+ {4060900800 -18000 1 -0500}
+ {4079041200 -21600 0 -0600}
+ {4092350400 -18000 1 -0500}
}
diff --git a/library/tzdata/Pacific/Efate b/library/tzdata/Pacific/Efate
index 5a22546..858a9cc 100644
--- a/library/tzdata/Pacific/Efate
+++ b/library/tzdata/Pacific/Efate
@@ -2,27 +2,27 @@
set TZData(:Pacific/Efate) {
{-9223372036854775808 40396 0 LMT}
- {-1829387596 39600 0 +11}
- {125409600 43200 1 +11}
- {133876800 39600 0 +11}
- {433256400 43200 1 +11}
- {448977600 39600 0 +11}
- {464706000 43200 1 +11}
- {480427200 39600 0 +11}
- {496760400 43200 1 +11}
- {511876800 39600 0 +11}
- {528210000 43200 1 +11}
- {543931200 39600 0 +11}
- {559659600 43200 1 +11}
- {575380800 39600 0 +11}
- {591109200 43200 1 +11}
- {606830400 39600 0 +11}
- {622558800 43200 1 +11}
- {638280000 39600 0 +11}
- {654008400 43200 1 +11}
- {669729600 39600 0 +11}
- {686062800 43200 1 +11}
- {696340800 39600 0 +11}
- {719931600 43200 1 +11}
- {727790400 39600 0 +11}
+ {-1829387596 39600 0 +1100}
+ {125409600 43200 1 +1200}
+ {133876800 39600 0 +1100}
+ {433256400 43200 1 +1200}
+ {448977600 39600 0 +1100}
+ {464706000 43200 1 +1200}
+ {480427200 39600 0 +1100}
+ {496760400 43200 1 +1200}
+ {511876800 39600 0 +1100}
+ {528210000 43200 1 +1200}
+ {543931200 39600 0 +1100}
+ {559659600 43200 1 +1200}
+ {575380800 39600 0 +1100}
+ {591109200 43200 1 +1200}
+ {606830400 39600 0 +1100}
+ {622558800 43200 1 +1200}
+ {638280000 39600 0 +1100}
+ {654008400 43200 1 +1200}
+ {669729600 39600 0 +1100}
+ {686062800 43200 1 +1200}
+ {696340800 39600 0 +1100}
+ {719931600 43200 1 +1200}
+ {727790400 39600 0 +1100}
}
diff --git a/library/tzdata/Pacific/Fakaofo b/library/tzdata/Pacific/Fakaofo
index d75030d..7835787 100644
--- a/library/tzdata/Pacific/Fakaofo
+++ b/library/tzdata/Pacific/Fakaofo
@@ -2,6 +2,6 @@
set TZData(:Pacific/Fakaofo) {
{-9223372036854775808 -41096 0 LMT}
- {-2177411704 -39600 0 -11}
- {1325242800 46800 0 +13}
+ {-2177411704 -39600 0 -1100}
+ {1325242800 46800 0 +1300}
}
diff --git a/library/tzdata/Pacific/Fiji b/library/tzdata/Pacific/Fiji
index 67a1f00..917021d 100644
--- a/library/tzdata/Pacific/Fiji
+++ b/library/tzdata/Pacific/Fiji
@@ -2,188 +2,33 @@
set TZData(:Pacific/Fiji) {
{-9223372036854775808 42944 0 LMT}
- {-1709985344 43200 0 +12}
- {909842400 46800 1 +12}
- {920124000 43200 0 +12}
- {941896800 46800 1 +12}
- {951573600 43200 0 +12}
- {1259416800 46800 1 +12}
- {1269698400 43200 0 +12}
- {1287842400 46800 1 +12}
- {1299333600 43200 0 +12}
- {1319292000 46800 1 +12}
- {1327154400 43200 0 +12}
- {1350741600 46800 1 +12}
- {1358604000 43200 0 +12}
- {1382796000 46800 1 +12}
- {1390050000 43200 0 +12}
- {1414850400 46800 1 +12}
- {1421503200 43200 0 +12}
- {1446300000 46800 1 +12}
- {1452952800 43200 0 +12}
- {1478354400 46800 1 +12}
- {1484402400 43200 0 +12}
- {1509804000 46800 1 +12}
- {1515852000 43200 0 +12}
- {1541253600 46800 1 +12}
- {1547301600 43200 0 +12}
- {1573308000 46800 1 +12}
- {1578751200 43200 0 +12}
- {1608386400 46800 1 +12}
- {1610805600 43200 0 +12}
- {1668261600 46800 1 +12}
- {1673704800 43200 0 +12}
- {1699711200 46800 1 +12}
- {1705154400 43200 0 +12}
- {1731160800 46800 1 +12}
- {1736604000 43200 0 +12}
- {1762610400 46800 1 +12}
- {1768658400 43200 0 +12}
- {1794060000 46800 1 +12}
- {1800108000 43200 0 +12}
- {1826114400 46800 1 +12}
- {1831557600 43200 0 +12}
- {1857564000 46800 1 +12}
- {1863007200 43200 0 +12}
- {1889013600 46800 1 +12}
- {1894456800 43200 0 +12}
- {1920463200 46800 1 +12}
- {1925906400 43200 0 +12}
- {1951912800 46800 1 +12}
- {1957960800 43200 0 +12}
- {1983967200 46800 1 +12}
- {1989410400 43200 0 +12}
- {2015416800 46800 1 +12}
- {2020860000 43200 0 +12}
- {2046866400 46800 1 +12}
- {2052309600 43200 0 +12}
- {2078316000 46800 1 +12}
- {2083759200 43200 0 +12}
- {2109765600 46800 1 +12}
- {2115813600 43200 0 +12}
- {2141215200 46800 1 +12}
- {2147263200 43200 0 +12}
- {2173269600 46800 1 +12}
- {2178712800 43200 0 +12}
- {2204719200 46800 1 +12}
- {2210162400 43200 0 +12}
- {2236168800 46800 1 +12}
- {2241612000 43200 0 +12}
- {2267618400 46800 1 +12}
- {2273061600 43200 0 +12}
- {2299068000 46800 1 +12}
- {2305116000 43200 0 +12}
- {2330517600 46800 1 +12}
- {2336565600 43200 0 +12}
- {2362572000 46800 1 +12}
- {2368015200 43200 0 +12}
- {2394021600 46800 1 +12}
- {2399464800 43200 0 +12}
- {2425471200 46800 1 +12}
- {2430914400 43200 0 +12}
- {2456920800 46800 1 +12}
- {2462364000 43200 0 +12}
- {2488370400 46800 1 +12}
- {2494418400 43200 0 +12}
- {2520424800 46800 1 +12}
- {2525868000 43200 0 +12}
- {2551874400 46800 1 +12}
- {2557317600 43200 0 +12}
- {2583324000 46800 1 +12}
- {2588767200 43200 0 +12}
- {2614773600 46800 1 +12}
- {2620216800 43200 0 +12}
- {2646223200 46800 1 +12}
- {2652271200 43200 0 +12}
- {2677672800 46800 1 +12}
- {2683720800 43200 0 +12}
- {2709727200 46800 1 +12}
- {2715170400 43200 0 +12}
- {2741176800 46800 1 +12}
- {2746620000 43200 0 +12}
- {2772626400 46800 1 +12}
- {2778069600 43200 0 +12}
- {2804076000 46800 1 +12}
- {2809519200 43200 0 +12}
- {2835525600 46800 1 +12}
- {2841573600 43200 0 +12}
- {2867580000 46800 1 +12}
- {2873023200 43200 0 +12}
- {2899029600 46800 1 +12}
- {2904472800 43200 0 +12}
- {2930479200 46800 1 +12}
- {2935922400 43200 0 +12}
- {2961928800 46800 1 +12}
- {2967372000 43200 0 +12}
- {2993378400 46800 1 +12}
- {2999426400 43200 0 +12}
- {3024828000 46800 1 +12}
- {3030876000 43200 0 +12}
- {3056882400 46800 1 +12}
- {3062325600 43200 0 +12}
- {3088332000 46800 1 +12}
- {3093775200 43200 0 +12}
- {3119781600 46800 1 +12}
- {3125224800 43200 0 +12}
- {3151231200 46800 1 +12}
- {3156674400 43200 0 +12}
- {3182680800 46800 1 +12}
- {3188728800 43200 0 +12}
- {3214130400 46800 1 +12}
- {3220178400 43200 0 +12}
- {3246184800 46800 1 +12}
- {3251628000 43200 0 +12}
- {3277634400 46800 1 +12}
- {3283077600 43200 0 +12}
- {3309084000 46800 1 +12}
- {3314527200 43200 0 +12}
- {3340533600 46800 1 +12}
- {3345976800 43200 0 +12}
- {3371983200 46800 1 +12}
- {3378031200 43200 0 +12}
- {3404037600 46800 1 +12}
- {3409480800 43200 0 +12}
- {3435487200 46800 1 +12}
- {3440930400 43200 0 +12}
- {3466936800 46800 1 +12}
- {3472380000 43200 0 +12}
- {3498386400 46800 1 +12}
- {3503829600 43200 0 +12}
- {3529836000 46800 1 +12}
- {3535884000 43200 0 +12}
- {3561285600 46800 1 +12}
- {3567333600 43200 0 +12}
- {3593340000 46800 1 +12}
- {3598783200 43200 0 +12}
- {3624789600 46800 1 +12}
- {3630232800 43200 0 +12}
- {3656239200 46800 1 +12}
- {3661682400 43200 0 +12}
- {3687688800 46800 1 +12}
- {3693132000 43200 0 +12}
- {3719138400 46800 1 +12}
- {3725186400 43200 0 +12}
- {3751192800 46800 1 +12}
- {3756636000 43200 0 +12}
- {3782642400 46800 1 +12}
- {3788085600 43200 0 +12}
- {3814092000 46800 1 +12}
- {3819535200 43200 0 +12}
- {3845541600 46800 1 +12}
- {3850984800 43200 0 +12}
- {3876991200 46800 1 +12}
- {3883039200 43200 0 +12}
- {3908440800 46800 1 +12}
- {3914488800 43200 0 +12}
- {3940495200 46800 1 +12}
- {3945938400 43200 0 +12}
- {3971944800 46800 1 +12}
- {3977388000 43200 0 +12}
- {4003394400 46800 1 +12}
- {4008837600 43200 0 +12}
- {4034844000 46800 1 +12}
- {4040287200 43200 0 +12}
- {4066293600 46800 1 +12}
- {4072341600 43200 0 +12}
- {4097743200 46800 1 +12}
+ {-1709985344 43200 0 +1200}
+ {909842400 46800 1 +1300}
+ {920124000 43200 0 +1200}
+ {941896800 46800 1 +1300}
+ {951573600 43200 0 +1200}
+ {1259416800 46800 1 +1300}
+ {1269698400 43200 0 +1200}
+ {1287842400 46800 1 +1300}
+ {1299333600 43200 0 +1200}
+ {1319292000 46800 1 +1300}
+ {1327154400 43200 0 +1200}
+ {1350741600 46800 1 +1300}
+ {1358604000 43200 0 +1200}
+ {1382796000 46800 1 +1300}
+ {1390050000 43200 0 +1200}
+ {1414850400 46800 1 +1300}
+ {1421503200 43200 0 +1200}
+ {1446300000 46800 1 +1300}
+ {1452952800 43200 0 +1200}
+ {1478354400 46800 1 +1300}
+ {1484402400 43200 0 +1200}
+ {1509804000 46800 1 +1300}
+ {1515852000 43200 0 +1200}
+ {1541253600 46800 1 +1300}
+ {1547301600 43200 0 +1200}
+ {1573308000 46800 1 +1300}
+ {1578751200 43200 0 +1200}
+ {1608386400 46800 1 +1300}
+ {1610805600 43200 0 +1200}
}
diff --git a/library/tzdata/Pacific/Galapagos b/library/tzdata/Pacific/Galapagos
index 180ce6a..5b828a4 100644
--- a/library/tzdata/Pacific/Galapagos
+++ b/library/tzdata/Pacific/Galapagos
@@ -2,8 +2,8 @@
set TZData(:Pacific/Galapagos) {
{-9223372036854775808 -21504 0 LMT}
- {-1230746496 -18000 0 -05}
- {504939600 -21600 0 -06}
- {722930400 -18000 1 -06}
- {728888400 -21600 0 -06}
+ {-1230746496 -18000 0 -0500}
+ {504939600 -21600 0 -0600}
+ {722930400 -18000 1 -0500}
+ {728888400 -21600 0 -0600}
}
diff --git a/library/tzdata/Pacific/Gambier b/library/tzdata/Pacific/Gambier
index 9ebd97c..5a0044a 100644
--- a/library/tzdata/Pacific/Gambier
+++ b/library/tzdata/Pacific/Gambier
@@ -2,5 +2,5 @@
set TZData(:Pacific/Gambier) {
{-9223372036854775808 -32388 0 LMT}
- {-1806678012 -32400 0 -09}
+ {-1806678012 -32400 0 -0900}
}
diff --git a/library/tzdata/Pacific/Guadalcanal b/library/tzdata/Pacific/Guadalcanal
index 7e13e6e..1db653b 100644
--- a/library/tzdata/Pacific/Guadalcanal
+++ b/library/tzdata/Pacific/Guadalcanal
@@ -2,5 +2,5 @@
set TZData(:Pacific/Guadalcanal) {
{-9223372036854775808 38388 0 LMT}
- {-1806748788 39600 0 +11}
+ {-1806748788 39600 0 +1100}
}
diff --git a/library/tzdata/Pacific/Guam b/library/tzdata/Pacific/Guam
index 612aef3..d5ee37a 100644
--- a/library/tzdata/Pacific/Guam
+++ b/library/tzdata/Pacific/Guam
@@ -4,7 +4,7 @@ set TZData(:Pacific/Guam) {
{-9223372036854775808 -51660 0 LMT}
{-3944626740 34740 0 LMT}
{-2177487540 36000 0 GST}
- {-885549600 32400 0 +09}
+ {-885549600 32400 0 +0900}
{-802256400 36000 0 GST}
{-331891200 39600 1 GDT}
{-281610000 36000 0 GST}
diff --git a/library/tzdata/Pacific/Kanton b/library/tzdata/Pacific/Kanton
index 061c2b5..b9455b4 100644
--- a/library/tzdata/Pacific/Kanton
+++ b/library/tzdata/Pacific/Kanton
@@ -2,7 +2,7 @@
set TZData(:Pacific/Kanton) {
{-9223372036854775808 0 0 -00}
- {-1020470400 -43200 0 -12}
- {307627200 -39600 0 -11}
- {788871600 46800 0 +13}
+ {-1020470400 -43200 0 -1200}
+ {307627200 -39600 0 -1100}
+ {788871600 46800 0 +1300}
}
diff --git a/library/tzdata/Pacific/Kiritimati b/library/tzdata/Pacific/Kiritimati
index 7d600f3..54135e2 100644
--- a/library/tzdata/Pacific/Kiritimati
+++ b/library/tzdata/Pacific/Kiritimati
@@ -2,7 +2,7 @@
set TZData(:Pacific/Kiritimati) {
{-9223372036854775808 -37760 0 LMT}
- {-2177415040 -38400 0 -1040}
- {307622400 -36000 0 -10}
- {788868000 50400 0 +14}
+ {-2177415040 -38400 0 -1140}
+ {307622400 -36000 0 -1000}
+ {788868000 50400 0 +1400}
}
diff --git a/library/tzdata/Pacific/Kosrae b/library/tzdata/Pacific/Kosrae
index 87b33e5..1d6956e 100644
--- a/library/tzdata/Pacific/Kosrae
+++ b/library/tzdata/Pacific/Kosrae
@@ -3,12 +3,12 @@
set TZData(:Pacific/Kosrae) {
{-9223372036854775808 -47284 0 LMT}
{-3944631116 39116 0 LMT}
- {-2177491916 39600 0 +11}
- {-1743678000 32400 0 +09}
- {-1606813200 39600 0 +11}
- {-1041418800 36000 0 +10}
- {-907408800 32400 0 +09}
- {-770634000 39600 0 +11}
- {-7988400 43200 0 +12}
- {915105600 39600 0 +11}
+ {-2177491916 39600 0 +1100}
+ {-1743678000 32400 0 +0900}
+ {-1606813200 39600 0 +1100}
+ {-1041418800 36000 0 +1000}
+ {-907408800 32400 0 +0900}
+ {-770634000 39600 0 +1100}
+ {-7988400 43200 0 +1200}
+ {915105600 39600 0 +1100}
}
diff --git a/library/tzdata/Pacific/Kwajalein b/library/tzdata/Pacific/Kwajalein
index bd260c7..7110a42 100644
--- a/library/tzdata/Pacific/Kwajalein
+++ b/library/tzdata/Pacific/Kwajalein
@@ -2,10 +2,10 @@
set TZData(:Pacific/Kwajalein) {
{-9223372036854775808 40160 0 LMT}
- {-2177492960 39600 0 +11}
- {-1041418800 36000 0 +10}
- {-907408800 32400 0 +09}
- {-817462800 39600 0 +11}
- {-7988400 -43200 0 -12}
- {745934400 43200 0 +12}
+ {-2177492960 39600 0 +1100}
+ {-1041418800 36000 0 +1000}
+ {-907408800 32400 0 +0900}
+ {-817462800 39600 0 +1100}
+ {-7988400 -43200 0 -1200}
+ {745934400 43200 0 +1200}
}
diff --git a/library/tzdata/Pacific/Marquesas b/library/tzdata/Pacific/Marquesas
index ac77a2f..17079ea 100644
--- a/library/tzdata/Pacific/Marquesas
+++ b/library/tzdata/Pacific/Marquesas
@@ -2,5 +2,5 @@
set TZData(:Pacific/Marquesas) {
{-9223372036854775808 -33480 0 LMT}
- {-1806676920 -34200 0 -0930}
+ {-1806676920 -34200 0 -1030}
}
diff --git a/library/tzdata/Pacific/Nauru b/library/tzdata/Pacific/Nauru
index fe35411..cba0368 100644
--- a/library/tzdata/Pacific/Nauru
+++ b/library/tzdata/Pacific/Nauru
@@ -3,7 +3,7 @@
set TZData(:Pacific/Nauru) {
{-9223372036854775808 40060 0 LMT}
{-1545131260 41400 0 +1130}
- {-862918200 32400 0 +09}
+ {-862918200 32400 0 +0900}
{-767350800 41400 0 +1130}
- {287418600 43200 0 +12}
+ {287418600 43200 0 +1200}
}
diff --git a/library/tzdata/Pacific/Niue b/library/tzdata/Pacific/Niue
index 752f5b7..45fc65f 100644
--- a/library/tzdata/Pacific/Niue
+++ b/library/tzdata/Pacific/Niue
@@ -2,6 +2,6 @@
set TZData(:Pacific/Niue) {
{-9223372036854775808 -40780 0 LMT}
- {-543069620 -40800 0 -1120}
- {-173623200 -39600 0 -11}
+ {-543069620 -40800 0 -1220}
+ {-173623200 -39600 0 -1100}
}
diff --git a/library/tzdata/Pacific/Norfolk b/library/tzdata/Pacific/Norfolk
index f686df5..75155db 100644
--- a/library/tzdata/Pacific/Norfolk
+++ b/library/tzdata/Pacific/Norfolk
@@ -6,167 +6,167 @@ set TZData(:Pacific/Norfolk) {
{-599656320 41400 0 +1130}
{152029800 45000 1 +1230}
{162916200 41400 0 +1130}
- {1443882600 39600 0 +11}
- {1561899600 39600 0 +12}
- {1570287600 43200 1 +12}
- {1586012400 39600 0 +12}
- {1601737200 43200 1 +12}
- {1617462000 39600 0 +12}
- {1633186800 43200 1 +12}
- {1648911600 39600 0 +12}
- {1664636400 43200 1 +12}
- {1680361200 39600 0 +12}
- {1696086000 43200 1 +12}
- {1712415600 39600 0 +12}
- {1728140400 43200 1 +12}
- {1743865200 39600 0 +12}
- {1759590000 43200 1 +12}
- {1775314800 39600 0 +12}
- {1791039600 43200 1 +12}
- {1806764400 39600 0 +12}
- {1822489200 43200 1 +12}
- {1838214000 39600 0 +12}
- {1853938800 43200 1 +12}
- {1869663600 39600 0 +12}
- {1885993200 43200 1 +12}
- {1901718000 39600 0 +12}
- {1917442800 43200 1 +12}
- {1933167600 39600 0 +12}
- {1948892400 43200 1 +12}
- {1964617200 39600 0 +12}
- {1980342000 43200 1 +12}
- {1996066800 39600 0 +12}
- {2011791600 43200 1 +12}
- {2027516400 39600 0 +12}
- {2043241200 43200 1 +12}
- {2058966000 39600 0 +12}
- {2075295600 43200 1 +12}
- {2091020400 39600 0 +12}
- {2106745200 43200 1 +12}
- {2122470000 39600 0 +12}
- {2138194800 43200 1 +12}
- {2153919600 39600 0 +12}
- {2169644400 43200 1 +12}
- {2185369200 39600 0 +12}
- {2201094000 43200 1 +12}
- {2216818800 39600 0 +12}
- {2233148400 43200 1 +12}
- {2248873200 39600 0 +12}
- {2264598000 43200 1 +12}
- {2280322800 39600 0 +12}
- {2296047600 43200 1 +12}
- {2311772400 39600 0 +12}
- {2327497200 43200 1 +12}
- {2343222000 39600 0 +12}
- {2358946800 43200 1 +12}
- {2374671600 39600 0 +12}
- {2390396400 43200 1 +12}
- {2406121200 39600 0 +12}
- {2422450800 43200 1 +12}
- {2438175600 39600 0 +12}
- {2453900400 43200 1 +12}
- {2469625200 39600 0 +12}
- {2485350000 43200 1 +12}
- {2501074800 39600 0 +12}
- {2516799600 43200 1 +12}
- {2532524400 39600 0 +12}
- {2548249200 43200 1 +12}
- {2563974000 39600 0 +12}
- {2579698800 43200 1 +12}
- {2596028400 39600 0 +12}
- {2611753200 43200 1 +12}
- {2627478000 39600 0 +12}
- {2643202800 43200 1 +12}
- {2658927600 39600 0 +12}
- {2674652400 43200 1 +12}
- {2690377200 39600 0 +12}
- {2706102000 43200 1 +12}
- {2721826800 39600 0 +12}
- {2737551600 43200 1 +12}
- {2753276400 39600 0 +12}
- {2769606000 43200 1 +12}
- {2785330800 39600 0 +12}
- {2801055600 43200 1 +12}
- {2816780400 39600 0 +12}
- {2832505200 43200 1 +12}
- {2848230000 39600 0 +12}
- {2863954800 43200 1 +12}
- {2879679600 39600 0 +12}
- {2895404400 43200 1 +12}
- {2911129200 39600 0 +12}
- {2926854000 43200 1 +12}
- {2942578800 39600 0 +12}
- {2958908400 43200 1 +12}
- {2974633200 39600 0 +12}
- {2990358000 43200 1 +12}
- {3006082800 39600 0 +12}
- {3021807600 43200 1 +12}
- {3037532400 39600 0 +12}
- {3053257200 43200 1 +12}
- {3068982000 39600 0 +12}
- {3084706800 43200 1 +12}
- {3100431600 39600 0 +12}
- {3116761200 43200 1 +12}
- {3132486000 39600 0 +12}
- {3148210800 43200 1 +12}
- {3163935600 39600 0 +12}
- {3179660400 43200 1 +12}
- {3195385200 39600 0 +12}
- {3211110000 43200 1 +12}
- {3226834800 39600 0 +12}
- {3242559600 43200 1 +12}
- {3258284400 39600 0 +12}
- {3274009200 43200 1 +12}
- {3289734000 39600 0 +12}
- {3306063600 43200 1 +12}
- {3321788400 39600 0 +12}
- {3337513200 43200 1 +12}
- {3353238000 39600 0 +12}
- {3368962800 43200 1 +12}
- {3384687600 39600 0 +12}
- {3400412400 43200 1 +12}
- {3416137200 39600 0 +12}
- {3431862000 43200 1 +12}
- {3447586800 39600 0 +12}
- {3463311600 43200 1 +12}
- {3479641200 39600 0 +12}
- {3495366000 43200 1 +12}
- {3511090800 39600 0 +12}
- {3526815600 43200 1 +12}
- {3542540400 39600 0 +12}
- {3558265200 43200 1 +12}
- {3573990000 39600 0 +12}
- {3589714800 43200 1 +12}
- {3605439600 39600 0 +12}
- {3621164400 43200 1 +12}
- {3636889200 39600 0 +12}
- {3653218800 43200 1 +12}
- {3668943600 39600 0 +12}
- {3684668400 43200 1 +12}
- {3700393200 39600 0 +12}
- {3716118000 43200 1 +12}
- {3731842800 39600 0 +12}
- {3747567600 43200 1 +12}
- {3763292400 39600 0 +12}
- {3779017200 43200 1 +12}
- {3794742000 39600 0 +12}
- {3810466800 43200 1 +12}
- {3826191600 39600 0 +12}
- {3842521200 43200 1 +12}
- {3858246000 39600 0 +12}
- {3873970800 43200 1 +12}
- {3889695600 39600 0 +12}
- {3905420400 43200 1 +12}
- {3921145200 39600 0 +12}
- {3936870000 43200 1 +12}
- {3952594800 39600 0 +12}
- {3968319600 43200 1 +12}
- {3984044400 39600 0 +12}
- {4000374000 43200 1 +12}
- {4016098800 39600 0 +12}
- {4031823600 43200 1 +12}
- {4047548400 39600 0 +12}
- {4063273200 43200 1 +12}
- {4078998000 39600 0 +12}
- {4094722800 43200 1 +12}
+ {1443882600 39600 0 +1100}
+ {1561899600 39600 0 +1100}
+ {1570287600 43200 1 +1200}
+ {1586012400 39600 0 +1100}
+ {1601737200 43200 1 +1200}
+ {1617462000 39600 0 +1100}
+ {1633186800 43200 1 +1200}
+ {1648911600 39600 0 +1100}
+ {1664636400 43200 1 +1200}
+ {1680361200 39600 0 +1100}
+ {1696086000 43200 1 +1200}
+ {1712415600 39600 0 +1100}
+ {1728140400 43200 1 +1200}
+ {1743865200 39600 0 +1100}
+ {1759590000 43200 1 +1200}
+ {1775314800 39600 0 +1100}
+ {1791039600 43200 1 +1200}
+ {1806764400 39600 0 +1100}
+ {1822489200 43200 1 +1200}
+ {1838214000 39600 0 +1100}
+ {1853938800 43200 1 +1200}
+ {1869663600 39600 0 +1100}
+ {1885993200 43200 1 +1200}
+ {1901718000 39600 0 +1100}
+ {1917442800 43200 1 +1200}
+ {1933167600 39600 0 +1100}
+ {1948892400 43200 1 +1200}
+ {1964617200 39600 0 +1100}
+ {1980342000 43200 1 +1200}
+ {1996066800 39600 0 +1100}
+ {2011791600 43200 1 +1200}
+ {2027516400 39600 0 +1100}
+ {2043241200 43200 1 +1200}
+ {2058966000 39600 0 +1100}
+ {2075295600 43200 1 +1200}
+ {2091020400 39600 0 +1100}
+ {2106745200 43200 1 +1200}
+ {2122470000 39600 0 +1100}
+ {2138194800 43200 1 +1200}
+ {2153919600 39600 0 +1100}
+ {2169644400 43200 1 +1200}
+ {2185369200 39600 0 +1100}
+ {2201094000 43200 1 +1200}
+ {2216818800 39600 0 +1100}
+ {2233148400 43200 1 +1200}
+ {2248873200 39600 0 +1100}
+ {2264598000 43200 1 +1200}
+ {2280322800 39600 0 +1100}
+ {2296047600 43200 1 +1200}
+ {2311772400 39600 0 +1100}
+ {2327497200 43200 1 +1200}
+ {2343222000 39600 0 +1100}
+ {2358946800 43200 1 +1200}
+ {2374671600 39600 0 +1100}
+ {2390396400 43200 1 +1200}
+ {2406121200 39600 0 +1100}
+ {2422450800 43200 1 +1200}
+ {2438175600 39600 0 +1100}
+ {2453900400 43200 1 +1200}
+ {2469625200 39600 0 +1100}
+ {2485350000 43200 1 +1200}
+ {2501074800 39600 0 +1100}
+ {2516799600 43200 1 +1200}
+ {2532524400 39600 0 +1100}
+ {2548249200 43200 1 +1200}
+ {2563974000 39600 0 +1100}
+ {2579698800 43200 1 +1200}
+ {2596028400 39600 0 +1100}
+ {2611753200 43200 1 +1200}
+ {2627478000 39600 0 +1100}
+ {2643202800 43200 1 +1200}
+ {2658927600 39600 0 +1100}
+ {2674652400 43200 1 +1200}
+ {2690377200 39600 0 +1100}
+ {2706102000 43200 1 +1200}
+ {2721826800 39600 0 +1100}
+ {2737551600 43200 1 +1200}
+ {2753276400 39600 0 +1100}
+ {2769606000 43200 1 +1200}
+ {2785330800 39600 0 +1100}
+ {2801055600 43200 1 +1200}
+ {2816780400 39600 0 +1100}
+ {2832505200 43200 1 +1200}
+ {2848230000 39600 0 +1100}
+ {2863954800 43200 1 +1200}
+ {2879679600 39600 0 +1100}
+ {2895404400 43200 1 +1200}
+ {2911129200 39600 0 +1100}
+ {2926854000 43200 1 +1200}
+ {2942578800 39600 0 +1100}
+ {2958908400 43200 1 +1200}
+ {2974633200 39600 0 +1100}
+ {2990358000 43200 1 +1200}
+ {3006082800 39600 0 +1100}
+ {3021807600 43200 1 +1200}
+ {3037532400 39600 0 +1100}
+ {3053257200 43200 1 +1200}
+ {3068982000 39600 0 +1100}
+ {3084706800 43200 1 +1200}
+ {3100431600 39600 0 +1100}
+ {3116761200 43200 1 +1200}
+ {3132486000 39600 0 +1100}
+ {3148210800 43200 1 +1200}
+ {3163935600 39600 0 +1100}
+ {3179660400 43200 1 +1200}
+ {3195385200 39600 0 +1100}
+ {3211110000 43200 1 +1200}
+ {3226834800 39600 0 +1100}
+ {3242559600 43200 1 +1200}
+ {3258284400 39600 0 +1100}
+ {3274009200 43200 1 +1200}
+ {3289734000 39600 0 +1100}
+ {3306063600 43200 1 +1200}
+ {3321788400 39600 0 +1100}
+ {3337513200 43200 1 +1200}
+ {3353238000 39600 0 +1100}
+ {3368962800 43200 1 +1200}
+ {3384687600 39600 0 +1100}
+ {3400412400 43200 1 +1200}
+ {3416137200 39600 0 +1100}
+ {3431862000 43200 1 +1200}
+ {3447586800 39600 0 +1100}
+ {3463311600 43200 1 +1200}
+ {3479641200 39600 0 +1100}
+ {3495366000 43200 1 +1200}
+ {3511090800 39600 0 +1100}
+ {3526815600 43200 1 +1200}
+ {3542540400 39600 0 +1100}
+ {3558265200 43200 1 +1200}
+ {3573990000 39600 0 +1100}
+ {3589714800 43200 1 +1200}
+ {3605439600 39600 0 +1100}
+ {3621164400 43200 1 +1200}
+ {3636889200 39600 0 +1100}
+ {3653218800 43200 1 +1200}
+ {3668943600 39600 0 +1100}
+ {3684668400 43200 1 +1200}
+ {3700393200 39600 0 +1100}
+ {3716118000 43200 1 +1200}
+ {3731842800 39600 0 +1100}
+ {3747567600 43200 1 +1200}
+ {3763292400 39600 0 +1100}
+ {3779017200 43200 1 +1200}
+ {3794742000 39600 0 +1100}
+ {3810466800 43200 1 +1200}
+ {3826191600 39600 0 +1100}
+ {3842521200 43200 1 +1200}
+ {3858246000 39600 0 +1100}
+ {3873970800 43200 1 +1200}
+ {3889695600 39600 0 +1100}
+ {3905420400 43200 1 +1200}
+ {3921145200 39600 0 +1100}
+ {3936870000 43200 1 +1200}
+ {3952594800 39600 0 +1100}
+ {3968319600 43200 1 +1200}
+ {3984044400 39600 0 +1100}
+ {4000374000 43200 1 +1200}
+ {4016098800 39600 0 +1100}
+ {4031823600 43200 1 +1200}
+ {4047548400 39600 0 +1100}
+ {4063273200 43200 1 +1200}
+ {4078998000 39600 0 +1100}
+ {4094722800 43200 1 +1200}
}
diff --git a/library/tzdata/Pacific/Noumea b/library/tzdata/Pacific/Noumea
index c9da825..b916e68 100644
--- a/library/tzdata/Pacific/Noumea
+++ b/library/tzdata/Pacific/Noumea
@@ -2,11 +2,11 @@
set TZData(:Pacific/Noumea) {
{-9223372036854775808 39948 0 LMT}
- {-1829387148 39600 0 +11}
- {250002000 43200 1 +11}
- {257342400 39600 0 +11}
- {281451600 43200 1 +11}
- {288878400 39600 0 +11}
- {849366000 43200 1 +11}
- {857228400 39600 0 +11}
+ {-1829387148 39600 0 +1100}
+ {250002000 43200 1 +1200}
+ {257342400 39600 0 +1100}
+ {281451600 43200 1 +1200}
+ {288878400 39600 0 +1100}
+ {849366000 43200 1 +1200}
+ {857228400 39600 0 +1100}
}
diff --git a/library/tzdata/Pacific/Palau b/library/tzdata/Pacific/Palau
index b161f4f..cf8ed46 100644
--- a/library/tzdata/Pacific/Palau
+++ b/library/tzdata/Pacific/Palau
@@ -3,5 +3,5 @@
set TZData(:Pacific/Palau) {
{-9223372036854775808 -54124 0 LMT}
{-3944624276 32276 0 LMT}
- {-2177485076 32400 0 +09}
+ {-2177485076 32400 0 +0900}
}
diff --git a/library/tzdata/Pacific/Pitcairn b/library/tzdata/Pacific/Pitcairn
index 6813978..9b88cd9 100644
--- a/library/tzdata/Pacific/Pitcairn
+++ b/library/tzdata/Pacific/Pitcairn
@@ -2,6 +2,6 @@
set TZData(:Pacific/Pitcairn) {
{-9223372036854775808 -31220 0 LMT}
- {-2177421580 -30600 0 -0830}
- {893665800 -28800 0 -08}
+ {-2177421580 -30600 0 -0930}
+ {893665800 -28800 0 -0800}
}
diff --git a/library/tzdata/Pacific/Port_Moresby b/library/tzdata/Pacific/Port_Moresby
index c3a5e4f..1a21dff 100644
--- a/library/tzdata/Pacific/Port_Moresby
+++ b/library/tzdata/Pacific/Port_Moresby
@@ -3,5 +3,5 @@
set TZData(:Pacific/Port_Moresby) {
{-9223372036854775808 35320 0 LMT}
{-2840176120 35312 0 PMMT}
- {-2366790512 36000 0 +10}
+ {-2366790512 36000 0 +1000}
}
diff --git a/library/tzdata/Pacific/Rarotonga b/library/tzdata/Pacific/Rarotonga
index f8e7954..94322a0 100644
--- a/library/tzdata/Pacific/Rarotonga
+++ b/library/tzdata/Pacific/Rarotonga
@@ -3,31 +3,31 @@
set TZData(:Pacific/Rarotonga) {
{-9223372036854775808 48056 0 LMT}
{-2209555256 -38344 0 LMT}
- {-543072056 -37800 0 -1030}
- {279714600 -34200 0 -10}
- {289387800 -36000 0 -10}
- {309952800 -34200 1 -10}
- {320837400 -36000 0 -10}
- {341402400 -34200 1 -10}
- {352287000 -36000 0 -10}
- {372852000 -34200 1 -10}
- {384341400 -36000 0 -10}
- {404906400 -34200 1 -10}
- {415791000 -36000 0 -10}
- {436356000 -34200 1 -10}
- {447240600 -36000 0 -10}
- {467805600 -34200 1 -10}
- {478690200 -36000 0 -10}
- {499255200 -34200 1 -10}
- {510139800 -36000 0 -10}
- {530704800 -34200 1 -10}
- {541589400 -36000 0 -10}
- {562154400 -34200 1 -10}
- {573643800 -36000 0 -10}
- {594208800 -34200 1 -10}
- {605093400 -36000 0 -10}
- {625658400 -34200 1 -10}
- {636543000 -36000 0 -10}
- {657108000 -34200 1 -10}
- {667992600 -36000 0 -10}
+ {-543072056 -37800 0 -1130}
+ {279714600 -34200 0 -1030}
+ {289387800 -36000 0 -1000}
+ {309952800 -34200 1 -1030}
+ {320837400 -36000 0 -1000}
+ {341402400 -34200 1 -1030}
+ {352287000 -36000 0 -1000}
+ {372852000 -34200 1 -1030}
+ {384341400 -36000 0 -1000}
+ {404906400 -34200 1 -1030}
+ {415791000 -36000 0 -1000}
+ {436356000 -34200 1 -1030}
+ {447240600 -36000 0 -1000}
+ {467805600 -34200 1 -1030}
+ {478690200 -36000 0 -1000}
+ {499255200 -34200 1 -1030}
+ {510139800 -36000 0 -1000}
+ {530704800 -34200 1 -1030}
+ {541589400 -36000 0 -1000}
+ {562154400 -34200 1 -1030}
+ {573643800 -36000 0 -1000}
+ {594208800 -34200 1 -1030}
+ {605093400 -36000 0 -1000}
+ {625658400 -34200 1 -1030}
+ {636543000 -36000 0 -1000}
+ {657108000 -34200 1 -1030}
+ {667992600 -36000 0 -1000}
}
diff --git a/library/tzdata/Pacific/Tahiti b/library/tzdata/Pacific/Tahiti
index 768553c..dfb4833 100644
--- a/library/tzdata/Pacific/Tahiti
+++ b/library/tzdata/Pacific/Tahiti
@@ -2,5 +2,5 @@
set TZData(:Pacific/Tahiti) {
{-9223372036854775808 -35896 0 LMT}
- {-1806674504 -36000 0 -10}
+ {-1806674504 -36000 0 -1000}
}
diff --git a/library/tzdata/Pacific/Tarawa b/library/tzdata/Pacific/Tarawa
index 2b9b556..4b421c7 100644
--- a/library/tzdata/Pacific/Tarawa
+++ b/library/tzdata/Pacific/Tarawa
@@ -2,5 +2,5 @@
set TZData(:Pacific/Tarawa) {
{-9223372036854775808 41524 0 LMT}
- {-2177494324 43200 0 +12}
+ {-2177494324 43200 0 +1200}
}
diff --git a/library/tzdata/Pacific/Tongatapu b/library/tzdata/Pacific/Tongatapu
index f4bb685..1d31851 100644
--- a/library/tzdata/Pacific/Tongatapu
+++ b/library/tzdata/Pacific/Tongatapu
@@ -3,14 +3,14 @@
set TZData(:Pacific/Tongatapu) {
{-9223372036854775808 44352 0 LMT}
{-767189952 44400 0 +1220}
- {-284041200 46800 0 +13}
- {915102000 46800 0 +13}
- {939214800 50400 1 +13}
- {953384400 46800 0 +13}
- {973342800 50400 1 +13}
- {980596800 46800 0 +13}
- {1004792400 50400 1 +13}
- {1012046400 46800 0 +13}
- {1478350800 50400 1 +13}
- {1484398800 46800 0 +13}
+ {-284041200 46800 0 +1300}
+ {915102000 46800 0 +1300}
+ {939214800 50400 1 +1400}
+ {953384400 46800 0 +1300}
+ {973342800 50400 1 +1400}
+ {980596800 46800 0 +1300}
+ {1004792400 50400 1 +1400}
+ {1012046400 46800 0 +1300}
+ {1478350800 50400 1 +1400}
+ {1484398800 46800 0 +1300}
}
diff --git a/library/tzdata/SystemV/AST4 b/library/tzdata/SystemV/AST4
deleted file mode 100644
index eced0d2..0000000
--- a/library/tzdata/SystemV/AST4
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Puerto_Rico)]} {
- LoadTimeZoneFile America/Puerto_Rico
-}
-set TZData(:SystemV/AST4) $TZData(:America/Puerto_Rico)
diff --git a/library/tzdata/SystemV/AST4ADT b/library/tzdata/SystemV/AST4ADT
deleted file mode 100644
index c24308f..0000000
--- a/library/tzdata/SystemV/AST4ADT
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Halifax)]} {
- LoadTimeZoneFile America/Halifax
-}
-set TZData(:SystemV/AST4ADT) $TZData(:America/Halifax)
diff --git a/library/tzdata/SystemV/CST6 b/library/tzdata/SystemV/CST6
deleted file mode 100644
index d46c015..0000000
--- a/library/tzdata/SystemV/CST6
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Regina)]} {
- LoadTimeZoneFile America/Regina
-}
-set TZData(:SystemV/CST6) $TZData(:America/Regina)
diff --git a/library/tzdata/SystemV/CST6CDT b/library/tzdata/SystemV/CST6CDT
deleted file mode 100644
index 234af89..0000000
--- a/library/tzdata/SystemV/CST6CDT
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Chicago)]} {
- LoadTimeZoneFile America/Chicago
-}
-set TZData(:SystemV/CST6CDT) $TZData(:America/Chicago)
diff --git a/library/tzdata/SystemV/EST5 b/library/tzdata/SystemV/EST5
deleted file mode 100644
index 52818c1..0000000
--- a/library/tzdata/SystemV/EST5
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Indianapolis)]} {
- LoadTimeZoneFile America/Indianapolis
-}
-set TZData(:SystemV/EST5) $TZData(:America/Indianapolis)
diff --git a/library/tzdata/SystemV/EST5EDT b/library/tzdata/SystemV/EST5EDT
deleted file mode 100644
index 6cf2743..0000000
--- a/library/tzdata/SystemV/EST5EDT
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/New_York)]} {
- LoadTimeZoneFile America/New_York
-}
-set TZData(:SystemV/EST5EDT) $TZData(:America/New_York)
diff --git a/library/tzdata/SystemV/HST10 b/library/tzdata/SystemV/HST10
deleted file mode 100644
index a4316af..0000000
--- a/library/tzdata/SystemV/HST10
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(Pacific/Honolulu)]} {
- LoadTimeZoneFile Pacific/Honolulu
-}
-set TZData(:SystemV/HST10) $TZData(:Pacific/Honolulu)
diff --git a/library/tzdata/SystemV/MST7 b/library/tzdata/SystemV/MST7
deleted file mode 100644
index e67a781..0000000
--- a/library/tzdata/SystemV/MST7
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Phoenix)]} {
- LoadTimeZoneFile America/Phoenix
-}
-set TZData(:SystemV/MST7) $TZData(:America/Phoenix)
diff --git a/library/tzdata/SystemV/MST7MDT b/library/tzdata/SystemV/MST7MDT
deleted file mode 100644
index fda5bf1..0000000
--- a/library/tzdata/SystemV/MST7MDT
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Denver)]} {
- LoadTimeZoneFile America/Denver
-}
-set TZData(:SystemV/MST7MDT) $TZData(:America/Denver)
diff --git a/library/tzdata/SystemV/PST8 b/library/tzdata/SystemV/PST8
deleted file mode 100644
index 8e30bb8..0000000
--- a/library/tzdata/SystemV/PST8
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(Pacific/Pitcairn)]} {
- LoadTimeZoneFile Pacific/Pitcairn
-}
-set TZData(:SystemV/PST8) $TZData(:Pacific/Pitcairn)
diff --git a/library/tzdata/SystemV/PST8PDT b/library/tzdata/SystemV/PST8PDT
deleted file mode 100644
index 8281a9a..0000000
--- a/library/tzdata/SystemV/PST8PDT
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Los_Angeles)]} {
- LoadTimeZoneFile America/Los_Angeles
-}
-set TZData(:SystemV/PST8PDT) $TZData(:America/Los_Angeles)
diff --git a/library/tzdata/SystemV/YST9 b/library/tzdata/SystemV/YST9
deleted file mode 100644
index 32d3717..0000000
--- a/library/tzdata/SystemV/YST9
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(Pacific/Gambier)]} {
- LoadTimeZoneFile Pacific/Gambier
-}
-set TZData(:SystemV/YST9) $TZData(:Pacific/Gambier)
diff --git a/library/tzdata/SystemV/YST9YDT b/library/tzdata/SystemV/YST9YDT
deleted file mode 100644
index fba405f..0000000
--- a/library/tzdata/SystemV/YST9YDT
+++ /dev/null
@@ -1,5 +0,0 @@
-# created by ../tools/tclZIC.tcl - do not edit
-if {![info exists TZData(America/Anchorage)]} {
- LoadTimeZoneFile America/Anchorage
-}
-set TZData(:SystemV/YST9YDT) $TZData(:America/Anchorage)
diff --git a/library/tzdata/WET b/library/tzdata/WET
index 60366a3..48b99b8 100644
--- a/library/tzdata/WET
+++ b/library/tzdata/WET
@@ -1,251 +1,5 @@
# created by tools/tclZIC.tcl - do not edit
-
-set TZData(:WET) {
- {-9223372036854775808 0 0 WET}
- {228877200 3600 1 WEST}
- {243997200 0 0 WET}
- {260326800 3600 1 WEST}
- {276051600 0 0 WET}
- {291776400 3600 1 WEST}
- {307501200 0 0 WET}
- {323830800 3600 1 WEST}
- {338950800 0 0 WET}
- {354675600 3600 1 WEST}
- {370400400 0 0 WET}
- {386125200 3600 1 WEST}
- {401850000 0 0 WET}
- {417574800 3600 1 WEST}
- {433299600 0 0 WET}
- {449024400 3600 1 WEST}
- {465354000 0 0 WET}
- {481078800 3600 1 WEST}
- {496803600 0 0 WET}
- {512528400 3600 1 WEST}
- {528253200 0 0 WET}
- {543978000 3600 1 WEST}
- {559702800 0 0 WET}
- {575427600 3600 1 WEST}
- {591152400 0 0 WET}
- {606877200 3600 1 WEST}
- {622602000 0 0 WET}
- {638326800 3600 1 WEST}
- {654656400 0 0 WET}
- {670381200 3600 1 WEST}
- {686106000 0 0 WET}
- {701830800 3600 1 WEST}
- {717555600 0 0 WET}
- {733280400 3600 1 WEST}
- {749005200 0 0 WET}
- {764730000 3600 1 WEST}
- {780454800 0 0 WET}
- {796179600 3600 1 WEST}
- {811904400 0 0 WET}
- {828234000 3600 1 WEST}
- {846378000 0 0 WET}
- {859683600 3600 1 WEST}
- {877827600 0 0 WET}
- {891133200 3600 1 WEST}
- {909277200 0 0 WET}
- {922582800 3600 1 WEST}
- {941331600 0 0 WET}
- {954032400 3600 1 WEST}
- {972781200 0 0 WET}
- {985482000 3600 1 WEST}
- {1004230800 0 0 WET}
- {1017536400 3600 1 WEST}
- {1035680400 0 0 WET}
- {1048986000 3600 1 WEST}
- {1067130000 0 0 WET}
- {1080435600 3600 1 WEST}
- {1099184400 0 0 WET}
- {1111885200 3600 1 WEST}
- {1130634000 0 0 WET}
- {1143334800 3600 1 WEST}
- {1162083600 0 0 WET}
- {1174784400 3600 1 WEST}
- {1193533200 0 0 WET}
- {1206838800 3600 1 WEST}
- {1224982800 0 0 WET}
- {1238288400 3600 1 WEST}
- {1256432400 0 0 WET}
- {1269738000 3600 1 WEST}
- {1288486800 0 0 WET}
- {1301187600 3600 1 WEST}
- {1319936400 0 0 WET}
- {1332637200 3600 1 WEST}
- {1351386000 0 0 WET}
- {1364691600 3600 1 WEST}
- {1382835600 0 0 WET}
- {1396141200 3600 1 WEST}
- {1414285200 0 0 WET}
- {1427590800 3600 1 WEST}
- {1445734800 0 0 WET}
- {1459040400 3600 1 WEST}
- {1477789200 0 0 WET}
- {1490490000 3600 1 WEST}
- {1509238800 0 0 WET}
- {1521939600 3600 1 WEST}
- {1540688400 0 0 WET}
- {1553994000 3600 1 WEST}
- {1572138000 0 0 WET}
- {1585443600 3600 1 WEST}
- {1603587600 0 0 WET}
- {1616893200 3600 1 WEST}
- {1635642000 0 0 WET}
- {1648342800 3600 1 WEST}
- {1667091600 0 0 WET}
- {1679792400 3600 1 WEST}
- {1698541200 0 0 WET}
- {1711846800 3600 1 WEST}
- {1729990800 0 0 WET}
- {1743296400 3600 1 WEST}
- {1761440400 0 0 WET}
- {1774746000 3600 1 WEST}
- {1792890000 0 0 WET}
- {1806195600 3600 1 WEST}
- {1824944400 0 0 WET}
- {1837645200 3600 1 WEST}
- {1856394000 0 0 WET}
- {1869094800 3600 1 WEST}
- {1887843600 0 0 WET}
- {1901149200 3600 1 WEST}
- {1919293200 0 0 WET}
- {1932598800 3600 1 WEST}
- {1950742800 0 0 WET}
- {1964048400 3600 1 WEST}
- {1982797200 0 0 WET}
- {1995498000 3600 1 WEST}
- {2014246800 0 0 WET}
- {2026947600 3600 1 WEST}
- {2045696400 0 0 WET}
- {2058397200 3600 1 WEST}
- {2077146000 0 0 WET}
- {2090451600 3600 1 WEST}
- {2108595600 0 0 WET}
- {2121901200 3600 1 WEST}
- {2140045200 0 0 WET}
- {2153350800 3600 1 WEST}
- {2172099600 0 0 WET}
- {2184800400 3600 1 WEST}
- {2203549200 0 0 WET}
- {2216250000 3600 1 WEST}
- {2234998800 0 0 WET}
- {2248304400 3600 1 WEST}
- {2266448400 0 0 WET}
- {2279754000 3600 1 WEST}
- {2297898000 0 0 WET}
- {2311203600 3600 1 WEST}
- {2329347600 0 0 WET}
- {2342653200 3600 1 WEST}
- {2361402000 0 0 WET}
- {2374102800 3600 1 WEST}
- {2392851600 0 0 WET}
- {2405552400 3600 1 WEST}
- {2424301200 0 0 WET}
- {2437606800 3600 1 WEST}
- {2455750800 0 0 WET}
- {2469056400 3600 1 WEST}
- {2487200400 0 0 WET}
- {2500506000 3600 1 WEST}
- {2519254800 0 0 WET}
- {2531955600 3600 1 WEST}
- {2550704400 0 0 WET}
- {2563405200 3600 1 WEST}
- {2582154000 0 0 WET}
- {2595459600 3600 1 WEST}
- {2613603600 0 0 WET}
- {2626909200 3600 1 WEST}
- {2645053200 0 0 WET}
- {2658358800 3600 1 WEST}
- {2676502800 0 0 WET}
- {2689808400 3600 1 WEST}
- {2708557200 0 0 WET}
- {2721258000 3600 1 WEST}
- {2740006800 0 0 WET}
- {2752707600 3600 1 WEST}
- {2771456400 0 0 WET}
- {2784762000 3600 1 WEST}
- {2802906000 0 0 WET}
- {2816211600 3600 1 WEST}
- {2834355600 0 0 WET}
- {2847661200 3600 1 WEST}
- {2866410000 0 0 WET}
- {2879110800 3600 1 WEST}
- {2897859600 0 0 WET}
- {2910560400 3600 1 WEST}
- {2929309200 0 0 WET}
- {2942010000 3600 1 WEST}
- {2960758800 0 0 WET}
- {2974064400 3600 1 WEST}
- {2992208400 0 0 WET}
- {3005514000 3600 1 WEST}
- {3023658000 0 0 WET}
- {3036963600 3600 1 WEST}
- {3055712400 0 0 WET}
- {3068413200 3600 1 WEST}
- {3087162000 0 0 WET}
- {3099862800 3600 1 WEST}
- {3118611600 0 0 WET}
- {3131917200 3600 1 WEST}
- {3150061200 0 0 WET}
- {3163366800 3600 1 WEST}
- {3181510800 0 0 WET}
- {3194816400 3600 1 WEST}
- {3212960400 0 0 WET}
- {3226266000 3600 1 WEST}
- {3245014800 0 0 WET}
- {3257715600 3600 1 WEST}
- {3276464400 0 0 WET}
- {3289165200 3600 1 WEST}
- {3307914000 0 0 WET}
- {3321219600 3600 1 WEST}
- {3339363600 0 0 WET}
- {3352669200 3600 1 WEST}
- {3370813200 0 0 WET}
- {3384118800 3600 1 WEST}
- {3402867600 0 0 WET}
- {3415568400 3600 1 WEST}
- {3434317200 0 0 WET}
- {3447018000 3600 1 WEST}
- {3465766800 0 0 WET}
- {3479072400 3600 1 WEST}
- {3497216400 0 0 WET}
- {3510522000 3600 1 WEST}
- {3528666000 0 0 WET}
- {3541971600 3600 1 WEST}
- {3560115600 0 0 WET}
- {3573421200 3600 1 WEST}
- {3592170000 0 0 WET}
- {3604870800 3600 1 WEST}
- {3623619600 0 0 WET}
- {3636320400 3600 1 WEST}
- {3655069200 0 0 WET}
- {3668374800 3600 1 WEST}
- {3686518800 0 0 WET}
- {3699824400 3600 1 WEST}
- {3717968400 0 0 WET}
- {3731274000 3600 1 WEST}
- {3750022800 0 0 WET}
- {3762723600 3600 1 WEST}
- {3781472400 0 0 WET}
- {3794173200 3600 1 WEST}
- {3812922000 0 0 WET}
- {3825622800 3600 1 WEST}
- {3844371600 0 0 WET}
- {3857677200 3600 1 WEST}
- {3875821200 0 0 WET}
- {3889126800 3600 1 WEST}
- {3907270800 0 0 WET}
- {3920576400 3600 1 WEST}
- {3939325200 0 0 WET}
- {3952026000 3600 1 WEST}
- {3970774800 0 0 WET}
- {3983475600 3600 1 WEST}
- {4002224400 0 0 WET}
- {4015530000 3600 1 WEST}
- {4033674000 0 0 WET}
- {4046979600 3600 1 WEST}
- {4065123600 0 0 WET}
- {4078429200 3600 1 WEST}
- {4096573200 0 0 WET}
+if {![info exists TZData(Europe/Lisbon)]} {
+ LoadTimeZoneFile Europe/Lisbon
}
+set TZData(:WET) $TZData(:Europe/Lisbon)
diff --git a/library/word.tcl b/library/word.tcl
index 3e4bc3a..ca15e12 100644
--- a/library/word.tcl
+++ b/library/word.tcl
@@ -4,31 +4,21 @@
# strings. This file is primarily needed so Tk text and entry widgets behave
# properly for different platforms.
#
-# Copyright (c) 1996 by Sun Microsystems, Inc.
-# Copyright (c) 1998 by Scritpics Corporation.
+# Copyright © 1996 Sun Microsystems, Inc.
+# Copyright © 1998 Scriptics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
# The following variables are used to determine which characters are
-# interpreted as white space.
+# interpreted as word characters. See bug [f1253530cdd8]. Will
+# probably be removed in Tcl 9.
-if {$::tcl_platform(platform) eq "windows"} {
- # Windows style - any but a unicode space char
- if {![info exists ::tcl_wordchars]} {
- set ::tcl_wordchars {\S}
- }
- if {![info exists ::tcl_nonwordchars]} {
- set ::tcl_nonwordchars {\s}
- }
-} else {
- # Motif style - any unicode word char (number, letter, or underscore)
- if {![info exists ::tcl_wordchars]} {
- set ::tcl_wordchars {\w}
- }
- if {![info exists ::tcl_nonwordchars]} {
- set ::tcl_nonwordchars {\W}
- }
+if {![info exists ::tcl_wordchars]} {
+ set ::tcl_wordchars {\w}
+}
+if {![info exists ::tcl_nonwordchars]} {
+ set ::tcl_nonwordchars {\W}
}
# Arrange for caches of the real matcher REs to be kept, which enables the REs
@@ -75,6 +65,9 @@ namespace eval ::tcl {
proc tcl_wordBreakAfter {str start} {
variable ::tcl::WordBreakRE
set result {-1 -1}
+ if {$start < 0} {
+ set start 0;
+ }
regexp -indices -start $start -- $WordBreakRE(after) $str result
return [lindex $result 1]
}
@@ -93,7 +86,9 @@ proc tcl_wordBreakAfter {str start} {
proc tcl_wordBreakBefore {str start} {
variable ::tcl::WordBreakRE
set result {-1 -1}
- regexp -indices -- $WordBreakRE(before) [string range $str 0 $start] result
+ if {$start >= 0} {
+ regexp -indices -- $WordBreakRE(before) [string range $str 0 $start] result
+ }
return [lindex $result 1]
}
@@ -112,6 +107,9 @@ proc tcl_wordBreakBefore {str start} {
proc tcl_endOfWord {str start} {
variable ::tcl::WordBreakRE
set result {-1 -1}
+ if {$start < 0} {
+ set start 0
+ }
regexp -indices -start $start -- $WordBreakRE(end) $str result
return [lindex $result 1]
}
@@ -130,6 +128,9 @@ proc tcl_endOfWord {str start} {
proc tcl_startOfNextWord {str start} {
variable ::tcl::WordBreakRE
set result {-1 -1}
+ if {$start < 0} {
+ set start 0
+ }
regexp -indices -start $start -- $WordBreakRE(next) $str result
return [lindex $result 1]
}
@@ -146,7 +147,9 @@ proc tcl_startOfNextWord {str start} {
proc tcl_startOfPreviousWord {str start} {
variable ::tcl::WordBreakRE
set word {-1 -1}
- regexp -indices -- $WordBreakRE(previous) [string range $str 0 $start-1] \
- result word
+ if {$start > 0} {
+ regexp -indices -- $WordBreakRE(previous) [string range [string range $str 0 $start] 0 end-1] \
+ result word
+ }
return [lindex $word 0]
}
diff --git a/library/writefile.tcl b/library/writefile.tcl
new file mode 100644
index 0000000..fbd9138
--- /dev/null
+++ b/library/writefile.tcl
@@ -0,0 +1,37 @@
+# writeFile:
+# Write the contents of a file.
+#
+# Copyright © 2023 Donal K Fellows.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+
+proc writeFile {args} {
+ # Parse the arguments
+ switch [llength $args] {
+ 2 {
+ lassign $args filename data
+ set mode text
+ }
+ 3 {
+ lassign $args filename mode data
+ set MODES {binary text}
+ set ERR [list -level 1 -errorcode [list TCL LOOKUP MODE $mode]]
+ set mode [tcl::prefix match -message "mode" -error $ERR $MODES $mode]
+ }
+ default {
+ set COMMAND [lindex [info level 0] 0]
+ return -code error -errorcode {TCL WRONGARGS} \
+ "wrong # args: should be \"$COMMAND filename ?mode? data\""
+ }
+ }
+
+ # Write the file
+ set f [open $filename [dict get {text w binary wb} $mode]]
+ try {
+ puts -nonewline $f $data
+ } finally {
+ close $f
+ }
+}