diff --git a/configure b/configure index 92ea7d0b9c0..9e53e4ddf4a 100755 --- a/configure +++ b/configure @@ -2920,7 +2920,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -PG_PACKAGE_VERSION=14.5 +PG_PACKAGE_VERSION=14.6 diff --git a/configure.ac b/configure.ac index c716e31f080..28cff1905f3 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ dnl The PACKAGE_VERSION from upstream PostgreSQL is maintained in the dnl PG_PACKAGE_VERSION variable, when merging make sure to update this dnl variable with the merge conflict from the AC_INIT() statement. AC_INIT([Apache Cloudberry], [2.1.0-incubating], [dev@cloudberry.apache.org], [], [https://cloudberry.apache.org/]) -[PG_PACKAGE_VERSION=14.5] +[PG_PACKAGE_VERSION=14.6] AC_SUBST(PG_PACKAGE_VERSION) dnl m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index b125bcca694..94c39f44f0c 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -1080,6 +1080,8 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, { Node *parsetree = pstmt->utilityStmt; uint64 saved_queryId = pstmt->queryId; + int saved_stmt_location = pstmt->stmt_location; + int saved_stmt_len = pstmt->stmt_len; /* * Force utility statements to get queryId zero. We do this even in cases @@ -1145,6 +1147,16 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, } PG_END_TRY(); + /* + * CAUTION: do not access the *pstmt data structure again below here. + * If it was a ROLLBACK or similar, that data structure may have been + * freed. We must copy everything we still need into local variables, + * which we did above. + * + * For the same reason, we can't risk restoring pstmt->queryId to its + * former value, which'd otherwise be a good idea. + */ + INSTR_TIME_SET_CURRENT(duration); INSTR_TIME_SUBTRACT(duration, start); @@ -1170,8 +1182,8 @@ pgss_ProcessUtility(PlannedStmt *pstmt, const char *queryString, pgss_store(queryString, saved_queryId, - pstmt->stmt_location, - pstmt->stmt_len, + saved_stmt_location, + saved_stmt_len, PGSS_EXEC, INSTR_TIME_GET_MILLISEC(duration), rows, diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml index b5f91109812..1b8092af963 100644 --- a/doc/src/sgml/release-14.sgml +++ b/doc/src/sgml/release-14.sgml @@ -1,6 +1,1043 @@ + + Release 14.6 + + + Release date: + 2022-11-10 + + + + This release contains a variety of fixes from 14.5. + For information about new features in major release 14, see + . + + + + Migration to Version 14.6 + + + A dump/restore is not required for those running 14.X. + + + + However, if you are upgrading from a version earlier than 14.4, + see . + + + + + Changes + + + + + + + Avoid rare PANIC during updates occurring concurrently + with VACUUM (Tom Lane, Jeff Davis) + + + + If a concurrent VACUUM sets the all-visible flag + bit in a page that UPDATE + or DELETE is in process of modifying, the + updating command needs to clear that bit again; but some code paths + failed to do so, ending in a PANIC exit and database restart. + + + + This is known to be possible in versions 14 and 15. It may be only + latent in previous branches. + + + + + + + Fix handling of DEFAULT tokens that appear + in a multi-row VALUES clause of an + INSERT on an updatable view (Tom Lane) + + + + This oversight could lead to cache lookup failed for + type errors, or in older branches even to crashes. + + + + + + + Disallow rules named _RETURN that are + not ON SELECT (Tom Lane) + + + + This avoids confusion between a view's ON SELECT + rule and any other rules it may have. + + + + + + + Fix resource management bug in saving tuples + for AFTER triggers (Tom Lane) + + + + Given the right circumstances, this manifested as a tupdesc + reference NNNN is not owned by resource + owner error followed by a PANIC exit. + + + + + + + Avoid failure in EXPLAIN VERBOSE for a query + using SEARCH BREADTH FIRST with constant + initial values (Tom Lane) + + + + + + + Fix construction of per-partition foreign key constraints while + doing ALTER TABLE ATTACH PARTITION + (Jehan-Guillaume de Rorthais, Álvaro Herrera) + + + + Previously, incorrect or duplicate constraints could be constructed + for the newly-added partition. + + + + + + + Fix generation of constraint names for per-partition foreign key + constraints (Jehan-Guillaume de Rorthais) + + + + If the initially-given name is already in use for some constraint of + the partition, a new one is selected; but it wasn't being spelled as + intended. + + + + + + + Fix incorrect matching of index expressions and predicates when + creating a partitioned index (Richard Guo, Tom Lane) + + + + While creating a partitioned index, we try to identify any existing + indexes on the partitions that match the partitioned index, so that + we can absorb those as child indexes instead of building new ones. + Matching of expressions was not done right, so that a usable child + index might be ignored, leading to creation of a duplicative index. + + + + + + + Prevent WAL corruption after a standby promotion (Dilip Kumar, + Robert Haas) + + + + When a PostgreSQL instance performing + archive recovery (but not using standby mode) is promoted, and the + last WAL segment that it attempted to read ended in a partial + record, the instance would write an invalid WAL segment on the new + timeline. + + + + + + + Fix mis-ordering of WAL operations in fast insert path for GIN + indexes (Matthias van de Meent, Zhang Mingli) + + + + This mistake is not known to have any negative consequences within + core PostgreSQL, but it did cause issues + for some extensions. + + + + + + + Fix bugs in logical decoding when replay starts from a point + between the beginning of a transaction and the beginning of its + subtransaction (Masahiko Sawada, Kuroda Hayato) + + + + These errors could lead to assertion failures in debug builds, and + otherwise to memory leaks. + + + + + + + Prevent examining system catalogs with the wrong snapshot during + logical decoding (Masahiko Sawada) + + + + If decoding begins partway through a transaction that modifies + system catalogs, the decoder may not recognize that, causing it to + fail to treat that transaction as in-progress for catalog lookups. + + + + + + + Accept interrupts in more places during logical decoding (Amit + Kapila, Masahiko Sawada) + + + + This ameliorates problems with slow shutdown of replication workers. + + + + + + + Prevent attempts to replicate into a foreign-table partition in + replication workers (Shi Yu, Tom Lane) + + + + Although partitioned tables can have foreign tables as partitions, + replicating into such a partition isn't currently supported. + The logical replication worker process would crash if it was + attempted. Now, an error is thrown. + + + + + + + Remove pointless check on replica identity setting of partitioned + tables (Hou Zhijie) + + + + What matters is the replica identity setting of the leaf partitions, + so there's no need to throw error if it's not set on the parent. + + + + + + + Avoid crash after function syntax error in replication workers + (Maxim Orlov, Anton Melnikov, Masahiko Sawada, Tom Lane) + + + + If a syntax error occurred in a SQL-language or PL/pgSQL-language + CREATE FUNCTION or DO command + executed in a logical replication worker, the worker process would + crash with a null pointer dereference or assertion failure. + + + + + + + Fix handling of read-write expanded datums that are passed to SQL + functions (Tom Lane) + + + + If a non-inlined SQL function uses a parameter in more than one + place, and one of those functions expects to be able to modify + read-write datums in place, then later uses of the parameter would + observe the wrong value. (Within + core PostgreSQL, the expanded-datum + mechanism is only used for array and composite-type values; but + extensions might use it for other structured types.) + + + + + + + Fix type circle's equality comparator to handle NaNs + properly (Ranier Vilela) + + + + If the left-hand circle had a floating-point NaN for its radius, + it would be considered equal to a circle with the same center and + any radius. + + + + + + + In Snowball dictionaries, don't try to stem excessively-long words + (Olly Betts, Tom Lane) + + + + If the input word exceeds 1000 bytes, return it as-is after case + folding, rather than trying to run it through the Snowball code. + This restriction protects against a known + recursion-to-stack-overflow problem in the Turkish stemmer, and it + seems like good insurance against any other safety or performance + issues that may exist in the Snowball stemmers. Such a long string + is surely not a word in any human language, so it's doubtful that + the stemmer would have done anything desirable with it anyway. + + + + + + + Fix use-after-free hazard in string comparisons (Tom Lane) + + + + Improper memory management in the string comparison functions + could result in scribbling on no-longer-allocated buffers, + potentially breaking things for whatever is using that memory + now. This would only happen with fairly long strings (more than + 1kB), and only if an ICU collation is in use. + + + + + + + Add plan-time check for attempted access to a table that has no + table access method (Tom Lane) + + + + This prevents a crash in some catalog-corruption scenarios, for + example use of a view whose ON SELECT rule is + missing. + + + + + + + Prevent postmaster crash when shared-memory state is corrupted + (Tom Lane) + + + + The postmaster process is supposed to survive and initiate a + database restart if shared memory becomes corrupted, but one + bit of code was being insufficiently cautious about that. + + + + + + + Add some more defenses against recursion till stack overrun + (Richard Guo, Tom Lane) + + + + + + + Avoid misbehavior when choosing hash table size with very + small work_mem and large tuples (Zhang Mingli) + + + + + + + Avoid long-term memory leakage in the autovacuum launcher process + (Reid Thompson) + + + + The lack of field reports suggests that this problem is only latent + in pre-v15 branches; but it's not very clear why, so back-patch the + fix anyway. + + + + + + + Improve PL/pgSQL's ability to handle + parameters declared as RECORD (Tom Lane) + + + + Build a separate function cache entry for each concrete type passed + to the RECORD parameter during a session, much as we do + for polymorphic parameters. This allows some usages to work that + previously failed with errors such as type of parameter does + not match that when preparing the plan. + + + + + + + In libpq, handle single-row mode + correctly when pipelining (Denis Laxalde) + + + + The single-row flag was not reset at the correct time if pipeline + mode was also active. + + + + + + + Add missing guards for NULL connection pointer + in libpq (Daniele Varrazzo, Tom Lane) + + + + There's a convention that libpq functions + should check for a NULL PGconn argument, and fail gracefully instead + of crashing. PQflush() + and PQisnonblocking() didn't get that memo, so + fix them. + + + + + + + In ecpg, fix omission of variable storage + classes when multiple varchar or bytea + variables are declared in the same declaration (Andrey Sokolov) + + + + For example, ecpg + translated static varchar str1[10], str2[20], + str3[30]; in such a way that only str1 + was marked static. + + + + + + + Allow cross-platform tablespace relocation + in pg_basebackup (Robert Haas) + + + + Allow the remote path in to be + either a Unix-style or Windows-style absolute path, since the source + server could be on a different OS than the local system. + + + + + + + In pg_stat_statements, fix access to + already-freed memory (zhaoqigui) + + + + This occurred if pg_stat_statements + tracked a ROLLBACK command issued via extended + query protocol. In debug builds it consistently led to an assertion + failure. In production builds there would often be no visible ill + effect; but if the freed memory had already been reused, the likely + result would be to store garbage for the query string. + + + + + + + In postgres_fdw, ensure that target lists + constructed for EvalPlanQual plans will have all required columns + (Richard Guo, Etsuro Fujita) + + + + This avoids variable not found in subplan target list + errors in rare cases. + + + + + + + Reject unwanted output from the platform's + uuid_create() function (Nazir Bilal Yavuz) + + + + The uuid-ossp module expects + libc's uuid_create() to produce a version-1 + UUID, but recent NetBSD releases produce a version-4 (random) UUID + instead. Check for that, and complain if so. Drop the + documentation's claim that the NetBSD implementation is usable + for uuid-ossp. + (If a version-4 UUID is okay for your purposes, you don't + need uuid-ossp at all; just + use gen_random_uuid().) + + + + + + + Include new Perl test modules in standard installations + (Álvaro Herrera) + + + + Add PostgreSQL/Test/Cluster.pm and + PostgreSQL/Test/Utils.pm to the standard + installation file set in pre-version-15 branches. This is for the + benefit of extensions that want to use newly-written test code in + older branches. + + + + + + + On NetBSD, force dynamic symbol resolution at postmaster start + (Andres Freund, Tom Lane) + + + + This avoids a risk of deadlock in the dynamic linker on NetBSD 10. + + + + + + + Fix incompatibilities with LLVM 15 (Thomas Munro, Andres Freund) + + + + + + + Allow use of __sync_lock_test_and_set() for + spinlocks on any machine (Tom Lane) + + + + This eases porting to new machine architectures, at least if you're + using a compiler that supports this GCC builtin function. + + + + + + + Rename symbol REF to REF_P to + avoid compile failure on recent macOS (Tom Lane) + + + + + + + Avoid using sprintf, to avoid compile-time + deprecation warnings (Tom Lane) + + + + + + + Silence assorted compiler warnings from clang 15 and later (Tom Lane) + + + + + + + Update time zone data files to tzdata + release 2022f for DST law changes in Chile, Fiji, Iran, Jordan, + Mexico, Palestine, and Syria, plus historical corrections for Chile, + Crimea, Iran, and Mexico. + + + + Also, the Europe/Kiev zone has been renamed to Europe/Kyiv. + Also, the following zones have been merged into nearby, + more-populous zones whose clocks have agreed with them since 1970: + Antarctica/Vostok, Asia/Brunei, + Asia/Kuala_Lumpur, Atlantic/Reykjavik, Europe/Amsterdam, + Europe/Copenhagen, Europe/Luxembourg, Europe/Monaco, Europe/Oslo, + Europe/Stockholm, Indian/Christmas, Indian/Cocos, Indian/Kerguelen, + Indian/Mahe, Indian/Reunion, Pacific/Chuuk, Pacific/Funafuti, + Pacific/Majuro, Pacific/Pohnpei, Pacific/Wake and Pacific/Wallis. + (This indirectly affects zones that were already links to one of + these: Arctic/Longyearbyen, Atlantic/Jan_Mayen, Iceland, + Pacific/Ponape, Pacific/Truk, and Pacific/Yap.) America/Nipigon, + America/Rainy_River, America/Thunder_Bay, Europe/Uzhgorod, and + Europe/Zaporozhye were also merged into nearby zones after + discovering that their claimed post-1970 differences from those + zones seem to have been errors. + In all these cases, the previous zone name remains as an alias; + but the actual data is that of the zone that was merged into. + + + + These zone mergers result in loss of pre-1970 timezone history for + the merged zones, which may be troublesome for applications + expecting consistency of timestamptz display. As an + example, the stored value 1944-06-01 12:00 UTC + would previously display as 1944-06-01 + 13:00:00+01 if the Europe/Stockholm zone is selected, but + now it will read out as 1944-06-01 14:00:00+02. + + + + It is possible to build the time zone data files with options that + will restore the older zone data, but that choice also inserts a lot + of other old (and typically poorly-attested) zone data, resulting in + more total changes from the previous release than accepting these + upstream changes does. PostgreSQL has + chosen to ship the tzdb data + as-recommended, and so far as we are aware most major operating + system distributions are doing likewise. However, if these changes + cause significant problems for your application, a possible solution + is to install a local build of the time zone data files using + tzdb's backwards-compatibility options + (see their PACKRATDATA + and PACKRATLIST options). + + + + + + + + Release 14.5 diff --git a/src/backend/access/gin/ginfast.c b/src/backend/access/gin/ginfast.c index 48102ed46fc..7f8500e0c38 100644 --- a/src/backend/access/gin/ginfast.c +++ b/src/backend/access/gin/ginfast.c @@ -285,7 +285,6 @@ ginHeapTupleFastInsert(GinState *ginstate, GinTupleCollector *collector) memset(&sublist, 0, sizeof(GinMetaPageData)); makeSublist(index, collector->tuples, collector->ntuples, &sublist); - /* * metapage was unlocked, see above */ @@ -365,11 +364,11 @@ ginHeapTupleFastInsert(GinState *ginstate, GinTupleCollector *collector) data.ntuples = collector->ntuples; + START_CRIT_SECTION(); + if (needWal) XLogBeginInsert(); - START_CRIT_SECTION(); - /* * Increase counter of heap tuples */ diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index dc0becdd53f..de2ef79ec9d 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -1087,7 +1087,6 @@ function_parse_error_transpose(const char *prosrc) { int origerrposition; int newerrposition; - const char *queryText; /* * Nothing to do unless we are dealing with a syntax error that has a @@ -1106,10 +1105,22 @@ function_parse_error_transpose(const char *prosrc) /* We can get the original query text from the active portal (hack...) */ /* Assert(ActivePortal && PortalGetStatus(ActivePortal) == PORTAL_ACTIVE); */ - queryText = ActivePortal->sourceText; + if (ActivePortal && ActivePortal->status == PORTAL_ACTIVE) + { + const char *queryText = ActivePortal->sourceText; - /* Try to locate the prosrc in the original text */ - newerrposition = match_prosrc_to_query(prosrc, queryText, origerrposition); + /* Try to locate the prosrc in the original text */ + newerrposition = match_prosrc_to_query(prosrc, queryText, + origerrposition); + } + else + { + /* + * Quietly give up if no ActivePortal. This is an unusual situation + * but it can happen in, e.g., logical replication workers. + */ + newerrposition = -1; + } if (newerrposition > 0) { diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 401b22e095f..08ef3902a07 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -11951,14 +11951,21 @@ CloneFkReferenced(Relation parentRel, Relation partitionRel) mapped_confkey[i] = attmap->attnums[confkey[i] - 1]; fkconstraint = makeNode(Constraint); - /* for now this is all we need */ + fkconstraint->contype = CONSTRAINT_FOREIGN; fkconstraint->conname = NameStr(constrForm->conname); - fkconstraint->fk_upd_action = constrForm->confupdtype; - fkconstraint->fk_del_action = constrForm->confdeltype; fkconstraint->deferrable = constrForm->condeferrable; fkconstraint->initdeferred = constrForm->condeferred; - fkconstraint->initially_valid = true; + fkconstraint->location = -1; + fkconstraint->pktable = NULL; + /* ->fk_attrs determined below */ + fkconstraint->pk_attrs = NIL; fkconstraint->fk_matchtype = constrForm->confmatchtype; + fkconstraint->fk_upd_action = constrForm->confupdtype; + fkconstraint->fk_del_action = constrForm->confdeltype; + fkconstraint->old_conpfeqop = NIL; + fkconstraint->old_pktable_oid = InvalidOid; + fkconstraint->skip_validation = false; + fkconstraint->initially_valid = true; /* set up colnames that are used to generate the constraint name */ for (int i = 0; i < numfks; i++) @@ -12130,11 +12137,21 @@ CloneFkReferencing(List **wqueue, Relation parentRel, Relation partRel) /* No dice. Set up to create our own constraint */ fkconstraint = makeNode(Constraint); - fkconstraint->fk_upd_action = constrForm->confupdtype; - fkconstraint->fk_del_action = constrForm->confdeltype; + fkconstraint->contype = CONSTRAINT_FOREIGN; + /* ->conname determined below */ fkconstraint->deferrable = constrForm->condeferrable; fkconstraint->initdeferred = constrForm->condeferred; + fkconstraint->location = -1; + fkconstraint->pktable = NULL; + /* ->fk_attrs determined below */ + fkconstraint->pk_attrs = NIL; fkconstraint->fk_matchtype = constrForm->confmatchtype; + fkconstraint->fk_upd_action = constrForm->confupdtype; + fkconstraint->fk_del_action = constrForm->confdeltype; + fkconstraint->old_conpfeqop = NIL; + fkconstraint->old_pktable_oid = InvalidOid; + fkconstraint->skip_validation = false; + fkconstraint->initially_valid = true; for (int i = 0; i < numfks; i++) { Form_pg_attribute att; @@ -22433,11 +22450,21 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, * still do), but now we need separate ones of our own. */ fkconstraint = makeNode(Constraint); + fkconstraint->contype = CONSTRAINT_FOREIGN; fkconstraint->conname = pstrdup(NameStr(conform->conname)); - fkconstraint->fk_upd_action = conform->confupdtype; - fkconstraint->fk_del_action = conform->confdeltype; fkconstraint->deferrable = conform->condeferrable; fkconstraint->initdeferred = conform->condeferred; + fkconstraint->location = -1; + fkconstraint->pktable = NULL; + fkconstraint->fk_attrs = NIL; + fkconstraint->pk_attrs = NIL; + fkconstraint->fk_matchtype = conform->confmatchtype; + fkconstraint->fk_upd_action = conform->confupdtype; + fkconstraint->fk_del_action = conform->confdeltype; + fkconstraint->old_conpfeqop = NIL; + fkconstraint->old_pktable_oid = InvalidOid; + fkconstraint->skip_validation = false; + fkconstraint->initially_valid = true; createForeignKeyActionTriggers(partRel, conform->confrelid, fkconstraint, fk->conoid, diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 57a258102c5..b52c35fe6b7 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -254,7 +254,7 @@ CreateTriggerFiringOn(CreateTrigStmt *stmt, const char *queryString, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("\"%s\" is a partitioned table", RelationGetRelationName(rel)), - errdetail("Triggers on partitioned tables cannot have transition tables."))); + errdetail("ROW triggers with transition tables are not supported on partitioned tables."))); } } else if (rel->rd_rel->relkind == RELKIND_VIEW) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 4e4d67bd4f9..4e718bd7b31 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -1588,7 +1588,7 @@ ldelete:; mtstate->mt_transition_capture); /* - * We've already captured the NEW TABLE row, so make sure any AR + * We've already captured the OLD TABLE row, so make sure any AR * DELETE trigger fired below doesn't capture it again. */ ar_delete_trig_tcs = NULL; diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 7190dd94ebf..cb8f76d902a 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -1706,6 +1706,15 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, Assert(partrelinfo != NULL); partrel = partrelinfo->ri_RelationDesc; + /* + * Check for supported relkind. We need this since partitions might be of + * unsupported relkinds; and the set of partitions can change, so checking + * at CREATE/ALTER SUBSCRIPTION would be insufficient. + */ + CheckSubscriptionRelkind(partrel->rd_rel->relkind, + get_namespace_name(RelationGetNamespace(partrel)), + RelationGetRelationName(partrel)); + /* * To perform any of the operations below, the tuple must match the * partition's rowtype. Convert if needed or just copy, using a dedicated @@ -1759,6 +1768,7 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, { TupleTableSlot *localslot; ResultRelInfo *partrelinfo_new; + Relation partrel_new; bool found; /* Get the matching local tuple from the partition. */ @@ -1842,7 +1852,6 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, slot_getallattrs(remoteslot); } - /* Find the new partition. */ oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); partrelinfo_new = ExecFindPartition(mtstate, relinfo, @@ -1850,6 +1859,12 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, estate); MemoryContextSwitchTo(oldctx); Assert(partrelinfo_new != partrelinfo); + partrel_new = partrelinfo_new->ri_RelationDesc; + + /* Check that new partition also has supported relkind. */ + CheckSubscriptionRelkind(partrel_new->rd_rel->relkind, + get_namespace_name(RelationGetNamespace(partrel_new)), + RelationGetRelationName(partrel_new)); /* DELETE old tuple found in the old partition. */ apply_handle_delete_internal(edata, partrelinfo, @@ -1862,10 +1877,9 @@ apply_handle_tuple_routing(ApplyExecutionData *edata, * partition rowtype. */ oldctx = MemoryContextSwitchTo(GetPerTupleMemoryContext(estate)); - partrel = partrelinfo_new->ri_RelationDesc; remoteslot_part = partrelinfo_new->ri_PartitionTupleSlot; if (remoteslot_part == NULL) - remoteslot_part = table_slot_create(partrel, + remoteslot_part = table_slot_create(partrel_new, &estate->es_tupleTable); map = partrelinfo_new->ri_RootToPartitionMap; if (map != NULL) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 087f9869372..c7dbe5da069 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -336,12 +336,22 @@ tablespace_list_append(const char *arg) } /* - * This check isn't absolutely necessary. But all tablespaces are created - * with absolute directories, so specifying a non-absolute path here would - * just never match, possibly confusing users. It's also good to be - * consistent with the new_dir check. + * All tablespaces are created with absolute directories, so specifying a + * non-absolute path here would just never match, possibly confusing users. + * Since we don't know whether the remote side is Windows or not, and it + * might be different than the local side, permit any path that could be + * absolute under either set of rules. + * + * (There is little practical risk of confusion here, because someone + * running entirely on Linux isn't likely to have a relative path that + * begins with a backslash or something that looks like a drive + * specification. If they do, and they also incorrectly believe that + * a relative path is acceptable here, we'll silently fail to warn them + * of their mistake, and the -T option will just not get applied, same + * as if they'd specified -T for a nonexistent tablespace.) */ - if (!is_absolute_path(cell->old_dir)) + if (!is_nonwindows_absolute_path(cell->old_dir) && + !is_windows_absolute_path(cell->old_dir)) { pg_log_error("old directory is not an absolute path in tablespace mapping: %s", cell->old_dir); diff --git a/src/include/lib/simplehash.h b/src/include/lib/simplehash.h index 8b4af795544..701acc3a41d 100644 --- a/src/include/lib/simplehash.h +++ b/src/include/lib/simplehash.h @@ -452,9 +452,9 @@ SH_CREATE(MemoryContext ctx, uint32 nelements, void *private_data) uint64 size; #ifdef SH_RAW_ALLOCATOR - tb = SH_RAW_ALLOCATOR(sizeof(SH_TYPE)); + tb = (SH_TYPE *) SH_RAW_ALLOCATOR(sizeof(SH_TYPE)); #else - tb = MemoryContextAllocZero(ctx, sizeof(SH_TYPE)); + tb = (SH_TYPE *) MemoryContextAllocZero(ctx, sizeof(SH_TYPE)); tb->ctx = ctx; #endif tb->private_data = private_data; @@ -464,7 +464,7 @@ SH_CREATE(MemoryContext ctx, uint32 nelements, void *private_data) SH_COMPUTE_PARAMETERS(tb, size); - tb->data = SH_ALLOCATE(tb, sizeof(SH_ELEMENT_TYPE) * tb->size); + tb->data = (SH_ELEMENT_TYPE *) SH_ALLOCATE(tb, sizeof(SH_ELEMENT_TYPE) * tb->size); tb->num_expansions = 0; return tb; @@ -511,7 +511,7 @@ SH_GROW(SH_TYPE * tb, uint64 newsize) /* compute parameters for new table */ SH_COMPUTE_PARAMETERS(tb, newsize); - tb->data = SH_ALLOCATE(tb, sizeof(SH_ELEMENT_TYPE) * tb->size); + tb->data = (SH_ELEMENT_TYPE *) SH_ALLOCATE(tb, sizeof(SH_ELEMENT_TYPE) * tb->size); newdata = tb->data; @@ -1078,7 +1078,7 @@ SH_STAT(SH_TYPE * tb) double fillfactor; uint32 i; - uint32 *collisions = palloc0(tb->size * sizeof(uint32)); + uint32 *collisions = (uint32 *) palloc0(tb->size * sizeof(uint32)); uint32 total_collisions = 0; uint32 max_collisions = 0; double avg_collisions; diff --git a/src/include/port.h b/src/include/port.h index c30e558a362..4179df36ebc 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -75,28 +75,32 @@ extern void get_parent_directory(char *path); extern char **pgfnames(const char *path); extern void pgfnames_cleanup(char **filenames); -/* - * is_absolute_path - * - * By making this a macro we avoid needing to include path.c in libpq. - */ -#ifndef WIN32 -#define IS_DIR_SEP(ch) ((ch) == '/') - -#define is_absolute_path(filename) \ +#define IS_NONWINDOWS_DIR_SEP(ch) ((ch) == '/') +#define is_nonwindows_absolute_path(filename) \ ( \ - IS_DIR_SEP((filename)[0]) \ + IS_NONWINDOWS_DIR_SEP((filename)[0]) \ ) -#else -#define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\') +#define IS_WINDOWS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\') /* See path_is_relative_and_below_cwd() for how we handle 'E:abc'. */ -#define is_absolute_path(filename) \ +#define is_windows_absolute_path(filename) \ ( \ - IS_DIR_SEP((filename)[0]) || \ + IS_WINDOWS_DIR_SEP((filename)[0]) || \ (isalpha((unsigned char) ((filename)[0])) && (filename)[1] == ':' && \ - IS_DIR_SEP((filename)[2])) \ + IS_WINDOWS_DIR_SEP((filename)[2])) \ ) + +/* + * is_absolute_path and IS_DIR_SEP + * + * By using macros here we avoid needing to include path.c in libpq. + */ +#ifndef WIN32 +#define IS_DIR_SEP(ch) IS_NONWINDOWS_DIR_SEP(ch) +#define is_absolute_path(filename) is_nonwindows_absolute_path(filename) +#else +#define IS_DIR_SEP(ch) IS_WINDOWS_DIR_SEP(ch) +#define is_absolute_path(filename) is_windows_absolute_path(filename) #endif diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index d34ff73ad36..ece5e3d68eb 100644 --- a/src/include/storage/s_lock.h +++ b/src/include/storage/s_lock.h @@ -341,29 +341,6 @@ tas(volatile slock_t *lock) #endif /* __arm__ || __arm || __aarch64__ || __aarch64 */ -/* - * RISC-V likewise uses __sync_lock_test_and_set(int *, int) if available. - */ -#if defined(__riscv) -#ifdef HAVE_GCC__SYNC_INT32_TAS -#define HAS_TEST_AND_SET - -#define TAS(lock) tas(lock) - -typedef int slock_t; - -static __inline__ int -tas(volatile slock_t *lock) -{ - return __sync_lock_test_and_set(lock, 1); -} - -#define S_UNLOCK(lock) __sync_lock_release(lock) - -#endif /* HAVE_GCC__SYNC_INT32_TAS */ -#endif /* __riscv */ - - /* S/390 and S/390x Linux (32- and 64-bit zSeries) */ #if defined(__s390__) || defined(__s390x__) #define HAS_TEST_AND_SET @@ -766,6 +743,51 @@ tas(volatile slock_t *lock) typedef unsigned char slock_t; #endif + +/* + * If we have no platform-specific knowledge, but we found that the compiler + * provides __sync_lock_test_and_set(), use that. Prefer the int-width + * version over the char-width version if we have both, on the rather dubious + * grounds that that's known to be more likely to work in the ARM ecosystem. + * (But we dealt with ARM above.) + */ +#if !defined(HAS_TEST_AND_SET) + +#if defined(HAVE_GCC__SYNC_INT32_TAS) +#define HAS_TEST_AND_SET + +#define TAS(lock) tas(lock) + +typedef int slock_t; + +static __inline__ int +tas(volatile slock_t *lock) +{ + return __sync_lock_test_and_set(lock, 1); +} + +#define S_UNLOCK(lock) __sync_lock_release(lock) + +#elif defined(HAVE_GCC__SYNC_CHAR_TAS) +#define HAS_TEST_AND_SET + +#define TAS(lock) tas(lock) + +typedef char slock_t; + +static __inline__ int +tas(volatile slock_t *lock) +{ + return __sync_lock_test_and_set(lock, 1); +} + +#define S_UNLOCK(lock) __sync_lock_release(lock) + +#endif /* HAVE_GCC__SYNC_INT32_TAS */ + +#endif /* !defined(HAS_TEST_AND_SET) */ + + /* * Default implementation of S_UNLOCK() for gcc/icc. * diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index ab6ec72653f..8ea6434e222 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -1966,7 +1966,7 @@ ORDER BY co.contype, cr.relname, co.conname, p.conname; ----------------+----------------------------+---------+--------------+----------------------------+--------------+---------------- part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part32_self_fk | parted_self_fk_id_abc_fkey | f | f | parted_self_fk_id_abc_fkey | t | parted_self_fk + part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk @@ -1995,7 +1995,7 @@ ORDER BY co.contype, cr.relname, co.conname, p.conname; ----------------+----------------------------+---------+--------------+----------------------------+--------------+---------------- part1_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk part2_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk - part32_self_fk | parted_self_fk_id_abc_fkey | f | f | parted_self_fk_id_abc_fkey | t | parted_self_fk + part32_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk part33_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk part3_self_fk | parted_self_fk_id_abc_fkey | f | t | parted_self_fk_id_abc_fkey | t | parted_self_fk parted_self_fk | parted_self_fk_id_abc_fkey | f | t | | | parted_self_fk diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index c86a5d265c4..bf73f14b1d0 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -1898,7 +1898,7 @@ create trigger failed after update on parted_trig referencing old table as old_table for each row execute procedure trigger_nothing(); ERROR: "parted_trig" is a partitioned table -DETAIL: Triggers on partitioned tables cannot have transition tables. +DETAIL: ROW triggers with transition tables are not supported on partitioned tables. drop table parted_trig; -- -- Verify trigger creation for partitioned tables, and drop behavior diff --git a/src/test/singlenode_regress/expected/triggers.out b/src/test/singlenode_regress/expected/triggers.out index 2c2cd5c351a..4bd385a7875 100644 --- a/src/test/singlenode_regress/expected/triggers.out +++ b/src/test/singlenode_regress/expected/triggers.out @@ -1913,7 +1913,7 @@ create trigger failed after update on parted_trig referencing old table as old_table for each row execute procedure trigger_nothing(); ERROR: "parted_trig" is a partitioned table -DETAIL: Triggers on partitioned tables cannot have transition tables. +DETAIL: ROW triggers with transition tables are not supported on partitioned tables. drop table parted_trig; -- -- Verify trigger creation for partitioned tables, and drop behavior diff --git a/src/timezone/data/tzdata.zi b/src/timezone/data/tzdata.zi index c38197eaebe..a36449f46bc 100644 --- a/src/timezone/data/tzdata.zi +++ b/src/timezone/data/tzdata.zi @@ -1,4 +1,4 @@ -# version 2022a +# version 2022f # This zic input file is in the public domain. R d 1916 o - Jun 14 23s 1 S R d 1916 1919 - O Su>=1 23s 0 - @@ -43,16 +43,6 @@ Z Africa/Ndjamena 1:0:12 - LMT 1912 1 - WAT Z Africa/Abidjan -0:16:8 - LMT 1912 0 - GMT -L Africa/Abidjan Africa/Accra -L Africa/Abidjan Africa/Bamako -L Africa/Abidjan Africa/Banjul -L Africa/Abidjan Africa/Conakry -L Africa/Abidjan Africa/Dakar -L Africa/Abidjan Africa/Freetown -L Africa/Abidjan Africa/Lome -L Africa/Abidjan Africa/Nouakchott -L Africa/Abidjan Africa/Ouagadougou -L Africa/Abidjan Atlantic/St_Helena R K 1940 o - Jul 15 0 1 S R K 1940 o - O 1 0 0 - R K 1941 o - Ap 15 0 1 S @@ -96,15 +86,6 @@ Z Africa/Nairobi 2:27:16 - LMT 1908 May 2:30 - +0230 1936 D 31 24 2:45 - +0245 1942 Jul 31 24 3 - EAT -L Africa/Nairobi Africa/Addis_Ababa -L Africa/Nairobi Africa/Asmara -L Africa/Nairobi Africa/Dar_es_Salaam -L Africa/Nairobi Africa/Djibouti -L Africa/Nairobi Africa/Kampala -L Africa/Nairobi Africa/Mogadishu -L Africa/Nairobi Indian/Antananarivo -L Africa/Nairobi Indian/Comoro -L Africa/Nairobi Indian/Mayotte Z Africa/Monrovia -0:43:8 - LMT 1882 -0:43:8 - MMT 1919 Mar -0:44:30 - MMT 1972 Ja 7 @@ -335,13 +316,6 @@ Z Africa/El_Aaiun -0:52:48 - LMT 1934 1 M +01/+00 Z Africa/Maputo 2:10:20 - LMT 1903 Mar 2 - CAT -L Africa/Maputo Africa/Blantyre -L Africa/Maputo Africa/Bujumbura -L Africa/Maputo Africa/Gaborone -L Africa/Maputo Africa/Harare -L Africa/Maputo Africa/Kigali -L Africa/Maputo Africa/Lubumbashi -L Africa/Maputo Africa/Lusaka R NA 1994 o - Mar 21 0 -1 WAT R NA 1994 2017 - S Su>=1 2 0 CAT R NA 1995 2017 - Ap Su>=1 2 -1 WAT @@ -356,31 +330,16 @@ Z Africa/Lagos 0:13:35 - LMT 1905 Jul 0:13:35 - LMT 1914 0:30 - +0030 1919 S 1 - WAT -L Africa/Lagos Africa/Bangui -L Africa/Lagos Africa/Brazzaville -L Africa/Lagos Africa/Douala -L Africa/Lagos Africa/Kinshasa -L Africa/Lagos Africa/Libreville -L Africa/Lagos Africa/Luanda -L Africa/Lagos Africa/Malabo -L Africa/Lagos Africa/Niamey -L Africa/Lagos Africa/Porto-Novo -Z Indian/Reunion 3:41:52 - LMT 1911 Jun -4 - +04 Z Africa/Sao_Tome 0:26:56 - LMT 1884 -0:36:45 - LMT 1912 Ja 1 0u 0 - GMT 2018 Ja 1 1 1 - WAT 2019 Ja 1 2 0 - GMT -Z Indian/Mahe 3:41:48 - LMT 1907 -4 - +04 R SA 1942 1943 - S Su>=15 2 1 - R SA 1943 1944 - Mar Su>=15 2 0 - Z Africa/Johannesburg 1:52 - LMT 1892 F 8 1:30 - SAST 1903 Mar 2 SA SAST -L Africa/Johannesburg Africa/Maseru -L Africa/Johannesburg Africa/Mbabane R SD 1970 o - May 1 0 1 S R SD 1970 1985 - O 15 0 0 - R SD 1971 o - Ap 30 0 1 S @@ -445,14 +404,10 @@ Z Antarctica/Davis 0 - -00 1957 Ja 13 Z Antarctica/Mawson 0 - -00 1954 F 13 6 - +06 2009 O 18 2 5 - +05 -Z Indian/Kerguelen 0 - -00 1950 -5 - +05 R Tr 2005 ma - Mar lastSu 1u 2 +02 R Tr 2004 ma - O lastSu 1u 0 +00 Z Antarctica/Troll 0 - -00 2005 F 12 0 Tr %s -Z Antarctica/Vostok 0 - -00 1957 D 16 -6 - +06 Z Antarctica/Rothera 0 - -00 1976 D -3 - -03 Z Asia/Kabul 4:36:48 - LMT 1890 @@ -491,9 +446,6 @@ Z Asia/Thimphu 5:58:36 - LMT 1947 Au 15 Z Indian/Chagos 4:49:40 - LMT 1907 5 - +05 1996 6 - +06 -Z Asia/Brunei 7:39:40 - LMT 1926 Mar -7:30 - +0730 1933 -8 - +08 Z Asia/Yangon 6:24:47 - LMT 1880 6:24:47 - RMT 1920 6:30 - +0630 1942 May @@ -535,7 +487,7 @@ R HK 1965 1976 - O Su>=16 3:30 0 - R HK 1973 o - D 30 3:30 1 S R HK 1979 o - May 13 3:30 1 S R HK 1979 o - O 21 3:30 0 - -Z Asia/Hong_Kong 7:36:42 - LMT 1904 O 30 0:36:42 +Z Asia/Hong_Kong 7:36:42 - LMT 1904 O 29 17u 8 - HKT 1941 Jun 15 3 8 1 HKST 1941 O 1 4 8 0:30 HKWT 1941 D 25 @@ -608,7 +560,6 @@ Z Asia/Famagusta 2:15:48 - LMT 1921 N 14 2 E EE%sT 2016 S 8 3 - +03 2017 O 29 1u 2 E EE%sT -L Asia/Nicosia Europe/Nicosia Z Asia/Tbilisi 2:59:11 - LMT 1880 2:59:11 - TBMT 1924 May 2 3 - +03 1957 Mar @@ -634,7 +585,7 @@ Z Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 5:30 1 +0630 1945 O 15 5:30 - IST Z Asia/Jakarta 7:7:12 - LMT 1867 Au 10 -7:7:12 - BMT 1923 D 31 23:47:12 +7:7:12 - BMT 1923 D 31 16:40u 7:20 - +0720 1932 N 7:30 - +0730 1942 Mar 23 9 - +09 1945 S 23 @@ -660,9 +611,14 @@ Z Asia/Jayapura 9:22:48 - LMT 1932 N 9 - +09 1944 S 9:30 - +0930 1964 9 - WIT -R i 1978 1980 - Mar 20 24 1 - -R i 1978 o - O 20 24 0 - +R i 1910 o - Ja 1 0 0 - +R i 1977 o - Mar 21 23 1 - +R i 1977 o - O 20 24 0 - +R i 1978 o - Mar 24 24 1 - +R i 1978 o - Au 5 1 0 - +R i 1979 o - May 26 24 1 - R i 1979 o - S 18 24 0 - +R i 1980 o - Mar 20 24 1 - R i 1980 o - S 22 24 0 - R i 1991 o - May 2 24 1 - R i 1992 1995 - Mar 21 24 1 - @@ -693,77 +649,11 @@ R i 2017 2019 - Mar 21 24 1 - R i 2017 2019 - S 21 24 0 - R i 2020 o - Mar 20 24 1 - R i 2020 o - S 20 24 0 - -R i 2021 2023 - Mar 21 24 1 - -R i 2021 2023 - S 21 24 0 - -R i 2024 o - Mar 20 24 1 - -R i 2024 o - S 20 24 0 - -R i 2025 2027 - Mar 21 24 1 - -R i 2025 2027 - S 21 24 0 - -R i 2028 2029 - Mar 20 24 1 - -R i 2028 2029 - S 20 24 0 - -R i 2030 2031 - Mar 21 24 1 - -R i 2030 2031 - S 21 24 0 - -R i 2032 2033 - Mar 20 24 1 - -R i 2032 2033 - S 20 24 0 - -R i 2034 2035 - Mar 21 24 1 - -R i 2034 2035 - S 21 24 0 - -R i 2036 2037 - Mar 20 24 1 - -R i 2036 2037 - S 20 24 0 - -R i 2038 2039 - Mar 21 24 1 - -R i 2038 2039 - S 21 24 0 - -R i 2040 2041 - Mar 20 24 1 - -R i 2040 2041 - S 20 24 0 - -R i 2042 2043 - Mar 21 24 1 - -R i 2042 2043 - S 21 24 0 - -R i 2044 2045 - Mar 20 24 1 - -R i 2044 2045 - S 20 24 0 - -R i 2046 2047 - Mar 21 24 1 - -R i 2046 2047 - S 21 24 0 - -R i 2048 2049 - Mar 20 24 1 - -R i 2048 2049 - S 20 24 0 - -R i 2050 2051 - Mar 21 24 1 - -R i 2050 2051 - S 21 24 0 - -R i 2052 2053 - Mar 20 24 1 - -R i 2052 2053 - S 20 24 0 - -R i 2054 2055 - Mar 21 24 1 - -R i 2054 2055 - S 21 24 0 - -R i 2056 2057 - Mar 20 24 1 - -R i 2056 2057 - S 20 24 0 - -R i 2058 2059 - Mar 21 24 1 - -R i 2058 2059 - S 21 24 0 - -R i 2060 2062 - Mar 20 24 1 - -R i 2060 2062 - S 20 24 0 - -R i 2063 o - Mar 21 24 1 - -R i 2063 o - S 21 24 0 - -R i 2064 2066 - Mar 20 24 1 - -R i 2064 2066 - S 20 24 0 - -R i 2067 o - Mar 21 24 1 - -R i 2067 o - S 21 24 0 - -R i 2068 2070 - Mar 20 24 1 - -R i 2068 2070 - S 20 24 0 - -R i 2071 o - Mar 21 24 1 - -R i 2071 o - S 21 24 0 - -R i 2072 2074 - Mar 20 24 1 - -R i 2072 2074 - S 20 24 0 - -R i 2075 o - Mar 21 24 1 - -R i 2075 o - S 21 24 0 - -R i 2076 2078 - Mar 20 24 1 - -R i 2076 2078 - S 20 24 0 - -R i 2079 o - Mar 21 24 1 - -R i 2079 o - S 21 24 0 - -R i 2080 2082 - Mar 20 24 1 - -R i 2080 2082 - S 20 24 0 - -R i 2083 o - Mar 21 24 1 - -R i 2083 o - S 21 24 0 - -R i 2084 2086 - Mar 20 24 1 - -R i 2084 2086 - S 20 24 0 - -R i 2087 o - Mar 21 24 1 - -R i 2087 o - S 21 24 0 - -R i 2088 ma - Mar 20 24 1 - -R i 2088 ma - S 20 24 0 - +R i 2021 2022 - Mar 21 24 1 - +R i 2021 2022 - S 21 24 0 - Z Asia/Tehran 3:25:44 - LMT 1916 -3:25:44 - TMT 1946 -3:30 - +0330 1977 N +3:25:44 - TMT 1935 Jun 13 +3:30 i +0330/+0430 1977 O 20 24 4 i +04/+05 1979 3:30 i +0330/+0430 R IQ 1982 o - May 1 0 1 - @@ -902,10 +792,11 @@ R J 2005 o - S lastF 0s 0 - R J 2006 2011 - O lastF 0s 0 - R J 2013 o - D 20 0 0 - R J 2014 2021 - Mar lastTh 24 1 S -R J 2014 ma - O lastF 0s 0 - -R J 2022 ma - F lastTh 24 1 S +R J 2014 2022 - O lastF 0s 0 - +R J 2022 o - F lastTh 24 1 S Z Asia/Amman 2:23:44 - LMT 1931 -2 J EE%sT +2 J EE%sT 2022 O 28 0s +3 - +03 Z Asia/Almaty 5:7:48 - LMT 1924 May 2 5 - +05 1930 Jun 21 6 R +06/+07 1991 Mar 31 2s @@ -1034,15 +925,6 @@ Z Asia/Beirut 2:22 - LMT 1880 2 l EE%sT R NB 1935 1941 - S 14 0 0:20 - R NB 1935 1941 - D 14 0 0 - -Z Asia/Kuala_Lumpur 6:46:46 - LMT 1901 -6:55:25 - SMT 1905 Jun -7 - +07 1933 -7 0:20 +0720 1936 -7:20 - +0720 1941 S -7:30 - +0730 1942 F 16 -9 - +09 1945 S 12 -7:30 - +0730 1982 -8 - +08 Z Asia/Kuching 7:21:20 - LMT 1926 Mar 7:30 - +0730 1933 8 NB +08/+0820 1942 F 16 @@ -1107,14 +989,16 @@ R P 2013 o - S 27 0 0 - R P 2014 o - O 24 0 0 - R P 2015 o - Mar 28 0 1 S R P 2015 o - O 23 1 0 - -R P 2016 2018 - Mar Sa>=24 1 1 S -R P 2016 2018 - O Sa>=24 1 0 - +R P 2016 2018 - Mar Sa<=30 1 1 S +R P 2016 2018 - O Sa<=30 1 0 - R P 2019 o - Mar 29 0 1 S -R P 2019 o - O Sa>=24 0 0 - -R P 2020 2021 - Mar Sa>=24 0 1 S +R P 2019 o - O Sa<=30 0 0 - +R P 2020 2021 - Mar Sa<=30 0 1 S R P 2020 o - O 24 1 0 - -R P 2021 ma - O F>=23 1 0 - -R P 2022 ma - Mar Su>=25 0 1 S +R P 2021 o - O 29 1 0 - +R P 2022 o - Mar 27 0 1 S +R P 2022 ma - O Sa<=30 2 0 - +R P 2023 ma - Mar Sa<=30 2 1 S Z Asia/Gaza 2:17:52 - LMT 1900 O 2 Z EET/EEST 1948 May 15 2 K EE%sT 1967 Jun 5 @@ -1147,12 +1031,8 @@ Z Asia/Manila -15:56 - LMT 1844 D 31 Z Asia/Qatar 3:26:8 - LMT 1920 4 - +04 1972 Jun 3 - +03 -L Asia/Qatar Asia/Bahrain Z Asia/Riyadh 3:6:52 - LMT 1947 Mar 14 3 - +03 -L Asia/Riyadh Antarctica/Syowa -L Asia/Riyadh Asia/Aden -L Asia/Riyadh Asia/Kuwait Z Asia/Singapore 6:55:25 - LMT 1901 6:55:25 - SMT 1905 Jun 7 - +07 1933 @@ -1210,20 +1090,19 @@ R S 2008 o - Ap F>=1 0 1 S R S 2008 o - N 1 0 0 - R S 2009 o - Mar lastF 0 1 S R S 2010 2011 - Ap F>=1 0 1 S -R S 2012 ma - Mar lastF 0 1 S -R S 2009 ma - O lastF 0 0 - +R S 2012 2022 - Mar lastF 0 1 S +R S 2009 2022 - O lastF 0 0 - Z Asia/Damascus 2:25:12 - LMT 1920 -2 S EE%sT +2 S EE%sT 2022 O 28 +3 - +03 Z Asia/Dushanbe 4:35:12 - LMT 1924 May 2 5 - +05 1930 Jun 21 6 R +06/+07 1991 Mar 31 2s -5 1 +05/+06 1991 S 9 2s +5 1 +06 1991 S 9 2s 5 - +05 Z Asia/Bangkok 6:42:4 - LMT 1880 6:42:4 - BMT 1920 Ap 7 - +07 -L Asia/Bangkok Asia/Phnom_Penh -L Asia/Bangkok Asia/Vientiane Z Asia/Ashgabat 3:53:32 - LMT 1924 May 2 4 - +04 1930 Jun 21 5 R +05/+06 1991 Mar 31 2 @@ -1231,7 +1110,6 @@ Z Asia/Ashgabat 3:53:32 - LMT 1924 May 2 5 - +05 Z Asia/Dubai 3:41:12 - LMT 1920 4 - +04 -L Asia/Dubai Asia/Muscat Z Asia/Samarkand 4:27:53 - LMT 1924 May 2 4 - +04 1930 Jun 21 5 - +05 1981 Ap @@ -1244,7 +1122,7 @@ Z Asia/Tashkent 4:37:11 - LMT 1924 May 2 6 R +06/+07 1991 Mar 31 2 5 R +05/+06 1992 5 - +05 -Z Asia/Ho_Chi_Minh 7:6:40 - LMT 1906 Jul +Z Asia/Ho_Chi_Minh 7:6:30 - LMT 1906 Jul 7:6:30 - PLMT 1911 May 7 - +07 1942 D 31 23 8 - +08 1945 Mar 14 23 @@ -1407,10 +1285,6 @@ Z Antarctica/Macquarie 0 - -00 1899 N 10 AT AE%sT 2010 10 1 AEDT 2011 10 AT AE%sT -Z Indian/Christmas 7:2:52 - LMT 1895 F -7 - +07 -Z Indian/Cocos 6:27:40 - LMT 1900 -6:30 - +0630 R FJ 1998 1999 - N Su>=1 2 1 - R FJ 1999 2000 - F lastSu 3 0 - R FJ 2009 o - N 29 2 1 - @@ -1423,8 +1297,6 @@ R FJ 2014 2018 - N Su>=1 2 1 - R FJ 2015 2021 - Ja Su>=12 3 0 - R FJ 2019 o - N Su>=8 2 1 - R FJ 2020 o - D 20 2 1 - -R FJ 2022 ma - N Su>=8 2 1 - -R FJ 2023 ma - Ja Su>=12 3 0 - Z Pacific/Fiji 11:55:44 - LMT 1915 O 26 12 FJ +12/+13 Z Pacific/Gambier -8:59:48 - LMT 1912 O @@ -1453,7 +1325,6 @@ Z Pacific/Guam -14:21 - LMT 1844 D 31 9 - +09 1944 Jul 31 10 Gu G%sT 2000 D 23 10 - ChST -L Pacific/Guam Pacific/Saipan Z Pacific/Tarawa 11:32:4 - LMT 1901 12 - +12 Z Pacific/Kanton 0 - -00 1937 Au 31 @@ -1464,14 +1335,6 @@ Z Pacific/Kiritimati -10:29:20 - LMT 1901 -10:40 - -1040 1979 O -10 - -10 1994 D 31 14 - +14 -Z Pacific/Majuro 11:24:48 - LMT 1901 -11 - +11 1914 O -9 - +09 1919 F -11 - +11 1937 -10 - +10 1941 Ap -9 - +09 1944 Ja 30 -11 - +11 1969 O -12 - +12 Z Pacific/Kwajalein 11:9:20 - LMT 1901 11 - +11 1937 10 - +10 1941 Ap @@ -1479,21 +1342,6 @@ Z Pacific/Kwajalein 11:9:20 - LMT 1901 11 - +11 1969 O -12 - -12 1993 Au 20 24 12 - +12 -Z Pacific/Chuuk -13:52:52 - LMT 1844 D 31 -10:7:8 - LMT 1901 -10 - +10 1914 O -9 - +09 1919 F -10 - +10 1941 Ap -9 - +09 1945 Au -10 - +10 -Z Pacific/Pohnpei -13:27:8 - LMT 1844 D 31 -10:32:52 - LMT 1901 -11 - +11 1914 O -9 - +09 1919 F -11 - +11 1937 -10 - +10 1941 Ap -9 - +09 1945 Au -11 - +11 Z Pacific/Kosrae -13:8:4 - LMT 1844 D 31 10:51:56 - LMT 1901 11 - +11 1914 O @@ -1546,7 +1394,6 @@ Z Pacific/Auckland 11:39:4 - LMT 1868 N 2 Z Pacific/Chatham 12:13:48 - LMT 1868 N 2 12:15 - +1215 1946 12:45 k +1245/+1345 -L Pacific/Auckland Antarctica/McMurdo R CK 1978 o - N 12 0 0:30 - R CK 1979 1991 - Mar Su>=1 0 0 - R CK 1979 1990 - O lastSu 0 0:30 - @@ -1570,7 +1417,6 @@ Z Pacific/Palau -15:2:4 - LMT 1844 D 31 Z Pacific/Port_Moresby 9:48:40 - LMT 1880 9:48:32 - PMMT 1895 10 - +10 -L Pacific/Port_Moresby Antarctica/DumontDUrville Z Pacific/Bougainville 10:22:16 - LMT 1880 9:48:32 - PMMT 1895 10 - +10 1942 Jul @@ -1583,7 +1429,6 @@ Z Pacific/Pitcairn -8:40:20 - LMT 1901 Z Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5 -11:22:48 - LMT 1911 -11 - SST -L Pacific/Pago_Pago Pacific/Midway R WS 2010 o - S lastSu 0 1 - R WS 2011 o - Ap Sa>=1 4 0 - R WS 2011 o - S lastSa 3 1 - @@ -1609,10 +1454,6 @@ Z Pacific/Tongatapu 12:19:12 - LMT 1945 S 10 12:20 - +1220 1961 13 - +13 1999 13 TO +13/+14 -Z Pacific/Funafuti 11:56:52 - LMT 1901 -12 - +12 -Z Pacific/Wake 11:6:28 - LMT 1901 -12 - +12 R VU 1973 o - D 22 12u 1 - R VU 1974 o - Mar 30 12u 0 - R VU 1983 1991 - S Sa>=22 24 1 - @@ -1621,8 +1462,6 @@ R VU 1992 1993 - Ja Sa>=22 24 0 - R VU 1992 o - O Sa>=22 24 1 - Z Pacific/Efate 11:13:16 - LMT 1912 Ja 13 11 VU +11/+12 -Z Pacific/Wallis 12:15:20 - LMT 1901 -12 - +12 R G 1916 o - May 21 2s 1 BST R G 1916 o - O 1 2s 0 GMT R G 1917 o - Ap 8 2s 1 BST @@ -1688,14 +1527,11 @@ R G 1972 1980 - O Su>=23 2s 0 GMT R G 1981 1995 - Mar lastSu 1u 1 BST R G 1981 1989 - O Su>=23 1u 0 GMT R G 1990 1995 - O Su>=22 1u 0 GMT -Z Europe/London -0:1:15 - LMT 1847 D 1 0s +Z Europe/London -0:1:15 - LMT 1847 D 0 G %s 1968 O 27 1 - BST 1971 O 31 2u 0 G %s 1996 0 E GMT/BST -L Europe/London Europe/Jersey -L Europe/London Europe/Guernsey -L Europe/London Europe/Isle_of_Man R IE 1971 o - O 31 2u -1 - R IE 1972 1980 - Mar Su>=16 2u 0 - R IE 1972 1980 - O Su>=23 2u -1 - @@ -1703,7 +1539,7 @@ R IE 1981 ma - Mar lastSu 1u 0 - R IE 1981 1989 - O Su>=23 1u -1 - R IE 1990 1995 - O Su>=22 1u -1 - R IE 1996 ma - O lastSu 1u -1 - -Z Europe/Dublin -0:25 - LMT 1880 Au 2 +Z Europe/Dublin -0:25:21 - LMT 1880 Au 2 -0:25:21 - DMT 1916 May 21 2s -0:25:21 1 IST 1916 O 1 2s 0 G %s 1921 D 6 @@ -1899,23 +1735,6 @@ Z Europe/Prague 0:57:44 - LMT 1850 1 -1 GMT 1947 F 23 2 1 CZ CE%sT 1979 1 E CE%sT -R D 1916 o - May 14 23 1 S -R D 1916 o - S 30 23 0 - -R D 1940 o - May 15 0 1 S -R D 1945 o - Ap 2 2s 1 S -R D 1945 o - Au 15 2s 0 - -R D 1946 o - May 1 2s 1 S -R D 1946 o - S 1 2s 0 - -R D 1947 o - May 4 2s 1 S -R D 1947 o - Au 10 2s 0 - -R D 1948 o - May 9 2s 1 S -R D 1948 o - Au 8 2s 0 - -Z Europe/Copenhagen 0:50:20 - LMT 1890 -0:50:20 - CMT 1894 -1 D CE%sT 1942 N 2 2s -1 c CE%sT 1945 Ap 2 2 -1 D CE%sT 1980 -1 E CE%sT Z Atlantic/Faroe -0:27:4 - LMT 1908 Ja 11 0 - WET 1981 0 E WE%sT @@ -1959,7 +1778,6 @@ Z Europe/Helsinki 1:39:49 - LMT 1878 May 31 1:39:49 - HMT 1921 May 2 FI EE%sT 1983 2 E EE%sT -L Europe/Helsinki Europe/Mariehamn R F 1916 o - Jun 14 23s 1 S R F 1916 1919 - O Su>=1 23s 0 - R F 1917 o - Mar 24 23s 1 S @@ -2025,8 +1843,7 @@ Z Europe/Berlin 0:53:28 - LMT 1893 Ap 1 So CE%sT 1946 1 DE CE%sT 1980 1 E CE%sT -L Europe/Zurich Europe/Busingen -Z Europe/Gibraltar -0:21:24 - LMT 1880 Au 2 0s +Z Europe/Gibraltar -0:21:24 - LMT 1880 Au 2 0 G %s 1957 Ap 14 2 1 - CET 1982 1 E CE%sT @@ -2080,25 +1897,6 @@ Z Europe/Budapest 1:16:20 - LMT 1890 N 1 c CE%sT 1945 1 h CE%sT 1984 1 E CE%sT -R w 1917 1919 - F 19 23 1 - -R w 1917 o - O 21 1 0 - -R w 1918 1919 - N 16 1 0 - -R w 1921 o - Mar 19 23 1 - -R w 1921 o - Jun 23 1 0 - -R w 1939 o - Ap 29 23 1 - -R w 1939 o - O 29 2 0 - -R w 1940 o - F 25 2 1 - -R w 1940 1941 - N Su>=2 1s 0 - -R w 1941 1942 - Mar Su>=2 1s 1 - -R w 1943 1946 - Mar Su>=1 1s 1 - -R w 1942 1948 - O Su>=22 1s 0 - -R w 1947 1967 - Ap Su>=1 1s 1 - -R w 1949 o - O 30 1s 0 - -R w 1950 1966 - O Su>=22 1s 0 - -R w 1967 o - O 29 1s 0 - -Z Atlantic/Reykjavik -1:28 - LMT 1908 --1 w -01/+00 1968 Ap 7 1s -0 - GMT R I 1916 o - Jun 3 24 1 S R I 1916 1917 - S 30 24 0 - R I 1917 o - Mar 31 24 1 S @@ -2141,13 +1939,11 @@ R I 1977 1979 - May Su>=22 0s 1 S R I 1978 o - O 1 0s 0 - R I 1979 o - S 30 0s 0 - Z Europe/Rome 0:49:56 - LMT 1866 D 12 -0:49:56 - RMT 1893 O 31 23:49:56 +0:49:56 - RMT 1893 O 31 23u 1 I CE%sT 1943 S 10 1 c CE%sT 1944 Jun 4 1 I CE%sT 1980 1 E CE%sT -L Europe/Rome Europe/Vatican -L Europe/Rome Europe/San_Marino R LV 1989 1996 - Mar lastSu 2s 1 S R LV 1989 1996 - S lastSu 2s 0 - Z Europe/Riga 1:36:34 - LMT 1880 @@ -2165,7 +1961,6 @@ Z Europe/Riga 1:36:34 - LMT 1880 2 E EE%sT 2000 F 29 2 - EET 2001 Ja 2 2 E EE%sT -L Europe/Zurich Europe/Vaduz Z Europe/Vilnius 1:41:16 - LMT 1880 1:24 - WMT 1917 1:35:36 - KMT 1919 O 10 @@ -2181,36 +1976,6 @@ Z Europe/Vilnius 1:41:16 - LMT 1880 1 E CE%sT 1999 O 31 1u 2 - EET 2003 2 E EE%sT -R LX 1916 o - May 14 23 1 S -R LX 1916 o - O 1 1 0 - -R LX 1917 o - Ap 28 23 1 S -R LX 1917 o - S 17 1 0 - -R LX 1918 o - Ap M>=15 2s 1 S -R LX 1918 o - S M>=15 2s 0 - -R LX 1919 o - Mar 1 23 1 S -R LX 1919 o - O 5 3 0 - -R LX 1920 o - F 14 23 1 S -R LX 1920 o - O 24 2 0 - -R LX 1921 o - Mar 14 23 1 S -R LX 1921 o - O 26 2 0 - -R LX 1922 o - Mar 25 23 1 S -R LX 1922 o - O Su>=2 1 0 - -R LX 1923 o - Ap 21 23 1 S -R LX 1923 o - O Su>=2 2 0 - -R LX 1924 o - Mar 29 23 1 S -R LX 1924 1928 - O Su>=2 1 0 - -R LX 1925 o - Ap 5 23 1 S -R LX 1926 o - Ap 17 23 1 S -R LX 1927 o - Ap 9 23 1 S -R LX 1928 o - Ap 14 23 1 S -R LX 1929 o - Ap 20 23 1 S -Z Europe/Luxembourg 0:24:36 - LMT 1904 Jun -1 LX CE%sT 1918 N 25 -0 LX WE%sT 1929 O 6 2s -0 b WE%sT 1940 May 14 3 -1 c WE%sT 1944 S 18 3 -1 b CE%sT 1977 -1 E CE%sT R MT 1973 o - Mar 31 0s 1 S R MT 1973 o - S 29 0s 0 - R MT 1974 o - Ap 21 0s 1 S @@ -2218,7 +1983,7 @@ R MT 1974 o - S 16 0s 0 - R MT 1975 1979 - Ap Su>=15 2 1 S R MT 1975 1980 - S Su>=15 2 0 - R MT 1980 o - Mar 31 2 1 S -Z Europe/Malta 0:58:4 - LMT 1893 N 2 0s +Z Europe/Malta 0:58:4 - LMT 1893 N 2 1 I CE%sT 1973 Mar 31 1 MT CE%sT 1981 1 E CE%sT @@ -2234,50 +1999,6 @@ Z Europe/Chisinau 1:55:20 - LMT 1880 2 R EE%sT 1992 2 e EE%sT 1997 2 MD EE%sT -Z Europe/Monaco 0:29:32 - LMT 1892 Jun -0:9:21 - PMT 1911 Mar 29 -0 F WE%sT 1945 S 16 3 -1 F CE%sT 1977 -1 E CE%sT -R N 1916 o - May 1 0 1 NST -R N 1916 o - O 1 0 0 AMT -R N 1917 o - Ap 16 2s 1 NST -R N 1917 o - S 17 2s 0 AMT -R N 1918 1921 - Ap M>=1 2s 1 NST -R N 1918 1921 - S lastM 2s 0 AMT -R N 1922 o - Mar lastSu 2s 1 NST -R N 1922 1936 - O Su>=2 2s 0 AMT -R N 1923 o - Jun F>=1 2s 1 NST -R N 1924 o - Mar lastSu 2s 1 NST -R N 1925 o - Jun F>=1 2s 1 NST -R N 1926 1931 - May 15 2s 1 NST -R N 1932 o - May 22 2s 1 NST -R N 1933 1936 - May 15 2s 1 NST -R N 1937 o - May 22 2s 1 NST -R N 1937 o - Jul 1 0 1 S -R N 1937 1939 - O Su>=2 2s 0 - -R N 1938 1939 - May 15 2s 1 S -R N 1945 o - Ap 2 2s 1 S -R N 1945 o - S 16 2s 0 - -Z Europe/Amsterdam 0:19:32 - LMT 1835 -0:19:32 N %s 1937 Jul -0:20 N +0020/+0120 1940 May 16 -1 c CE%sT 1945 Ap 2 2 -1 N CE%sT 1977 -1 E CE%sT -R NO 1916 o - May 22 1 1 S -R NO 1916 o - S 30 0 0 - -R NO 1945 o - Ap 2 2s 1 S -R NO 1945 o - O 1 2s 0 - -R NO 1959 1964 - Mar Su>=15 2s 1 S -R NO 1959 1965 - S Su>=15 2s 0 - -R NO 1965 o - Ap 25 2s 1 S -Z Europe/Oslo 0:43 - LMT 1895 -1 NO CE%sT 1940 Au 10 23 -1 c CE%sT 1945 Ap 2 2 -1 NO CE%sT 1980 -1 E CE%sT -L Europe/Oslo Arctic/Longyearbyen R O 1918 1919 - S 16 2s 0 - R O 1919 o - Ap 15 2s 1 S R O 1944 o - Ap 3 2s 1 S @@ -2434,9 +2155,8 @@ Z Europe/Simferopol 2:16:24 - LMT 1880 3 - MSK 1990 Jul 1 2 2 - EET 1992 Mar 20 2 c EE%sT 1994 May -3 e MSK/MSD 1996 Mar 31 0s +3 c MSK/MSD 1996 Mar 31 0s 3 1 MSD 1996 O 27 3s -3 R MSK/MSD 1997 3 - MSK 1997 Mar lastSu 1u 2 E EE%sT 2014 Mar 30 2 4 - MSK 2014 O 26 2s @@ -2647,12 +2367,6 @@ Z Europe/Belgrade 1:22 - LMT 1884 1 1 CEST 1945 S 16 2s 1 - CET 1982 N 27 1 E CE%sT -L Europe/Belgrade Europe/Ljubljana -L Europe/Belgrade Europe/Podgorica -L Europe/Belgrade Europe/Sarajevo -L Europe/Belgrade Europe/Skopje -L Europe/Belgrade Europe/Zagreb -L Europe/Prague Europe/Bratislava R s 1918 o - Ap 15 23 1 S R s 1918 1919 - O 6 24s 0 - R s 1919 o - Ap 6 23 1 S @@ -2692,11 +2406,11 @@ R Sp 1976 o - Au 1 0 0 - R Sp 1977 o - S 28 0 0 - R Sp 1978 o - Jun 1 0 1 S R Sp 1978 o - Au 4 0 0 - -Z Europe/Madrid -0:14:44 - LMT 1900 D 31 23:45:16 +Z Europe/Madrid -0:14:44 - LMT 1901 Ja 1 0u 0 s WE%sT 1940 Mar 16 23 1 s CE%sT 1979 1 E CE%sT -Z Africa/Ceuta -0:21:16 - LMT 1900 D 31 23:38:44 +Z Africa/Ceuta -0:21:16 - LMT 1901 Ja 1 0u 0 - WET 1918 May 6 23 0 1 WEST 1918 O 7 23 0 - WET 1924 @@ -2710,12 +2424,6 @@ Z Atlantic/Canary -1:1:36 - LMT 1922 Mar 0 - WET 1980 Ap 6 0s 0 1 WEST 1980 S 28 1u 0 E WE%sT -Z Europe/Stockholm 1:12:12 - LMT 1879 -1:0:14 - SET 1900 -1 - CET 1916 May 14 23 -1 1 CEST 1916 O 1 1 -1 - CET 1980 -1 E CE%sT R CH 1941 1942 - May M>=1 1 1 S R CH 1941 1942 - O M>=1 2 0 - Z Europe/Zurich 0:34:8 - LMT 1853 Jul 16 @@ -2780,8 +2488,7 @@ Z Europe/Istanbul 1:55:52 - LMT 1880 2 1 EEST 2015 N 8 1u 2 E EE%sT 2016 S 7 3 - +03 -L Europe/Istanbul Asia/Istanbul -Z Europe/Kiev 2:2:4 - LMT 1880 +Z Europe/Kyiv 2:2:4 - LMT 1880 2:2:4 - KMT 1924 May 2 2 - EET 1930 Jun 21 3 - MSK 1941 S 20 @@ -2790,26 +2497,6 @@ Z Europe/Kiev 2:2:4 - LMT 1880 2 1 EEST 1991 S 29 3 2 c EE%sT 1996 May 13 2 E EE%sT -Z Europe/Uzhgorod 1:29:12 - LMT 1890 O -1 - CET 1940 -1 c CE%sT 1944 O -1 1 CEST 1944 O 26 -1 - CET 1945 Jun 29 -3 R MSK/MSD 1990 -3 - MSK 1990 Jul 1 2 -1 - CET 1991 Mar 31 3 -2 - EET 1992 Mar 20 -2 c EE%sT 1996 May 13 -2 E EE%sT -Z Europe/Zaporozhye 2:20:40 - LMT 1880 -2:20 - +0220 1924 May 2 -2 - EET 1930 Jun 21 -3 - MSK 1941 Au 25 -1 c CE%sT 1943 O 25 -3 R MSK/MSD 1991 Mar 31 2 -2 e EE%sT 1992 Mar 20 -2 c EE%sT 1996 May 13 -2 E EE%sT R u 1918 1919 - Mar lastSu 2 1 D R u 1918 1919 - O lastSu 2 0 S R u 1942 o - F 9 2 1 W @@ -2835,7 +2522,7 @@ R NY 1920 o - O lastSu 2 0 S R NY 1921 1966 - Ap lastSu 2 1 D R NY 1921 1954 - S lastSu 2 0 S R NY 1955 1966 - O lastSu 2 0 S -Z America/New_York -4:56:2 - LMT 1883 N 18 12:3:58 +Z America/New_York -4:56:2 - LMT 1883 N 18 17u -5 u E%sT 1920 -5 NY E%sT 1942 -5 u E%sT 1946 @@ -2847,7 +2534,7 @@ R Ch 1921 o - Mar lastSu 2 1 D R Ch 1922 1966 - Ap lastSu 2 1 D R Ch 1922 1954 - S lastSu 2 0 S R Ch 1955 1966 - O lastSu 2 0 S -Z America/Chicago -5:50:36 - LMT 1883 N 18 12:9:24 +Z America/Chicago -5:50:36 - LMT 1883 N 18 18u -6 u C%sT 1920 -6 Ch C%sT 1936 Mar 1 2 -5 - EST 1936 N 15 2 @@ -2855,13 +2542,13 @@ Z America/Chicago -5:50:36 - LMT 1883 N 18 12:9:24 -6 u C%sT 1946 -6 Ch C%sT 1967 -6 u C%sT -Z America/North_Dakota/Center -6:45:12 - LMT 1883 N 18 12:14:48 +Z America/North_Dakota/Center -6:45:12 - LMT 1883 N 18 19u -7 u M%sT 1992 O 25 2 -6 u C%sT -Z America/North_Dakota/New_Salem -6:45:39 - LMT 1883 N 18 12:14:21 +Z America/North_Dakota/New_Salem -6:45:39 - LMT 1883 N 18 19u -7 u M%sT 2003 O 26 2 -6 u C%sT -Z America/North_Dakota/Beulah -6:47:7 - LMT 1883 N 18 12:12:53 +Z America/North_Dakota/Beulah -6:47:7 - LMT 1883 N 18 19u -7 u M%sT 2010 N 7 2 -6 u C%sT R De 1920 1921 - Mar lastSu 2 1 D @@ -2869,7 +2556,7 @@ R De 1920 o - O lastSu 2 0 S R De 1921 o - May 22 2 0 S R De 1965 1966 - Ap lastSu 2 1 D R De 1965 1966 - O lastSu 2 0 S -Z America/Denver -6:59:56 - LMT 1883 N 18 12:0:4 +Z America/Denver -6:59:56 - LMT 1883 N 18 19u -7 u M%sT 1920 -7 De M%sT 1942 -7 u M%sT 1946 @@ -2880,7 +2567,7 @@ R CA 1949 o - Ja 1 2 0 S R CA 1950 1966 - Ap lastSu 1 1 D R CA 1950 1961 - S lastSu 2 0 S R CA 1962 1966 - O lastSu 2 0 S -Z America/Los_Angeles -7:52:58 - LMT 1883 N 18 12:7:2 +Z America/Los_Angeles -7:52:58 - LMT 1883 N 18 20u -8 u P%sT 1946 -8 CA P%sT 1967 -8 u P%sT @@ -2950,15 +2637,14 @@ Z Pacific/Honolulu -10:31:26 - LMT 1896 Ja 13 12 -10:30 1 HDT 1933 May 21 12 -10:30 u H%sT 1947 Jun 8 2 -10 - HST -Z America/Phoenix -7:28:18 - LMT 1883 N 18 11:31:42 +Z America/Phoenix -7:28:18 - LMT 1883 N 18 19u -7 u M%sT 1944 Ja 1 0:1 -7 - MST 1944 Ap 1 0:1 -7 u M%sT 1944 O 1 0:1 -7 - MST 1967 -7 u M%sT 1968 Mar 21 -7 - MST -L America/Phoenix America/Creston -Z America/Boise -7:44:49 - LMT 1883 N 18 12:15:11 +Z America/Boise -7:44:49 - LMT 1883 N 18 20u -8 u P%sT 1923 May 13 2 -7 u M%sT 1974 -7 - MST 1974 F 3 2 @@ -2966,7 +2652,7 @@ Z America/Boise -7:44:49 - LMT 1883 N 18 12:15:11 R In 1941 o - Jun 22 2 1 D R In 1941 1954 - S lastSu 2 0 S R In 1946 1954 - Ap lastSu 2 1 D -Z America/Indiana/Indianapolis -5:44:38 - LMT 1883 N 18 12:15:22 +Z America/Indiana/Indianapolis -5:44:38 - LMT 1883 N 18 18u -6 u C%sT 1920 -6 In C%sT 1942 -6 u C%sT 1946 @@ -2981,7 +2667,7 @@ R Ma 1951 o - Ap lastSu 2 1 D R Ma 1951 o - S lastSu 2 0 S R Ma 1954 1960 - Ap lastSu 2 1 D R Ma 1954 1960 - S lastSu 2 0 S -Z America/Indiana/Marengo -5:45:23 - LMT 1883 N 18 12:14:37 +Z America/Indiana/Marengo -5:45:23 - LMT 1883 N 18 18u -6 u C%sT 1951 -6 Ma C%sT 1961 Ap 30 2 -5 - EST 1969 @@ -2999,7 +2685,7 @@ R V 1956 1963 - Ap lastSu 2 1 D R V 1960 o - O lastSu 2 0 S R V 1961 o - S lastSu 2 0 S R V 1962 1963 - O lastSu 2 0 S -Z America/Indiana/Vincennes -5:50:7 - LMT 1883 N 18 12:9:53 +Z America/Indiana/Vincennes -5:50:7 - LMT 1883 N 18 18u -6 u C%sT 1946 -6 V C%sT 1964 Ap 26 2 -5 - EST 1969 @@ -3011,7 +2697,7 @@ R Pe 1955 o - May 1 0 1 D R Pe 1955 1960 - S lastSu 2 0 S R Pe 1956 1963 - Ap lastSu 2 1 D R Pe 1961 1963 - O lastSu 2 0 S -Z America/Indiana/Tell_City -5:47:3 - LMT 1883 N 18 12:12:57 +Z America/Indiana/Tell_City -5:47:3 - LMT 1883 N 18 18u -6 u C%sT 1946 -6 Pe C%sT 1964 Ap 26 2 -5 - EST 1967 O 29 2 @@ -3023,7 +2709,7 @@ R Pi 1955 o - May 1 0 1 D R Pi 1955 1960 - S lastSu 2 0 S R Pi 1956 1964 - Ap lastSu 2 1 D R Pi 1961 1964 - O lastSu 2 0 S -Z America/Indiana/Petersburg -5:49:7 - LMT 1883 N 18 12:10:53 +Z America/Indiana/Petersburg -5:49:7 - LMT 1883 N 18 18u -6 u C%sT 1955 -6 Pi C%sT 1965 Ap 25 2 -5 - EST 1966 O 30 2 @@ -3036,7 +2722,7 @@ R St 1947 1954 - S lastSu 2 0 S R St 1955 1956 - O lastSu 2 0 S R St 1957 1958 - S lastSu 2 0 S R St 1959 1961 - O lastSu 2 0 S -Z America/Indiana/Knox -5:46:30 - LMT 1883 N 18 12:13:30 +Z America/Indiana/Knox -5:46:30 - LMT 1883 N 18 18u -6 u C%sT 1947 -6 St C%sT 1962 Ap 29 2 -5 - EST 1963 O 27 2 @@ -3047,7 +2733,7 @@ R Pu 1946 1960 - Ap lastSu 2 1 D R Pu 1946 1954 - S lastSu 2 0 S R Pu 1955 1956 - O lastSu 2 0 S R Pu 1957 1960 - S lastSu 2 0 S -Z America/Indiana/Winamac -5:46:25 - LMT 1883 N 18 12:13:35 +Z America/Indiana/Winamac -5:46:25 - LMT 1883 N 18 18u -6 u C%sT 1946 -6 Pu C%sT 1961 Ap 30 2 -5 - EST 1969 @@ -3055,7 +2741,7 @@ Z America/Indiana/Winamac -5:46:25 - LMT 1883 N 18 12:13:35 -5 - EST 2006 Ap 2 2 -6 u C%sT 2007 Mar 11 2 -5 u E%sT -Z America/Indiana/Vevay -5:40:16 - LMT 1883 N 18 12:19:44 +Z America/Indiana/Vevay -5:40:16 - LMT 1883 N 18 18u -6 u C%sT 1954 Ap 25 2 -5 - EST 1969 -5 u E%sT 1973 @@ -3070,7 +2756,7 @@ R v 1946 o - Jun 2 2 0 S R v 1950 1961 - Ap lastSu 2 1 D R v 1950 1955 - S lastSu 2 0 S R v 1956 1961 - O lastSu 2 0 S -Z America/Kentucky/Louisville -5:43:2 - LMT 1883 N 18 12:16:58 +Z America/Kentucky/Louisville -5:43:2 - LMT 1883 N 18 18u -6 u C%sT 1921 -6 v C%sT 1942 -6 u C%sT 1946 @@ -3079,7 +2765,7 @@ Z America/Kentucky/Louisville -5:43:2 - LMT 1883 N 18 12:16:58 -5 u E%sT 1974 Ja 6 2 -6 1 CDT 1974 O 27 2 -5 u E%sT -Z America/Kentucky/Monticello -5:39:24 - LMT 1883 N 18 12:20:36 +Z America/Kentucky/Monticello -5:39:24 - LMT 1883 N 18 18u -6 u C%sT 1946 -6 - CST 1968 -6 u C%sT 2000 O 29 2 @@ -3256,22 +2942,6 @@ Z America/Toronto -5:17:32 - LMT 1895 -5 C E%sT 1946 -5 t E%sT 1974 -5 C E%sT -L America/Toronto America/Nassau -Z America/Thunder_Bay -5:57 - LMT 1895 --6 - CST 1910 --5 - EST 1942 --5 C E%sT 1970 --5 t E%sT 1973 --5 - EST 1974 --5 C E%sT -Z America/Nipigon -5:53:4 - LMT 1895 --5 C E%sT 1940 S 29 --5 1 EDT 1942 F 9 2s --5 C E%sT -Z America/Rainy_River -6:18:16 - LMT 1895 --6 C C%sT 1940 S 29 --6 1 CDT 1942 F 9 2s --6 C C%sT R W 1916 o - Ap 23 0 1 D R W 1916 o - S 17 0 0 S R W 1918 o - Ap 14 2 1 D @@ -3421,6 +3091,8 @@ Z America/Dawson -9:17:40 - LMT 1900 Au 20 -8 Y P%sT 1980 -8 C P%sT 2020 N -7 - MST +R m 1931 o - May 1 23 1 D +R m 1931 o - O 1 0 0 S R m 1939 o - F 5 0 1 D R m 1939 o - Jun 25 0 0 S R m 1940 o - D 9 0 1 D @@ -3433,89 +3105,79 @@ R m 1996 2000 - Ap Su>=1 2 1 D R m 1996 2000 - O lastSu 2 0 S R m 2001 o - May Su>=1 2 1 D R m 2001 o - S lastSu 2 0 S -R m 2002 ma - Ap Su>=1 2 1 D -R m 2002 ma - O lastSu 2 0 S -Z America/Cancun -5:47:4 - LMT 1922 Ja 1 0:12:56 +R m 2002 2022 - Ap Su>=1 2 1 D +R m 2002 2022 - O lastSu 2 0 S +Z America/Cancun -5:47:4 - LMT 1922 Ja 1 6u -6 - CST 1981 D 23 -5 m E%sT 1998 Au 2 2 -6 m C%sT 2015 F 1 2 -5 - EST -Z America/Merida -5:58:28 - LMT 1922 Ja 1 0:1:32 +Z America/Merida -5:58:28 - LMT 1922 Ja 1 6u -6 - CST 1981 D 23 -5 - EST 1982 D 2 -6 m C%sT -Z America/Matamoros -6:40 - LMT 1921 D 31 23:20 +Z America/Matamoros -6:30 - LMT 1922 Ja 1 6u -6 - CST 1988 -6 u C%sT 1989 -6 m C%sT 2010 -6 u C%sT -Z America/Monterrey -6:41:16 - LMT 1921 D 31 23:18:44 +Z America/Monterrey -6:41:16 - LMT 1922 Ja 1 6u -6 - CST 1988 -6 u C%sT 1989 -6 m C%sT -Z America/Mexico_City -6:36:36 - LMT 1922 Ja 1 0:23:24 +Z America/Mexico_City -6:36:36 - LMT 1922 Ja 1 7u -7 - MST 1927 Jun 10 23 -6 - CST 1930 N 15 --7 - MST 1931 May 1 23 --6 - CST 1931 O --7 - MST 1932 Ap +-7 m M%sT 1932 Ap -6 m C%sT 2001 S 30 2 -6 - CST 2002 F 20 -6 m C%sT -Z America/Ojinaga -6:57:40 - LMT 1922 Ja 1 0:2:20 +Z America/Ojinaga -6:57:40 - LMT 1922 Ja 1 7u -7 - MST 1927 Jun 10 23 -6 - CST 1930 N 15 --7 - MST 1931 May 1 23 --6 - CST 1931 O --7 - MST 1932 Ap +-7 m M%sT 1932 Ap -6 - CST 1996 -6 m C%sT 1998 -6 - CST 1998 Ap Su>=1 3 -7 m M%sT 2010 --7 u M%sT -Z America/Chihuahua -7:4:20 - LMT 1921 D 31 23:55:40 +-7 u M%sT 2022 O 30 2 +-6 - CST +Z America/Chihuahua -7:4:20 - LMT 1922 Ja 1 7u -7 - MST 1927 Jun 10 23 -6 - CST 1930 N 15 --7 - MST 1931 May 1 23 --6 - CST 1931 O --7 - MST 1932 Ap +-7 m M%sT 1932 Ap -6 - CST 1996 -6 m C%sT 1998 -6 - CST 1998 Ap Su>=1 3 --7 m M%sT -Z America/Hermosillo -7:23:52 - LMT 1921 D 31 23:36:8 +-7 m M%sT 2022 O 30 2 +-6 - CST +Z America/Hermosillo -7:23:52 - LMT 1922 Ja 1 7u -7 - MST 1927 Jun 10 23 -6 - CST 1930 N 15 --7 - MST 1931 May 1 23 --6 - CST 1931 O --7 - MST 1932 Ap +-7 m M%sT 1932 Ap -6 - CST 1942 Ap 24 -7 - MST 1949 Ja 14 -8 - PST 1970 -7 m M%sT 1999 -7 - MST -Z America/Mazatlan -7:5:40 - LMT 1921 D 31 23:54:20 +Z America/Mazatlan -7:5:40 - LMT 1922 Ja 1 7u -7 - MST 1927 Jun 10 23 -6 - CST 1930 N 15 --7 - MST 1931 May 1 23 --6 - CST 1931 O --7 - MST 1932 Ap +-7 m M%sT 1932 Ap -6 - CST 1942 Ap 24 -7 - MST 1949 Ja 14 -8 - PST 1970 -7 m M%sT -Z America/Bahia_Banderas -7:1 - LMT 1921 D 31 23:59 +Z America/Bahia_Banderas -7:1 - LMT 1922 Ja 1 7u -7 - MST 1927 Jun 10 23 -6 - CST 1930 N 15 --7 - MST 1931 May 1 23 --6 - CST 1931 O --7 - MST 1932 Ap +-7 m M%sT 1932 Ap -6 - CST 1942 Ap 24 -7 - MST 1949 Ja 14 -8 - PST 1970 -7 m M%sT 2010 Ap 4 2 -6 m C%sT -Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 0:11:56 +Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 7u -7 - MST 1924 -8 - PST 1927 Jun 10 23 -7 - MST 1930 N 15 @@ -3707,31 +3369,10 @@ Z America/Managua -5:45:8 - LMT 1890 Z America/Panama -5:18:8 - LMT 1890 -5:19:36 - CMT 1908 Ap 22 -5 - EST -L America/Panama America/Atikokan -L America/Panama America/Cayman Z America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12 -4 - AST 1942 May 3 -4 u A%sT 1946 -4 - AST -L America/Puerto_Rico America/Anguilla -L America/Puerto_Rico America/Antigua -L America/Puerto_Rico America/Aruba -L America/Puerto_Rico America/Curacao -L America/Puerto_Rico America/Blanc-Sablon -L America/Puerto_Rico America/Dominica -L America/Puerto_Rico America/Grenada -L America/Puerto_Rico America/Guadeloupe -L America/Puerto_Rico America/Kralendijk -L America/Puerto_Rico America/Lower_Princes -L America/Puerto_Rico America/Marigot -L America/Puerto_Rico America/Montserrat -L America/Puerto_Rico America/Port_of_Spain -L America/Puerto_Rico America/St_Barthelemy -L America/Puerto_Rico America/St_Kitts -L America/Puerto_Rico America/St_Lucia -L America/Puerto_Rico America/St_Thomas -L America/Puerto_Rico America/St_Vincent -L America/Puerto_Rico America/Tortola Z America/Miquelon -3:44:40 - LMT 1911 May 15 -4 - AST 1980 May -3 - -03 1987 @@ -4089,7 +3730,9 @@ R x 2012 2014 - S Su>=2 4u 1 - R x 2016 2018 - May Su>=9 3u 0 - R x 2016 2018 - Au Su>=9 4u 1 - R x 2019 ma - Ap Su>=2 3u 0 - -R x 2019 ma - S Su>=2 4u 1 - +R x 2019 2021 - S Su>=2 4u 1 - +R x 2022 o - S Su>=9 4u 1 - +R x 2023 ma - S Su>=2 4u 1 - Z America/Santiago -4:42:45 - LMT 1890 -4:42:45 - SMT 1910 Ja 10 -5 - -05 1916 Jul @@ -4099,9 +3742,9 @@ Z America/Santiago -4:42:45 - LMT 1890 -5 x -05/-04 1932 S -4 - -04 1942 Jun -5 - -05 1942 Au --4 - -04 1946 Jul 15 --4 1 -03 1946 S --4 - -04 1947 Ap +-4 - -04 1946 Jul 14 24 +-4 1 -03 1946 Au 28 24 +-5 1 -04 1947 Mar 31 24 -5 - -05 1947 May 21 23 -4 x -04/-03 Z America/Punta_Arenas -4:43:40 - LMT 1890 @@ -4113,7 +3756,8 @@ Z America/Punta_Arenas -4:43:40 - LMT 1890 -5 x -05/-04 1932 S -4 - -04 1942 Jun -5 - -05 1942 Au --4 - -04 1947 Ap +-4 - -04 1946 Au 28 24 +-5 1 -04 1947 Mar 31 24 -5 - -05 1947 May 21 23 -4 x -04/-03 2016 D 4 -3 - -03 @@ -4277,15 +3921,9 @@ Z America/Caracas -4:27:44 - LMT 1890 -4 - -04 2007 D 9 3 -4:30 - -0430 2016 May 1 2:30 -4 - -04 -Z Etc/GMT 0 - GMT Z Etc/UTC 0 - UTC +Z Etc/GMT 0 - GMT L Etc/GMT GMT -L Etc/UTC Etc/Universal -L Etc/UTC Etc/Zulu -L Etc/GMT Etc/Greenwich -L Etc/GMT Etc/GMT-0 -L Etc/GMT Etc/GMT+0 -L Etc/GMT Etc/GMT0 Z Etc/GMT-14 14 - +14 Z Etc/GMT-13 13 - +13 Z Etc/GMT-12 12 - +12 @@ -4313,49 +3951,7 @@ Z Etc/GMT+10 -10 - -10 Z Etc/GMT+11 -11 - -11 Z Etc/GMT+12 -12 - -12 Z Factory 0 - -00 -L Africa/Nairobi Africa/Asmera -L Africa/Abidjan Africa/Timbuktu -L America/Argentina/Catamarca America/Argentina/ComodRivadavia -L America/Adak America/Atka -L America/Argentina/Buenos_Aires America/Buenos_Aires -L America/Argentina/Catamarca America/Catamarca -L America/Panama America/Coral_Harbour -L America/Argentina/Cordoba America/Cordoba -L America/Tijuana America/Ensenada -L America/Indiana/Indianapolis America/Fort_Wayne -L America/Nuuk America/Godthab -L America/Indiana/Indianapolis America/Indianapolis -L America/Argentina/Jujuy America/Jujuy -L America/Indiana/Knox America/Knox_IN -L America/Kentucky/Louisville America/Louisville -L America/Argentina/Mendoza America/Mendoza -L America/Toronto America/Montreal -L America/Rio_Branco America/Porto_Acre -L America/Argentina/Cordoba America/Rosario -L America/Tijuana America/Santa_Isabel -L America/Denver America/Shiprock -L America/Puerto_Rico America/Virgin -L Pacific/Auckland Antarctica/South_Pole -L Asia/Ashgabat Asia/Ashkhabad -L Asia/Kolkata Asia/Calcutta -L Asia/Shanghai Asia/Chongqing -L Asia/Shanghai Asia/Chungking -L Asia/Dhaka Asia/Dacca -L Asia/Shanghai Asia/Harbin -L Asia/Urumqi Asia/Kashgar -L Asia/Kathmandu Asia/Katmandu -L Asia/Macau Asia/Macao -L Asia/Yangon Asia/Rangoon -L Asia/Ho_Chi_Minh Asia/Saigon -L Asia/Jerusalem Asia/Tel_Aviv -L Asia/Thimphu Asia/Thimbu -L Asia/Makassar Asia/Ujung_Pandang -L Asia/Ulaanbaatar Asia/Ulan_Bator -L Atlantic/Faroe Atlantic/Faeroe -L Europe/Oslo Atlantic/Jan_Mayen L Australia/Sydney Australia/ACT -L Australia/Sydney Australia/Canberra -L Australia/Hobart Australia/Currie L Australia/Lord_Howe Australia/LHI L Australia/Sydney Australia/NSW L Australia/Darwin Australia/North @@ -4382,9 +3978,13 @@ L Pacific/Easter Chile/EasterIsland L America/Havana Cuba L Africa/Cairo Egypt L Europe/Dublin Eire +L Etc/GMT Etc/GMT+0 +L Etc/GMT Etc/GMT-0 +L Etc/GMT Etc/GMT0 +L Etc/GMT Etc/Greenwich L Etc/UTC Etc/UCT -L Europe/London Europe/Belfast -L Europe/Chisinau Europe/Tiraspol +L Etc/UTC Etc/Universal +L Etc/UTC Etc/Zulu L Europe/London GB L Europe/London GB-Eire L Etc/GMT GMT+0 @@ -4392,7 +3992,7 @@ L Etc/GMT GMT-0 L Etc/GMT GMT0 L Etc/GMT Greenwich L Asia/Hong_Kong Hongkong -L Atlantic/Reykjavik Iceland +L Africa/Abidjan Iceland L Asia/Tehran Iran L Asia/Jerusalem Israel L America/Jamaica Jamaica @@ -4406,12 +4006,6 @@ L Pacific/Auckland NZ L Pacific/Chatham NZ-CHAT L America/Denver Navajo L Asia/Shanghai PRC -L Pacific/Kanton Pacific/Enderbury -L Pacific/Honolulu Pacific/Johnston -L Pacific/Pohnpei Pacific/Ponape -L Pacific/Pago_Pago Pacific/Samoa -L Pacific/Chuuk Pacific/Truk -L Pacific/Chuuk Pacific/Yap L Europe/Warsaw Poland L Europe/Lisbon Portugal L Asia/Taipei ROC @@ -4435,3 +4029,168 @@ L Etc/UTC UTC L Etc/UTC Universal L Europe/Moscow W-SU L Etc/UTC Zulu +L America/Argentina/Buenos_Aires America/Buenos_Aires +L America/Argentina/Catamarca America/Catamarca +L America/Argentina/Cordoba America/Cordoba +L America/Indiana/Indianapolis America/Indianapolis +L America/Argentina/Jujuy America/Jujuy +L America/Indiana/Knox America/Knox_IN +L America/Kentucky/Louisville America/Louisville +L America/Argentina/Mendoza America/Mendoza +L America/Puerto_Rico America/Virgin +L Pacific/Pago_Pago Pacific/Samoa +L Africa/Abidjan Africa/Accra +L Africa/Nairobi Africa/Addis_Ababa +L Africa/Nairobi Africa/Asmara +L Africa/Abidjan Africa/Bamako +L Africa/Lagos Africa/Bangui +L Africa/Abidjan Africa/Banjul +L Africa/Maputo Africa/Blantyre +L Africa/Lagos Africa/Brazzaville +L Africa/Maputo Africa/Bujumbura +L Africa/Abidjan Africa/Conakry +L Africa/Abidjan Africa/Dakar +L Africa/Nairobi Africa/Dar_es_Salaam +L Africa/Nairobi Africa/Djibouti +L Africa/Lagos Africa/Douala +L Africa/Abidjan Africa/Freetown +L Africa/Maputo Africa/Gaborone +L Africa/Maputo Africa/Harare +L Africa/Nairobi Africa/Kampala +L Africa/Maputo Africa/Kigali +L Africa/Lagos Africa/Kinshasa +L Africa/Lagos Africa/Libreville +L Africa/Abidjan Africa/Lome +L Africa/Lagos Africa/Luanda +L Africa/Maputo Africa/Lubumbashi +L Africa/Maputo Africa/Lusaka +L Africa/Lagos Africa/Malabo +L Africa/Johannesburg Africa/Maseru +L Africa/Johannesburg Africa/Mbabane +L Africa/Nairobi Africa/Mogadishu +L Africa/Lagos Africa/Niamey +L Africa/Abidjan Africa/Nouakchott +L Africa/Abidjan Africa/Ouagadougou +L Africa/Lagos Africa/Porto-Novo +L America/Puerto_Rico America/Anguilla +L America/Puerto_Rico America/Antigua +L America/Puerto_Rico America/Aruba +L America/Panama America/Atikokan +L America/Puerto_Rico America/Blanc-Sablon +L America/Panama America/Cayman +L America/Phoenix America/Creston +L America/Puerto_Rico America/Curacao +L America/Puerto_Rico America/Dominica +L America/Puerto_Rico America/Grenada +L America/Puerto_Rico America/Guadeloupe +L America/Puerto_Rico America/Kralendijk +L America/Puerto_Rico America/Lower_Princes +L America/Puerto_Rico America/Marigot +L America/Puerto_Rico America/Montserrat +L America/Toronto America/Nassau +L America/Puerto_Rico America/Port_of_Spain +L America/Puerto_Rico America/St_Barthelemy +L America/Puerto_Rico America/St_Kitts +L America/Puerto_Rico America/St_Lucia +L America/Puerto_Rico America/St_Thomas +L America/Puerto_Rico America/St_Vincent +L America/Puerto_Rico America/Tortola +L Pacific/Port_Moresby Antarctica/DumontDUrville +L Pacific/Auckland Antarctica/McMurdo +L Asia/Riyadh Antarctica/Syowa +L Asia/Urumqi Antarctica/Vostok +L Europe/Berlin Arctic/Longyearbyen +L Asia/Riyadh Asia/Aden +L Asia/Qatar Asia/Bahrain +L Asia/Kuching Asia/Brunei +L Asia/Singapore Asia/Kuala_Lumpur +L Asia/Riyadh Asia/Kuwait +L Asia/Dubai Asia/Muscat +L Asia/Bangkok Asia/Phnom_Penh +L Asia/Bangkok Asia/Vientiane +L Africa/Abidjan Atlantic/Reykjavik +L Africa/Abidjan Atlantic/St_Helena +L Europe/Brussels Europe/Amsterdam +L Europe/Prague Europe/Bratislava +L Europe/Zurich Europe/Busingen +L Europe/Berlin Europe/Copenhagen +L Europe/London Europe/Guernsey +L Europe/London Europe/Isle_of_Man +L Europe/London Europe/Jersey +L Europe/Belgrade Europe/Ljubljana +L Europe/Brussels Europe/Luxembourg +L Europe/Helsinki Europe/Mariehamn +L Europe/Paris Europe/Monaco +L Europe/Berlin Europe/Oslo +L Europe/Belgrade Europe/Podgorica +L Europe/Rome Europe/San_Marino +L Europe/Belgrade Europe/Sarajevo +L Europe/Belgrade Europe/Skopje +L Europe/Berlin Europe/Stockholm +L Europe/Zurich Europe/Vaduz +L Europe/Rome Europe/Vatican +L Europe/Belgrade Europe/Zagreb +L Africa/Nairobi Indian/Antananarivo +L Asia/Bangkok Indian/Christmas +L Asia/Yangon Indian/Cocos +L Africa/Nairobi Indian/Comoro +L Indian/Maldives Indian/Kerguelen +L Asia/Dubai Indian/Mahe +L Africa/Nairobi Indian/Mayotte +L Asia/Dubai Indian/Reunion +L Pacific/Port_Moresby Pacific/Chuuk +L Pacific/Tarawa Pacific/Funafuti +L Pacific/Tarawa Pacific/Majuro +L Pacific/Pago_Pago Pacific/Midway +L Pacific/Guadalcanal Pacific/Pohnpei +L Pacific/Guam Pacific/Saipan +L Pacific/Tarawa Pacific/Wake +L Pacific/Tarawa Pacific/Wallis +L Africa/Abidjan Africa/Timbuktu +L America/Argentina/Catamarca America/Argentina/ComodRivadavia +L America/Adak America/Atka +L America/Panama America/Coral_Harbour +L America/Tijuana America/Ensenada +L America/Indiana/Indianapolis America/Fort_Wayne +L America/Toronto America/Montreal +L America/Toronto America/Nipigon +L America/Rio_Branco America/Porto_Acre +L America/Winnipeg America/Rainy_River +L America/Argentina/Cordoba America/Rosario +L America/Tijuana America/Santa_Isabel +L America/Denver America/Shiprock +L America/Toronto America/Thunder_Bay +L Pacific/Auckland Antarctica/South_Pole +L Asia/Shanghai Asia/Chongqing +L Asia/Shanghai Asia/Harbin +L Asia/Urumqi Asia/Kashgar +L Asia/Jerusalem Asia/Tel_Aviv +L Europe/Berlin Atlantic/Jan_Mayen +L Australia/Sydney Australia/Canberra +L Australia/Hobart Australia/Currie +L Europe/London Europe/Belfast +L Europe/Chisinau Europe/Tiraspol +L Europe/Kyiv Europe/Uzhgorod +L Europe/Kyiv Europe/Zaporozhye +L Pacific/Kanton Pacific/Enderbury +L Pacific/Honolulu Pacific/Johnston +L Pacific/Port_Moresby Pacific/Yap +L Africa/Nairobi Africa/Asmera +L America/Nuuk America/Godthab +L Asia/Ashgabat Asia/Ashkhabad +L Asia/Kolkata Asia/Calcutta +L Asia/Shanghai Asia/Chungking +L Asia/Dhaka Asia/Dacca +L Europe/Istanbul Asia/Istanbul +L Asia/Kathmandu Asia/Katmandu +L Asia/Macau Asia/Macao +L Asia/Yangon Asia/Rangoon +L Asia/Ho_Chi_Minh Asia/Saigon +L Asia/Thimphu Asia/Thimbu +L Asia/Makassar Asia/Ujung_Pandang +L Asia/Ulaanbaatar Asia/Ulan_Bator +L Atlantic/Faroe Atlantic/Faeroe +L Europe/Kyiv Europe/Kiev +L Asia/Nicosia Europe/Nicosia +L Pacific/Guadalcanal Pacific/Ponape +L Pacific/Port_Moresby Pacific/Truk