diff --git a/NEWS b/NEWS index 5d9c8d240eadd..97b7205430c8f 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,85 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 8.3.1 +18 Jan 2024, PHP 8.3.2 + +- Core: + . Fixed bug GH-12953 (false positive SSA integrity verification failed when + loading composer classmaps with more than 11k elements). (nielsdos) + . Fixed bug GH-12999 (zend_strnlen build when strnlen is unsupported). + (rainerjung) + . Fixed bug GH-12966 (missing cross-compiling 3rd argument so Autoconf + doesn't emit warnings). (Peter Kokot) + . Fixed bug GH-12854 (8.3 - as final trait-used method does not correctly + report visibility in Reflection). (nielsdos) + +- Cli: + . Fix incorrect timeout in built-in web server when using router script and + max_input_time. (ilutov) + +- DOM: + . Fixed bug GH-12870 (Creating an xmlns attribute results in a DOMException). + (nielsdos) + . Fix crash when toggleAttribute() is used without a document. (nielsdos) + . Fix crash in adoptNode with attribute references. (nielsdos) + . Fixed bug GH-13012 (DOMNode::isEqualNode() is incorrect when attribute + order is different). (nielsdos) + +- FFI: + . Fixed bug GH-9698 (stream_wrapper_register crashes with FFI\CData). + (Jakub Zelenka) + . Fixed bug GH-12905 (FFI::new interacts badly with observers). (nielsdos) + +- Intl: + . Fixed GH-12943 (IntlDateFormatter::__construct accepts 'C' as valid locale). + (David Carlier) + +- Hash: + . Fixed bug GH-12936 (hash() function hangs endlessly if using sha512 on + strings >= 4GiB). (nielsdos) + +- ODBC: + . Fix crash on Apache shutdown with persistent connections. (nielsdos) + +- Opcache: + . Fixed oss-fuzz #64727 (JIT undefined array key warning may overwrite DIM + with NULL when DIM is the same var as result). (ilutov) + . Added workaround for SELinux mprotect execheap issue. + See https://bugzilla.kernel.org/show_bug.cgi?id=218258. (ilutov) + +- OpenSSL: + . Fixed bug GH-12987 (openssl_csr_sign might leak new cert on error). + (Jakub Zelenka) + +- PDO: + . Fix GH-12969 (Fixed PDO::getAttribute() to get PDO::ATTR_STRINGIFY_FETCHES). + (SakiTakamachi) + +- PDO_ODBC: + . Fixed bug GH-12767 (Unable to turn on autocommit mode with setAttribute()). + (SakiTakamachi) + +- PGSQL: + . Fixed auto_reset_persistent handling and allow_persistent type. (David Carlier) + . Fixed bug GH-12974 (Apache crashes on shutdown when using pg_pconnect()). + (nielsdos) + +- Phar: + . Fixed bug #77432 (Segmentation fault on including phar file). (nielsdos) + +- PHPDBG: + . Fixed bug GH-12962 (Double free of init_file in phpdbg_prompt.c). (nielsdos) + +- SimpleXML: + . Fix getting the address of an uninitialized property of a SimpleXMLElement + resulting in a crash. (nielsdos) + . Fixed bug GH-12929 (SimpleXMLElement with stream_wrapper_register can + segfault). (nielsdos) + +- Tidy: + . Fixed bug GH-12980 (tidynode.props.attribute is missing + "Boolean Attributes" and empty attributes). (nielsdos) + +07 Dec 2023, PHP 8.3.1RC1 - Core: . Fixed bug GH-12758 / GH-12768 (Invalid opline in OOM handlers within diff --git a/Zend/Optimizer/ssa_integrity.c b/Zend/Optimizer/ssa_integrity.c index d92fc2e18d1fc..b525f8d5ee226 100644 --- a/Zend/Optimizer/ssa_integrity.c +++ b/Zend/Optimizer/ssa_integrity.c @@ -122,7 +122,7 @@ void ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const char *ex /* Vars */ for (i = 0; i < ssa->vars_count; i++) { zend_ssa_var *var = &ssa->vars[i]; - int use, c; + int use; uint32_t type = ssa->var_info[i].type; if (var->definition < 0 && !var->definition_phi && i > op_array->last_var) { @@ -148,23 +148,45 @@ void ssa_verify_integrity(zend_op_array *op_array, zend_ssa *ssa, const char *ex } } - c = 0; - FOREACH_USE(var, use) { - if (++c > 10000) { + /* Floyd's cycle detection algorithm, applied for use chain. */ + use = var->use_chain; + int second_use = use; + while (use >= 0 && second_use >= 0) { + use = zend_ssa_next_use(ssa->ops, var - ssa->vars, use); + second_use = zend_ssa_next_use(ssa->ops, var - ssa->vars, second_use); + if (second_use < 0) { + break; + } + second_use = zend_ssa_next_use(ssa->ops, var - ssa->vars, second_use); + if (use == second_use) { FAIL("cycle in uses of " VARFMT "\n", VAR(i)); goto finish; } + } + + FOREACH_USE(var, use) { if (!is_used_by_op(ssa, use, i)) { fprintf(stderr, "var " VARFMT " not in uses of op %d\n", VAR(i), use); } } FOREACH_USE_END(); - c = 0; - FOREACH_PHI_USE(var, phi) { - if (++c > 10000) { + /* Floyd's cycle detection algorithm, applied for phi nodes. */ + phi = var->phi_use_chain; + zend_ssa_phi *second_phi = phi; + while (phi && second_phi) { + phi = zend_ssa_next_use_phi(ssa, var - ssa->vars, phi); + second_phi = zend_ssa_next_use_phi(ssa, var - ssa->vars, second_phi); + if (!second_phi) { + break; + } + second_phi = zend_ssa_next_use_phi(ssa, var - ssa->vars, second_phi); + if (phi == second_phi) { FAIL("cycle in phi uses of " VARFMT "\n", VAR(i)); goto finish; } + } + + FOREACH_PHI_USE(var, phi) { if (!is_in_phi_sources(ssa, phi, i)) { FAIL("var " VARFMT " not in phi sources of %d\n", VAR(i), phi->ssa_var); } diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index 6ca56d90276b2..f60f1f09a4b49 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -2828,8 +2828,15 @@ static zend_always_inline zend_result _zend_update_type_info( /* DOUBLE may be auto-converted to LONG */ tmp |= MAY_BE_LONG; tmp &= ~MAY_BE_DOUBLE; + } else if ((t1 & (MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING)) == MAY_BE_STRING + && (tmp & (MAY_BE_LONG|MAY_BE_DOUBLE))) { + /* LONG/DOUBLE may be auto-converted to STRING */ + tmp |= MAY_BE_STRING; + tmp &= ~(MAY_BE_LONG|MAY_BE_DOUBLE); } tmp &= t1; + } else { + tmp |= MAY_BE_LONG | MAY_BE_STRING; } } else if (opline->opcode == ZEND_ASSIGN_STATIC_PROP_OP) { /* The return value must also satisfy the property type */ @@ -2840,8 +2847,15 @@ static zend_always_inline zend_result _zend_update_type_info( /* DOUBLE may be auto-converted to LONG */ tmp |= MAY_BE_LONG; tmp &= ~MAY_BE_DOUBLE; + } else if ((t1 & (MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING)) == MAY_BE_STRING + && (tmp & (MAY_BE_LONG|MAY_BE_DOUBLE))) { + /* LONG/DOUBLE may be auto-converted to STRING */ + tmp |= MAY_BE_STRING; + tmp &= ~(MAY_BE_LONG|MAY_BE_DOUBLE); } tmp &= t1; + } else { + tmp |= MAY_BE_LONG | MAY_BE_STRING; } } else { if (tmp & MAY_BE_REF) { diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c index 463bbbfa84b45..cf1c98c64bb59 100644 --- a/Zend/Optimizer/zend_optimizer.c +++ b/Zend/Optimizer/zend_optimizer.c @@ -799,7 +799,9 @@ zend_class_entry *zend_optimizer_get_class_entry( } ce = zend_hash_find_ptr(CG(class_table), lcname); - if (ce && ce->type == ZEND_INTERNAL_CLASS) { + if (ce + && (ce->type == ZEND_INTERNAL_CLASS + || (op_array && ce->info.user.filename == op_array->filename))) { return ce; } diff --git a/Zend/tests/stack_limit/stack_limit_001.phpt b/Zend/tests/stack_limit/stack_limit_001.phpt index ca185635c39c8..2de5d28134ce7 100644 --- a/Zend/tests/stack_limit/stack_limit_001.phpt +++ b/Zend/tests/stack_limit/stack_limit_001.phpt @@ -76,7 +76,7 @@ array(4) { ["EG(stack_limit)"]=> string(%d) "0x%x" } -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? diff --git a/Zend/tests/stack_limit/stack_limit_002.phpt b/Zend/tests/stack_limit/stack_limit_002.phpt index 309de9bf6a2a3..53fc707ca6a5e 100644 --- a/Zend/tests/stack_limit/stack_limit_002.phpt +++ b/Zend/tests/stack_limit/stack_limit_002.phpt @@ -79,7 +79,7 @@ array(4) { ["EG(stack_limit)"]=> string(%d) "0x%x" } -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? diff --git a/Zend/tests/stack_limit/stack_limit_003.phpt b/Zend/tests/stack_limit/stack_limit_003.phpt index 9eb94a971636f..c3ea35bf84950 100644 --- a/Zend/tests/stack_limit/stack_limit_003.phpt +++ b/Zend/tests/stack_limit/stack_limit_003.phpt @@ -7,7 +7,7 @@ if (!function_exists('zend_test_zend_call_stack_get')) die("skip zend_test_zend_ --EXTENSIONS-- zend_test --INI-- -zend.max_allowed_stack_size=128K +zend.max_allowed_stack_size=256K --FILE-- string(%d) "0x%x" } -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? diff --git a/Zend/tests/stack_limit/stack_limit_005.phpt b/Zend/tests/stack_limit/stack_limit_005.phpt index 3fcd5d5728276..4f24ff74b44ac 100644 --- a/Zend/tests/stack_limit/stack_limit_005.phpt +++ b/Zend/tests/stack_limit/stack_limit_005.phpt @@ -65,4 +65,4 @@ $test ; --EXPECTF-- -Fatal error: Maximum call stack size of %d bytes reached during compilation. Try splitting expression in %s on line %d +Fatal error: Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached during compilation. Try splitting expression in %s on line %d diff --git a/Zend/tests/stack_limit/stack_limit_006.phpt b/Zend/tests/stack_limit/stack_limit_006.phpt index 0b51fabb4babd..639b2f8e66ced 100644 --- a/Zend/tests/stack_limit/stack_limit_006.phpt +++ b/Zend/tests/stack_limit/stack_limit_006.phpt @@ -320,6 +320,6 @@ array(4) { ["EG(stack_limit)"]=> string(%d) "0x%x" } -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? -Maximum call stack size of %d bytes reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? diff --git a/Zend/tests/stack_limit/stack_limit_007.phpt b/Zend/tests/stack_limit/stack_limit_007.phpt index 411af1d2c6894..55b11f36fe341 100644 --- a/Zend/tests/stack_limit/stack_limit_007.phpt +++ b/Zend/tests/stack_limit/stack_limit_007.phpt @@ -7,7 +7,7 @@ if (!function_exists('zend_test_zend_call_stack_get')) die("skip zend_test_zend_ --EXTENSIONS-- zend_test --INI-- -zend.max_allowed_stack_size=128K +zend.max_allowed_stack_size=256K --FILE-- string(%d) "0x%x" } -Maximum call stack size of %d bytes reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? Try executed: 1 diff --git a/Zend/tests/stack_limit/stack_limit_008.phpt b/Zend/tests/stack_limit/stack_limit_008.phpt index 56ff6f18bdce6..43ce1dcf2886f 100644 --- a/Zend/tests/stack_limit/stack_limit_008.phpt +++ b/Zend/tests/stack_limit/stack_limit_008.phpt @@ -7,7 +7,7 @@ if (!function_exists('zend_test_zend_call_stack_get')) die("skip zend_test_zend_ --EXTENSIONS-- zend_test --INI-- -zend.max_allowed_stack_size=128K +zend.max_allowed_stack_size=256K --FILE-- string(%d) "0x%x" } -Maximum call stack size of %d bytes reached. Infinite recursion? -Previous: Maximum call stack size of %d bytes reached. Infinite recursion? +Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? +Previous: Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? diff --git a/Zend/tests/stack_limit/stack_limit_012.phpt b/Zend/tests/stack_limit/stack_limit_012.phpt index ed5189f37cad3..9ba522b8c449d 100644 --- a/Zend/tests/stack_limit/stack_limit_012.phpt +++ b/Zend/tests/stack_limit/stack_limit_012.phpt @@ -7,7 +7,7 @@ if (!function_exists('zend_test_zend_call_stack_get')) die("skip zend_test_zend_ --EXTENSIONS-- zend_test --INI-- -zend.max_allowed_stack_size=128K +zend.max_allowed_stack_size=256K --FILE-- isFinal()); + var_dump($rm->isPublic()); + var_dump($rm->isProtected()); + var_dump($rm->isPrivate()); +} + +?> +--EXPECTF-- +Warning: Private methods cannot be final as they are never overridden by other classes in %s on line %d + +Warning: Private methods cannot be final as they are never overridden by other classes in %s on line %d +--- Method: pub --- +bool(true) +bool(true) +bool(false) +bool(false) +--- Method: prot --- +bool(true) +bool(false) +bool(true) +bool(false) +--- Method: priv --- +bool(true) +bool(false) +bool(false) +bool(true) +--- Method: final1 --- +bool(true) +bool(false) +bool(false) +bool(true) +--- Method: final2 --- +bool(true) +bool(false) +bool(true) +bool(false) +--- Method: final3 --- +bool(true) +bool(true) +bool(false) +bool(false) diff --git a/Zend/zend.h b/Zend/zend.h index 7fd41c8dee16c..3b6d2a92c2d2e 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.3.1-dev" +#define ZEND_VERSION "4.3.2" #define ZEND_ENGINE_3 diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 87bfd0b1e94e5..1078dd1d20a2a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -103,7 +103,7 @@ static void zend_compile_assign(znode *result, zend_ast *ast); zend_never_inline static void zend_stack_limit_error(void) { zend_error_noreturn(E_COMPILE_ERROR, - "Maximum call stack size of %zu bytes reached during compilation. Try splitting expression", + "Maximum call stack size of %zu bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached during compilation. Try splitting expression", (size_t) ((uintptr_t) EG(stack_base) - (uintptr_t) EG(stack_limit))); } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 2544351824b86..436154a99afb0 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2311,7 +2311,7 @@ static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_use_new_element_for_s #ifdef ZEND_CHECK_STACK_LIMIT static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_call_stack_size_error(void) { - zend_throw_error(NULL, "Maximum call stack size of %zu bytes reached. Infinite recursion?", + zend_throw_error(NULL, "Maximum call stack size of %zu bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion?", (size_t) ((uintptr_t) EG(stack_base) - (uintptr_t) EG(stack_limit))); } #endif /* ZEND_CHECK_STACK_LIMIT */ diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index d1c66b310a6b4..6362090ada908 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -1949,6 +1949,10 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_ zend_function *new_fn; bool check_inheritance = false; + if ((fn->common.fn_flags & (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL)) == (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL)) { + zend_error(E_COMPILE_WARNING, "Private methods cannot be final as they are never overridden by other classes"); + } + if ((existing_fn = zend_hash_find_ptr(&ce->function_table, key)) != NULL) { /* if it is the same function with the same visibility and has not been assigned a class scope yet, regardless * of where it is coming from there is no conflict and we do not need to add it again */ @@ -2048,10 +2052,10 @@ static void zend_traits_copy_functions(zend_string *fnname, zend_function *fn, z && zend_string_equals_ci(alias->trait_method.method_name, fnname) ) { fn_copy = *fn; - - /* if it is 0, no modifiers have been changed */ - if (alias->modifiers) { + if (alias->modifiers & ZEND_ACC_PPP_MASK) { fn_copy.common.fn_flags = alias->modifiers | (fn->common.fn_flags & ~ZEND_ACC_PPP_MASK); + } else { + fn_copy.common.fn_flags = alias->modifiers | fn->common.fn_flags; } lcname = zend_string_tolower(alias->alias); @@ -2079,7 +2083,11 @@ static void zend_traits_copy_functions(zend_string *fnname, zend_function *fn, z && fn->common.scope == aliases[i] && zend_string_equals_ci(alias->trait_method.method_name, fnname) ) { - fn_copy.common.fn_flags = alias->modifiers | (fn->common.fn_flags & ~ZEND_ACC_PPP_MASK); + if (alias->modifiers & ZEND_ACC_PPP_MASK) { + fn_copy.common.fn_flags = alias->modifiers | (fn->common.fn_flags & ~ZEND_ACC_PPP_MASK); + } else { + fn_copy.common.fn_flags = alias->modifiers | fn->common.fn_flags; + } } alias_ptr++; alias = *alias_ptr; diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index c00f0eafc7e2e..93195a1be4c54 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -878,12 +878,12 @@ static bool keeps_op1_alive(zend_op *opline) { || opline->opcode == ZEND_SWITCH_STRING || opline->opcode == ZEND_MATCH || opline->opcode == ZEND_FETCH_LIST_R + || opline->opcode == ZEND_FETCH_LIST_W || opline->opcode == ZEND_COPY_TMP) { return 1; } ZEND_ASSERT(opline->opcode != ZEND_FE_FETCH_R && opline->opcode != ZEND_FE_FETCH_RW - && opline->opcode != ZEND_FETCH_LIST_W && opline->opcode != ZEND_VERIFY_RETURN_TYPE && opline->opcode != ZEND_BIND_LEXICAL && opline->opcode != ZEND_ROPE_ADD); diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 20eb7245afc6f..4f4a14b93056e 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -269,7 +269,7 @@ static zend_always_inline size_t zend_strnlen(const char* s, size_t maxlen) #if defined(HAVE_STRNLEN) return strnlen(s, maxlen); #else - const char *p = memchr(s, '\0', maxlen); + const char *p = (const char *)memchr(s, '\0', maxlen); return p ? p-s : maxlen; #endif } diff --git a/configure.ac b/configure.ac index 749d4b53d8bd8..c6411f2ff11df 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.3.1-dev],[https://github.com/php/php-src/issues],[php],[https://www.php.net]) +AC_INIT([PHP],[8.3.2],[https://github.com/php/php-src/issues],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER @@ -1625,15 +1625,16 @@ if test "$PHP_UNDEFINED_SANITIZER" = "yes"; then dnl cast to void*. In that case, set -fno-sanitize=function. OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-sanitize-recover=undefined" + AC_CACHE_CHECK([whether to add -fno-sanitize=function],[php_cv_ubsan_no_function],[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ void foo(char *string) {} int main(void) { void (*f)(void *) = (void (*)(void *))foo; f("foo"); } - ]])],,[ubsan_needs_no_function=yes],) + ]])],[php_cv_ubsan_no_function=no],[php_cv_ubsan_no_function=yes],[php_cv_ubsan_no_function=no])]) CFLAGS="$OLD_CFLAGS" - if test "$ubsan_needs_no_function" = yes; then + if test "$php_cv_ubsan_no_function" = yes; then CFLAGS="$CFLAGS -fno-sanitize=function" CXXFLAGS="$CFLAGS -fno-sanitize=function" fi diff --git a/ext/curl/tests/curl_setopt_ssl.phpt b/ext/curl/tests/curl_setopt_ssl.phpt index 52ff95ab34bcf..2e28466a84057 100644 --- a/ext/curl/tests/curl_setopt_ssl.phpt +++ b/ext/curl/tests/curl_setopt_ssl.phpt @@ -8,6 +8,7 @@ if (!function_exists("proc_open")) die("skip no proc_open"); exec('openssl version', $out, $code); if ($code > 0) die("skip couldn't locate openssl binary"); if (PHP_OS_FAMILY === 'Windows') die('skip not for Windows'); +if (PHP_OS_FAMILY === 'Darwin') die('skip Fails intermittently on macOS'); $curl_version = curl_version(); if ($curl_version['version_number'] < 0x074700) { die("skip: blob options not supported for curl < 7.71.0"); diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 94397084d7bb2..366c85c7a7786 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -114,498 +114,498 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[597] = { { (char*) "America/Detroit" , 0x00C3B0 }, { (char*) "America/Dominica" , 0x00C758 }, { (char*) "America/Edmonton" , 0x00C7E6 }, - { (char*) "America/Eirunepe" , 0x00CBE1 }, - { (char*) "America/El_Salvador" , 0x00CDB0 }, - { (char*) "America/Ensenada" , 0x00CE6C }, - { (char*) "America/Fort_Nelson" , 0x00D279 }, - { (char*) "America/Fort_Wayne" , 0x00D841 }, - { (char*) "America/Fortaleza" , 0x00DA60 }, - { (char*) "America/Glace_Bay" , 0x00DC76 }, - { (char*) "America/Godthab" , 0x00E00D }, - { (char*) "America/Goose_Bay" , 0x00E3DE }, - { (char*) "America/Grand_Turk" , 0x00EA36 }, - { (char*) "America/Grenada" , 0x00ED97 }, - { (char*) "America/Guadeloupe" , 0x00EE25 }, - { (char*) "America/Guatemala" , 0x00EEB3 }, - { (char*) "America/Guayaquil" , 0x00EF93 }, - { (char*) "America/Guyana" , 0x00F064 }, - { (char*) "America/Halifax" , 0x00F125 }, - { (char*) "America/Havana" , 0x00F7D7 }, - { (char*) "America/Hermosillo" , 0x00FC40 }, - { (char*) "America/Indiana/Indianapolis" , 0x00FD70 }, - { (char*) "America/Indiana/Knox" , 0x00FFA8 }, - { (char*) "America/Indiana/Marengo" , 0x0103C1 }, - { (char*) "America/Indiana/Petersburg" , 0x01061B }, - { (char*) "America/Indiana/Tell_City" , 0x0108E5 }, - { (char*) "America/Indiana/Vevay" , 0x010B0F }, - { (char*) "America/Indiana/Vincennes" , 0x010CA6 }, - { (char*) "America/Indiana/Winamac" , 0x010EFC }, - { (char*) "America/Indianapolis" , 0x011182 }, - { (char*) "America/Inuvik" , 0x0113A1 }, - { (char*) "America/Iqaluit" , 0x0116F2 }, - { (char*) "America/Jamaica" , 0x011A6E }, - { (char*) "America/Jujuy" , 0x011BCD }, - { (char*) "America/Juneau" , 0x011E8B }, - { (char*) "America/Kentucky/Louisville" , 0x012271 }, - { (char*) "America/Kentucky/Monticello" , 0x012775 }, - { (char*) "America/Knox_IN" , 0x012B61 }, - { (char*) "America/Kralendijk" , 0x012F65 }, - { (char*) "America/La_Paz" , 0x013022 }, - { (char*) "America/Lima" , 0x0130D8 }, - { (char*) "America/Los_Angeles" , 0x0131FF }, - { (char*) "America/Louisville" , 0x013720 }, - { (char*) "America/Lower_Princes" , 0x013C06 }, - { (char*) "America/Maceio" , 0x013CC3 }, - { (char*) "America/Managua" , 0x013ED5 }, - { (char*) "America/Manaus" , 0x014008 }, - { (char*) "America/Marigot" , 0x0141BF }, - { (char*) "America/Martinique" , 0x01427C }, - { (char*) "America/Matamoros" , 0x01433A }, - { (char*) "America/Mazatlan" , 0x014527 }, - { (char*) "America/Mendoza" , 0x014833 }, - { (char*) "America/Menominee" , 0x014B03 }, - { (char*) "America/Merida" , 0x014EC3 }, - { (char*) "America/Metlakatla" , 0x01516E }, - { (char*) "America/Mexico_City" , 0x0153E4 }, - { (char*) "America/Miquelon" , 0x015703 }, - { (char*) "America/Moncton" , 0x015935 }, - { (char*) "America/Monterrey" , 0x015F2E }, - { (char*) "America/Montevideo" , 0x0161F4 }, - { (char*) "America/Montreal" , 0x0165C9 }, - { (char*) "America/Montserrat" , 0x016C8A }, - { (char*) "America/Nassau" , 0x016D18 }, - { (char*) "America/New_York" , 0x017112 }, - { (char*) "America/Nipigon" , 0x017802 }, - { (char*) "America/Nome" , 0x017EC3 }, - { (char*) "America/Noronha" , 0x0182AB }, - { (char*) "America/North_Dakota/Beulah" , 0x0184AB }, - { (char*) "America/North_Dakota/Center" , 0x0188DF }, - { (char*) "America/North_Dakota/New_Salem" , 0x018CDE }, - { (char*) "America/Nuuk" , 0x0190E3 }, - { (char*) "America/Ojinaga" , 0x0194C5 }, - { (char*) "America/Panama" , 0x0197B2 }, - { (char*) "America/Pangnirtung" , 0x019853 }, - { (char*) "America/Paramaribo" , 0x019BB6 }, - { (char*) "America/Phoenix" , 0x019C7D }, - { (char*) "America/Port-au-Prince" , 0x019D91 }, - { (char*) "America/Port_of_Spain" , 0x019FD2 }, - { (char*) "America/Porto_Acre" , 0x01A060 }, - { (char*) "America/Porto_Velho" , 0x01A20E }, - { (char*) "America/Puerto_Rico" , 0x01A3AC }, - { (char*) "America/Punta_Arenas" , 0x01A469 }, - { (char*) "America/Rainy_River" , 0x01A94B }, - { (char*) "America/Rankin_Inlet" , 0x01AE65 }, - { (char*) "America/Recife" , 0x01B1AE }, - { (char*) "America/Regina" , 0x01B3A8 }, - { (char*) "America/Resolute" , 0x01B647 }, - { (char*) "America/Rio_Branco" , 0x01B991 }, - { (char*) "America/Rosario" , 0x01BB43 }, - { (char*) "America/Santa_Isabel" , 0x01BE13 }, - { (char*) "America/Santarem" , 0x01C220 }, - { (char*) "America/Santiago" , 0x01C3D0 }, - { (char*) "America/Santo_Domingo" , 0x01C933 }, - { (char*) "America/Sao_Paulo" , 0x01CA7C }, - { (char*) "America/Scoresbysund" , 0x01CE76 }, - { (char*) "America/Shiprock" , 0x01D07E }, - { (char*) "America/Sitka" , 0x01D49C }, - { (char*) "America/St_Barthelemy" , 0x01D877 }, - { (char*) "America/St_Johns" , 0x01D934 }, - { (char*) "America/St_Kitts" , 0x01E0B8 }, - { (char*) "America/St_Lucia" , 0x01E146 }, - { (char*) "America/St_Thomas" , 0x01E1E7 }, - { (char*) "America/St_Vincent" , 0x01E275 }, - { (char*) "America/Swift_Current" , 0x01E316 }, - { (char*) "America/Tegucigalpa" , 0x01E4A4 }, - { (char*) "America/Thule" , 0x01E572 }, - { (char*) "America/Thunder_Bay" , 0x01E753 }, - { (char*) "America/Tijuana" , 0x01EE14 }, - { (char*) "America/Toronto" , 0x01F230 }, - { (char*) "America/Tortola" , 0x01F90E }, - { (char*) "America/Vancouver" , 0x01F99C }, - { (char*) "America/Virgin" , 0x01FEF3 }, - { (char*) "America/Whitehorse" , 0x01FFB0 }, - { (char*) "America/Winnipeg" , 0x0203D3 }, - { (char*) "America/Yakutat" , 0x02090A }, - { (char*) "America/Yellowknife" , 0x020CD8 }, - { (char*) "Antarctica/Casey" , 0x0210AE }, - { (char*) "Antarctica/Davis" , 0x0211B2 }, - { (char*) "Antarctica/DumontDUrville" , 0x021288 }, - { (char*) "Antarctica/Macquarie" , 0x02133C }, - { (char*) "Antarctica/Mawson" , 0x021728 }, - { (char*) "Antarctica/McMurdo" , 0x0217D2 }, - { (char*) "Antarctica/Palmer" , 0x021B04 }, - { (char*) "Antarctica/Rothera" , 0x021E8D }, - { (char*) "Antarctica/South_Pole" , 0x021F24 }, - { (char*) "Antarctica/Syowa" , 0x022343 }, - { (char*) "Antarctica/Troll" , 0x0223D9 }, - { (char*) "Antarctica/Vostok" , 0x02249B }, - { (char*) "Arctic/Longyearbyen" , 0x022532 }, - { (char*) "Asia/Aden" , 0x0227FF }, - { (char*) "Asia/Almaty" , 0x022890 }, - { (char*) "Asia/Amman" , 0x022B0F }, - { (char*) "Asia/Anadyr" , 0x022EBB }, - { (char*) "Asia/Aqtau" , 0x0231C1 }, - { (char*) "Asia/Aqtobe" , 0x023440 }, - { (char*) "Asia/Ashgabat" , 0x0236C0 }, - { (char*) "Asia/Ashkhabad" , 0x023843 }, - { (char*) "Asia/Atyrau" , 0x0239C6 }, - { (char*) "Asia/Baghdad" , 0x023C4F }, - { (char*) "Asia/Bahrain" , 0x023ED1 }, - { (char*) "Asia/Baku" , 0x023F8A }, - { (char*) "Asia/Bangkok" , 0x02427E }, - { (char*) "Asia/Barnaul" , 0x024322 }, - { (char*) "Asia/Beirut" , 0x02462D }, - { (char*) "Asia/Bishkek" , 0x024915 }, - { (char*) "Asia/Brunei" , 0x024B8B }, - { (char*) "Asia/Calcutta" , 0x024C31 }, - { (char*) "Asia/Chita" , 0x024D19 }, - { (char*) "Asia/Choibalsan" , 0x025027 }, - { (char*) "Asia/Chongqing" , 0x0252B0 }, - { (char*) "Asia/Chungking" , 0x025445 }, - { (char*) "Asia/Colombo" , 0x0255DA }, - { (char*) "Asia/Dacca" , 0x0256DD }, - { (char*) "Asia/Damascus" , 0x0257D0 }, - { (char*) "Asia/Dhaka" , 0x025CAE }, - { (char*) "Asia/Dili" , 0x025DA1 }, - { (char*) "Asia/Dubai" , 0x025E57 }, - { (char*) "Asia/Dushanbe" , 0x025EE8 }, - { (char*) "Asia/Famagusta" , 0x026062 }, - { (char*) "Asia/Gaza" , 0x026429 }, - { (char*) "Asia/Harbin" , 0x026E15 }, - { (char*) "Asia/Hebron" , 0x026FAA }, - { (char*) "Asia/Ho_Chi_Minh" , 0x0279A7 }, - { (char*) "Asia/Hong_Kong" , 0x027A9F }, - { (char*) "Asia/Hovd" , 0x027DB2 }, - { (char*) "Asia/Irkutsk" , 0x02803B }, - { (char*) "Asia/Istanbul" , 0x028359 }, - { (char*) "Asia/Jakarta" , 0x028815 }, - { (char*) "Asia/Jayapura" , 0x028926 }, - { (char*) "Asia/Jerusalem" , 0x028A13 }, - { (char*) "Asia/Kabul" , 0x028E51 }, - { (char*) "Asia/Kamchatka" , 0x028EFC }, - { (char*) "Asia/Karachi" , 0x0291F1 }, - { (char*) "Asia/Kashgar" , 0x029307 }, - { (char*) "Asia/Kathmandu" , 0x029398 }, - { (char*) "Asia/Katmandu" , 0x029445 }, - { (char*) "Asia/Khandyga" , 0x0294F2 }, - { (char*) "Asia/Kolkata" , 0x029823 }, - { (char*) "Asia/Krasnoyarsk" , 0x02990B }, - { (char*) "Asia/Kuala_Lumpur" , 0x029C15 }, - { (char*) "Asia/Kuching" , 0x029D35 }, - { (char*) "Asia/Kuwait" , 0x029E8F }, - { (char*) "Asia/Macao" , 0x029F20 }, - { (char*) "Asia/Macau" , 0x02A243 }, - { (char*) "Asia/Magadan" , 0x02A566 }, - { (char*) "Asia/Makassar" , 0x02A871 }, - { (char*) "Asia/Manila" , 0x02A984 }, - { (char*) "Asia/Muscat" , 0x02AA7E }, - { (char*) "Asia/Nicosia" , 0x02AB0F }, - { (char*) "Asia/Novokuznetsk" , 0x02AD7E }, - { (char*) "Asia/Novosibirsk" , 0x02B071 }, - { (char*) "Asia/Omsk" , 0x02B382 }, - { (char*) "Asia/Oral" , 0x02B680 }, - { (char*) "Asia/Phnom_Penh" , 0x02B90C }, - { (char*) "Asia/Pontianak" , 0x02B9E0 }, - { (char*) "Asia/Pyongyang" , 0x02BAF9 }, - { (char*) "Asia/Qatar" , 0x02BBBC }, - { (char*) "Asia/Qostanay" , 0x02BC60 }, - { (char*) "Asia/Qyzylorda" , 0x02BEED }, - { (char*) "Asia/Rangoon" , 0x02C186 }, - { (char*) "Asia/Riyadh" , 0x02C24D }, - { (char*) "Asia/Saigon" , 0x02C2DE }, - { (char*) "Asia/Sakhalin" , 0x02C3D6 }, - { (char*) "Asia/Samarkand" , 0x02C6ED }, - { (char*) "Asia/Seoul" , 0x02C878 }, - { (char*) "Asia/Shanghai" , 0x02CA23 }, - { (char*) "Asia/Singapore" , 0x02CBC4 }, - { (char*) "Asia/Srednekolymsk" , 0x02CCD0 }, - { (char*) "Asia/Taipei" , 0x02CFE0 }, - { (char*) "Asia/Tashkent" , 0x02D1EB }, - { (char*) "Asia/Tbilisi" , 0x02D376 }, - { (char*) "Asia/Tehran" , 0x02D5F7 }, - { (char*) "Asia/Tel_Aviv" , 0x02D92F }, - { (char*) "Asia/Thimbu" , 0x02DD6D }, - { (char*) "Asia/Thimphu" , 0x02DE13 }, - { (char*) "Asia/Tokyo" , 0x02DEB9 }, - { (char*) "Asia/Tomsk" , 0x02DF9A }, - { (char*) "Asia/Ujung_Pandang" , 0x02E2A5 }, - { (char*) "Asia/Ulaanbaatar" , 0x02E36F }, - { (char*) "Asia/Ulan_Bator" , 0x02E5DD }, - { (char*) "Asia/Urumqi" , 0x02E83B }, - { (char*) "Asia/Ust-Nera" , 0x02E8D9 }, - { (char*) "Asia/Vientiane" , 0x02EBFC }, - { (char*) "Asia/Vladivostok" , 0x02ECE2 }, - { (char*) "Asia/Yakutsk" , 0x02EFE7 }, - { (char*) "Asia/Yangon" , 0x02F2EB }, - { (char*) "Asia/Yekaterinburg" , 0x02F3B2 }, - { (char*) "Asia/Yerevan" , 0x02F6C4 }, - { (char*) "Atlantic/Azores" , 0x02F994 }, - { (char*) "Atlantic/Bermuda" , 0x02FF53 }, - { (char*) "Atlantic/Canary" , 0x03035F }, - { (char*) "Atlantic/Cape_Verde" , 0x030557 }, - { (char*) "Atlantic/Faeroe" , 0x030612 }, - { (char*) "Atlantic/Faroe" , 0x0307D7 }, - { (char*) "Atlantic/Jan_Mayen" , 0x03099C }, - { (char*) "Atlantic/Madeira" , 0x030C69 }, - { (char*) "Atlantic/Reykjavik" , 0x031231 }, - { (char*) "Atlantic/South_Georgia" , 0x03152E }, - { (char*) "Atlantic/St_Helena" , 0x0315BE }, - { (char*) "Atlantic/Stanley" , 0x03165F }, - { (char*) "Australia/ACT" , 0x031980 }, - { (char*) "Australia/Adelaide" , 0x031D14 }, - { (char*) "Australia/Brisbane" , 0x0320C8 }, - { (char*) "Australia/Broken_Hill" , 0x03220C }, - { (char*) "Australia/Canberra" , 0x0325E1 }, - { (char*) "Australia/Currie" , 0x032975 }, - { (char*) "Australia/Darwin" , 0x032D6C }, - { (char*) "Australia/Eucla" , 0x032E74 }, - { (char*) "Australia/Hobart" , 0x032FD3 }, - { (char*) "Australia/LHI" , 0x0333D2 }, - { (char*) "Australia/Lindeman" , 0x033692 }, - { (char*) "Australia/Lord_Howe" , 0x033802 }, - { (char*) "Australia/Melbourne" , 0x033AD2 }, - { (char*) "Australia/North" , 0x033E6E }, - { (char*) "Australia/NSW" , 0x033F64 }, - { (char*) "Australia/Perth" , 0x0342F8 }, - { (char*) "Australia/Queensland" , 0x034454 }, - { (char*) "Australia/South" , 0x034581 }, - { (char*) "Australia/Sydney" , 0x034926 }, - { (char*) "Australia/Tasmania" , 0x034CD6 }, - { (char*) "Australia/Victoria" , 0x0350CD }, - { (char*) "Australia/West" , 0x035461 }, - { (char*) "Australia/Yancowinna" , 0x03559F }, - { (char*) "Brazil/Acre" , 0x035958 }, - { (char*) "Brazil/DeNoronha" , 0x035B06 }, - { (char*) "Brazil/East" , 0x035CF6 }, - { (char*) "Brazil/West" , 0x0360BA }, - { (char*) "Canada/Atlantic" , 0x036262 }, - { (char*) "Canada/Central" , 0x0368F6 }, - { (char*) "Canada/Eastern" , 0x036E10 }, - { (char*) "Canada/Mountain" , 0x0374D1 }, - { (char*) "Canada/Newfoundland" , 0x0378A7 }, - { (char*) "Canada/Pacific" , 0x038009 }, - { (char*) "Canada/Saskatchewan" , 0x038547 }, - { (char*) "Canada/Yukon" , 0x0387D1 }, - { (char*) "CET" , 0x038BE2 }, - { (char*) "Chile/Continental" , 0x038E5B }, - { (char*) "Chile/EasterIsland" , 0x0393B1 }, - { (char*) "CST6CDT" , 0x039853 }, - { (char*) "Cuba" , 0x039C16 }, - { (char*) "EET" , 0x03A07F }, - { (char*) "Egypt" , 0x03A27C }, - { (char*) "Eire" , 0x03A7A5 }, - { (char*) "EST" , 0x03AD89 }, - { (char*) "EST5EDT" , 0x03AE04 }, - { (char*) "Etc/GMT" , 0x03B1C7 }, - { (char*) "Etc/GMT+0" , 0x03B242 }, - { (char*) "Etc/GMT+1" , 0x03B2BD }, - { (char*) "Etc/GMT+10" , 0x03B33A }, - { (char*) "Etc/GMT+11" , 0x03B3B8 }, - { (char*) "Etc/GMT+12" , 0x03B436 }, - { (char*) "Etc/GMT+2" , 0x03B4B4 }, - { (char*) "Etc/GMT+3" , 0x03B531 }, - { (char*) "Etc/GMT+4" , 0x03B5AE }, - { (char*) "Etc/GMT+5" , 0x03B62B }, - { (char*) "Etc/GMT+6" , 0x03B6A8 }, - { (char*) "Etc/GMT+7" , 0x03B725 }, - { (char*) "Etc/GMT+8" , 0x03B7A2 }, - { (char*) "Etc/GMT+9" , 0x03B81F }, - { (char*) "Etc/GMT-0" , 0x03B89C }, - { (char*) "Etc/GMT-1" , 0x03B917 }, - { (char*) "Etc/GMT-10" , 0x03B995 }, - { (char*) "Etc/GMT-11" , 0x03BA14 }, - { (char*) "Etc/GMT-12" , 0x03BA93 }, - { (char*) "Etc/GMT-13" , 0x03BB12 }, - { (char*) "Etc/GMT-14" , 0x03BB91 }, - { (char*) "Etc/GMT-2" , 0x03BC10 }, - { (char*) "Etc/GMT-3" , 0x03BC8E }, - { (char*) "Etc/GMT-4" , 0x03BD0C }, - { (char*) "Etc/GMT-5" , 0x03BD8A }, - { (char*) "Etc/GMT-6" , 0x03BE08 }, - { (char*) "Etc/GMT-7" , 0x03BE86 }, - { (char*) "Etc/GMT-8" , 0x03BF04 }, - { (char*) "Etc/GMT-9" , 0x03BF82 }, - { (char*) "Etc/GMT0" , 0x03C000 }, - { (char*) "Etc/Greenwich" , 0x03C07B }, - { (char*) "Etc/UCT" , 0x03C0F6 }, - { (char*) "Etc/Universal" , 0x03C171 }, - { (char*) "Etc/UTC" , 0x03C1EC }, - { (char*) "Etc/Zulu" , 0x03C267 }, - { (char*) "Europe/Amsterdam" , 0x03C2E2 }, - { (char*) "Europe/Andorra" , 0x03C71D }, - { (char*) "Europe/Astrakhan" , 0x03C8AE }, - { (char*) "Europe/Athens" , 0x03CBA2 }, - { (char*) "Europe/Belfast" , 0x03CE58 }, - { (char*) "Europe/Belgrade" , 0x03D4A3 }, - { (char*) "Europe/Berlin" , 0x03D68D }, - { (char*) "Europe/Bratislava" , 0x03D969 }, - { (char*) "Europe/Brussels" , 0x03DC48 }, - { (char*) "Europe/Bucharest" , 0x03E0A3 }, - { (char*) "Europe/Budapest" , 0x03E344 }, - { (char*) "Europe/Busingen" , 0x03E64E }, - { (char*) "Europe/Chisinau" , 0x03E853 }, - { (char*) "Europe/Copenhagen" , 0x03EB52 }, - { (char*) "Europe/Dublin" , 0x03EDCD }, - { (char*) "Europe/Gibraltar" , 0x03F3B1 }, - { (char*) "Europe/Guernsey" , 0x03F881 }, - { (char*) "Europe/Helsinki" , 0x03FED8 }, - { (char*) "Europe/Isle_of_Man" , 0x0400C5 }, - { (char*) "Europe/Istanbul" , 0x040710 }, - { (char*) "Europe/Jersey" , 0x040BCC }, - { (char*) "Europe/Kaliningrad" , 0x041223 }, - { (char*) "Europe/Kiev" , 0x0415CB }, - { (char*) "Europe/Kirov" , 0x041805 }, - { (char*) "Europe/Kyiv" , 0x041AFE }, - { (char*) "Europe/Lisbon" , 0x041D47 }, - { (char*) "Europe/Ljubljana" , 0x042314 }, - { (char*) "Europe/London" , 0x0424FE }, - { (char*) "Europe/Luxembourg" , 0x042B49 }, - { (char*) "Europe/Madrid" , 0x042F94 }, - { (char*) "Europe/Malta" , 0x043331 }, - { (char*) "Europe/Mariehamn" , 0x0436DD }, - { (char*) "Europe/Minsk" , 0x0438CA }, - { (char*) "Europe/Monaco" , 0x043BFE }, - { (char*) "Europe/Moscow" , 0x044064 }, - { (char*) "Europe/Nicosia" , 0x044410 }, - { (char*) "Europe/Oslo" , 0x044671 }, - { (char*) "Europe/Paris" , 0x044921 }, - { (char*) "Europe/Podgorica" , 0x044D7E }, - { (char*) "Europe/Prague" , 0x044F68 }, - { (char*) "Europe/Riga" , 0x045247 }, - { (char*) "Europe/Rome" , 0x045509 }, - { (char*) "Europe/Samara" , 0x0458C8 }, - { (char*) "Europe/San_Marino" , 0x045BC9 }, - { (char*) "Europe/Sarajevo" , 0x045F88 }, - { (char*) "Europe/Saratov" , 0x046172 }, - { (char*) "Europe/Simferopol" , 0x046464 }, - { (char*) "Europe/Skopje" , 0x0467D7 }, - { (char*) "Europe/Sofia" , 0x0469C1 }, - { (char*) "Europe/Stockholm" , 0x046C1D }, - { (char*) "Europe/Tallinn" , 0x046E1A }, - { (char*) "Europe/Tirane" , 0x0470C9 }, - { (char*) "Europe/Tiraspol" , 0x047331 }, - { (char*) "Europe/Ulyanovsk" , 0x047630 }, - { (char*) "Europe/Uzhgorod" , 0x047946 }, - { (char*) "Europe/Vaduz" , 0x047B80 }, - { (char*) "Europe/Vatican" , 0x047D6A }, - { (char*) "Europe/Vienna" , 0x048129 }, - { (char*) "Europe/Vilnius" , 0x0483C7 }, - { (char*) "Europe/Volgograd" , 0x048677 }, - { (char*) "Europe/Warsaw" , 0x048986 }, - { (char*) "Europe/Zagreb" , 0x048D2D }, - { (char*) "Europe/Zaporozhye" , 0x048F17 }, - { (char*) "Europe/Zurich" , 0x049151 }, - { (char*) "Factory" , 0x04934E }, - { (char*) "GB" , 0x0493CB }, - { (char*) "GB-Eire" , 0x049A16 }, - { (char*) "GMT" , 0x04A061 }, - { (char*) "GMT+0" , 0x04A0DC }, - { (char*) "GMT-0" , 0x04A157 }, - { (char*) "GMT0" , 0x04A1D2 }, - { (char*) "Greenwich" , 0x04A24D }, - { (char*) "Hongkong" , 0x04A2C8 }, - { (char*) "HST" , 0x04A5DB }, - { (char*) "Iceland" , 0x04A657 }, - { (char*) "Indian/Antananarivo" , 0x04A6E5 }, - { (char*) "Indian/Chagos" , 0x04A791 }, - { (char*) "Indian/Christmas" , 0x04A835 }, - { (char*) "Indian/Cocos" , 0x04A8C6 }, - { (char*) "Indian/Comoro" , 0x04A95E }, - { (char*) "Indian/Kerguelen" , 0x04A9ED }, - { (char*) "Indian/Mahe" , 0x04AA7E }, - { (char*) "Indian/Maldives" , 0x04AB0F }, - { (char*) "Indian/Mauritius" , 0x04ABB3 }, - { (char*) "Indian/Mayotte" , 0x04AC72 }, - { (char*) "Indian/Reunion" , 0x04AD01 }, - { (char*) "Iran" , 0x04AD92 }, - { (char*) "Israel" , 0x04B0CA }, - { (char*) "Jamaica" , 0x04B508 }, - { (char*) "Japan" , 0x04B667 }, - { (char*) "Kwajalein" , 0x04B748 }, - { (char*) "Libya" , 0x04B82F }, - { (char*) "MET" , 0x04B9EA }, - { (char*) "Mexico/BajaNorte" , 0x04BC63 }, - { (char*) "Mexico/BajaSur" , 0x04C070 }, - { (char*) "Mexico/General" , 0x04C34A }, - { (char*) "MST" , 0x04C65B }, - { (char*) "MST7MDT" , 0x04C6D6 }, - { (char*) "Navajo" , 0x04CA99 }, - { (char*) "NZ" , 0x04CEB7 }, - { (char*) "NZ-CHAT" , 0x04D2D6 }, - { (char*) "Pacific/Apia" , 0x04D60A }, - { (char*) "Pacific/Auckland" , 0x04D7AD }, - { (char*) "Pacific/Bougainville" , 0x04DBDF }, - { (char*) "Pacific/Chatham" , 0x04DCC0 }, - { (char*) "Pacific/Chuuk" , 0x04E003 }, - { (char*) "Pacific/Easter" , 0x04E0E1 }, - { (char*) "Pacific/Efate" , 0x04E590 }, - { (char*) "Pacific/Enderbury" , 0x04E6F2 }, - { (char*) "Pacific/Fakaofo" , 0x04E7AA }, - { (char*) "Pacific/Fiji" , 0x04E84F }, - { (char*) "Pacific/Funafuti" , 0x04E9E7 }, - { (char*) "Pacific/Galapagos" , 0x04EA79 }, - { (char*) "Pacific/Gambier" , 0x04EB45 }, - { (char*) "Pacific/Guadalcanal" , 0x04EBE4 }, - { (char*) "Pacific/Guam" , 0x04EC76 }, - { (char*) "Pacific/Honolulu" , 0x04EDE0 }, - { (char*) "Pacific/Johnston" , 0x04EECF }, - { (char*) "Pacific/Kanton" , 0x04EFB8 }, - { (char*) "Pacific/Kiritimati" , 0x04F07F }, - { (char*) "Pacific/Kosrae" , 0x04F145 }, - { (char*) "Pacific/Kwajalein" , 0x04F249 }, - { (char*) "Pacific/Majuro" , 0x04F339 }, - { (char*) "Pacific/Marquesas" , 0x04F437 }, - { (char*) "Pacific/Midway" , 0x04F4DF }, - { (char*) "Pacific/Nauru" , 0x04F5A2 }, - { (char*) "Pacific/Niue" , 0x04F665 }, - { (char*) "Pacific/Norfolk" , 0x04F70B }, - { (char*) "Pacific/Noumea" , 0x04F80E }, - { (char*) "Pacific/Pago_Pago" , 0x04F8E0 }, - { (char*) "Pacific/Palau" , 0x04F97E }, - { (char*) "Pacific/Pitcairn" , 0x04FA1E }, - { (char*) "Pacific/Pohnpei" , 0x04FAC3 }, - { (char*) "Pacific/Ponape" , 0x04FBB3 }, - { (char*) "Pacific/Port_Moresby" , 0x04FC45 }, - { (char*) "Pacific/Rarotonga" , 0x04FD03 }, - { (char*) "Pacific/Saipan" , 0x04FEA5 }, - { (char*) "Pacific/Samoa" , 0x050006 }, - { (char*) "Pacific/Tahiti" , 0x0500A4 }, - { (char*) "Pacific/Tarawa" , 0x050144 }, - { (char*) "Pacific/Tongatapu" , 0x0501E5 }, - { (char*) "Pacific/Truk" , 0x0502DE }, - { (char*) "Pacific/Wake" , 0x050384 }, - { (char*) "Pacific/Wallis" , 0x050421 }, - { (char*) "Pacific/Yap" , 0x0504B3 }, - { (char*) "Poland" , 0x050559 }, - { (char*) "Portugal" , 0x050900 }, - { (char*) "PRC" , 0x050EBA }, - { (char*) "PST8PDT" , 0x05104F }, - { (char*) "ROC" , 0x051412 }, - { (char*) "ROK" , 0x05161D }, - { (char*) "Singapore" , 0x0517C8 }, - { (char*) "Turkey" , 0x0518D4 }, - { (char*) "UCT" , 0x051D90 }, - { (char*) "Universal" , 0x051E0B }, - { (char*) "US/Alaska" , 0x051E86 }, - { (char*) "US/Aleutian" , 0x052263 }, - { (char*) "US/Arizona" , 0x052638 }, - { (char*) "US/Central" , 0x052734 }, - { (char*) "US/East-Indiana" , 0x052E1A }, - { (char*) "US/Eastern" , 0x053039 }, - { (char*) "US/Hawaii" , 0x053715 }, - { (char*) "US/Indiana-Starke" , 0x0537FE }, - { (char*) "US/Michigan" , 0x053C02 }, - { (char*) "US/Mountain" , 0x053F91 }, - { (char*) "US/Pacific" , 0x0543AF }, - { (char*) "US/Samoa" , 0x0548C9 }, - { (char*) "UTC" , 0x054967 }, - { (char*) "W-SU" , 0x0549E2 }, - { (char*) "WET" , 0x054D7A }, - { (char*) "Zulu" , 0x054F74 }, + { (char*) "America/Eirunepe" , 0x00CBDE }, + { (char*) "America/El_Salvador" , 0x00CDAD }, + { (char*) "America/Ensenada" , 0x00CE69 }, + { (char*) "America/Fort_Nelson" , 0x00D276 }, + { (char*) "America/Fort_Wayne" , 0x00D83E }, + { (char*) "America/Fortaleza" , 0x00DA5D }, + { (char*) "America/Glace_Bay" , 0x00DC73 }, + { (char*) "America/Godthab" , 0x00E00A }, + { (char*) "America/Goose_Bay" , 0x00E3DB }, + { (char*) "America/Grand_Turk" , 0x00EA33 }, + { (char*) "America/Grenada" , 0x00ED94 }, + { (char*) "America/Guadeloupe" , 0x00EE22 }, + { (char*) "America/Guatemala" , 0x00EEB0 }, + { (char*) "America/Guayaquil" , 0x00EF90 }, + { (char*) "America/Guyana" , 0x00F061 }, + { (char*) "America/Halifax" , 0x00F122 }, + { (char*) "America/Havana" , 0x00F7D4 }, + { (char*) "America/Hermosillo" , 0x00FC3D }, + { (char*) "America/Indiana/Indianapolis" , 0x00FD6D }, + { (char*) "America/Indiana/Knox" , 0x00FFA5 }, + { (char*) "America/Indiana/Marengo" , 0x0103BE }, + { (char*) "America/Indiana/Petersburg" , 0x010618 }, + { (char*) "America/Indiana/Tell_City" , 0x0108E2 }, + { (char*) "America/Indiana/Vevay" , 0x010B0C }, + { (char*) "America/Indiana/Vincennes" , 0x010CA3 }, + { (char*) "America/Indiana/Winamac" , 0x010EF9 }, + { (char*) "America/Indianapolis" , 0x011176 }, + { (char*) "America/Inuvik" , 0x011395 }, + { (char*) "America/Iqaluit" , 0x0116E6 }, + { (char*) "America/Jamaica" , 0x011A62 }, + { (char*) "America/Jujuy" , 0x011BC1 }, + { (char*) "America/Juneau" , 0x011E7F }, + { (char*) "America/Kentucky/Louisville" , 0x012265 }, + { (char*) "America/Kentucky/Monticello" , 0x012769 }, + { (char*) "America/Knox_IN" , 0x012B55 }, + { (char*) "America/Kralendijk" , 0x012F59 }, + { (char*) "America/La_Paz" , 0x013016 }, + { (char*) "America/Lima" , 0x0130CC }, + { (char*) "America/Los_Angeles" , 0x0131F3 }, + { (char*) "America/Louisville" , 0x013714 }, + { (char*) "America/Lower_Princes" , 0x013BFA }, + { (char*) "America/Maceio" , 0x013CB7 }, + { (char*) "America/Managua" , 0x013EC9 }, + { (char*) "America/Manaus" , 0x013FFC }, + { (char*) "America/Marigot" , 0x0141B3 }, + { (char*) "America/Martinique" , 0x014270 }, + { (char*) "America/Matamoros" , 0x01432E }, + { (char*) "America/Mazatlan" , 0x01451B }, + { (char*) "America/Mendoza" , 0x014827 }, + { (char*) "America/Menominee" , 0x014AF7 }, + { (char*) "America/Merida" , 0x014EB7 }, + { (char*) "America/Metlakatla" , 0x015162 }, + { (char*) "America/Mexico_City" , 0x0153CF }, + { (char*) "America/Miquelon" , 0x0156EE }, + { (char*) "America/Moncton" , 0x015920 }, + { (char*) "America/Monterrey" , 0x015F19 }, + { (char*) "America/Montevideo" , 0x0161DF }, + { (char*) "America/Montreal" , 0x0165B4 }, + { (char*) "America/Montserrat" , 0x016C75 }, + { (char*) "America/Nassau" , 0x016D03 }, + { (char*) "America/New_York" , 0x0170FD }, + { (char*) "America/Nipigon" , 0x0177ED }, + { (char*) "America/Nome" , 0x017EAE }, + { (char*) "America/Noronha" , 0x018296 }, + { (char*) "America/North_Dakota/Beulah" , 0x018496 }, + { (char*) "America/North_Dakota/Center" , 0x0188CA }, + { (char*) "America/North_Dakota/New_Salem" , 0x018CC9 }, + { (char*) "America/Nuuk" , 0x0190CE }, + { (char*) "America/Ojinaga" , 0x0194B0 }, + { (char*) "America/Panama" , 0x0197A6 }, + { (char*) "America/Pangnirtung" , 0x019847 }, + { (char*) "America/Paramaribo" , 0x019BAA }, + { (char*) "America/Phoenix" , 0x019C71 }, + { (char*) "America/Port-au-Prince" , 0x019D85 }, + { (char*) "America/Port_of_Spain" , 0x019FC6 }, + { (char*) "America/Porto_Acre" , 0x01A054 }, + { (char*) "America/Porto_Velho" , 0x01A202 }, + { (char*) "America/Puerto_Rico" , 0x01A3A0 }, + { (char*) "America/Punta_Arenas" , 0x01A45D }, + { (char*) "America/Rainy_River" , 0x01A93F }, + { (char*) "America/Rankin_Inlet" , 0x01AE59 }, + { (char*) "America/Recife" , 0x01B1A2 }, + { (char*) "America/Regina" , 0x01B39C }, + { (char*) "America/Resolute" , 0x01B63B }, + { (char*) "America/Rio_Branco" , 0x01B985 }, + { (char*) "America/Rosario" , 0x01BB37 }, + { (char*) "America/Santa_Isabel" , 0x01BE07 }, + { (char*) "America/Santarem" , 0x01C214 }, + { (char*) "America/Santiago" , 0x01C3C4 }, + { (char*) "America/Santo_Domingo" , 0x01C927 }, + { (char*) "America/Sao_Paulo" , 0x01CA70 }, + { (char*) "America/Scoresbysund" , 0x01CE6A }, + { (char*) "America/Shiprock" , 0x01D26B }, + { (char*) "America/Sitka" , 0x01D689 }, + { (char*) "America/St_Barthelemy" , 0x01DA64 }, + { (char*) "America/St_Johns" , 0x01DB21 }, + { (char*) "America/St_Kitts" , 0x01E29E }, + { (char*) "America/St_Lucia" , 0x01E32C }, + { (char*) "America/St_Thomas" , 0x01E3CD }, + { (char*) "America/St_Vincent" , 0x01E45B }, + { (char*) "America/Swift_Current" , 0x01E4FC }, + { (char*) "America/Tegucigalpa" , 0x01E68A }, + { (char*) "America/Thule" , 0x01E758 }, + { (char*) "America/Thunder_Bay" , 0x01E939 }, + { (char*) "America/Tijuana" , 0x01EFFA }, + { (char*) "America/Toronto" , 0x01F416 }, + { (char*) "America/Tortola" , 0x01FAF5 }, + { (char*) "America/Vancouver" , 0x01FB83 }, + { (char*) "America/Virgin" , 0x0200DA }, + { (char*) "America/Whitehorse" , 0x020197 }, + { (char*) "America/Winnipeg" , 0x0205BA }, + { (char*) "America/Yakutat" , 0x020AF1 }, + { (char*) "America/Yellowknife" , 0x020EBF }, + { (char*) "Antarctica/Casey" , 0x021295 }, + { (char*) "Antarctica/Davis" , 0x0213C5 }, + { (char*) "Antarctica/DumontDUrville" , 0x02149B }, + { (char*) "Antarctica/Macquarie" , 0x02154F }, + { (char*) "Antarctica/Mawson" , 0x02193B }, + { (char*) "Antarctica/McMurdo" , 0x0219E5 }, + { (char*) "Antarctica/Palmer" , 0x021D17 }, + { (char*) "Antarctica/Rothera" , 0x0220A0 }, + { (char*) "Antarctica/South_Pole" , 0x022137 }, + { (char*) "Antarctica/Syowa" , 0x022556 }, + { (char*) "Antarctica/Troll" , 0x0225EC }, + { (char*) "Antarctica/Vostok" , 0x02269B }, + { (char*) "Arctic/Longyearbyen" , 0x022757 }, + { (char*) "Asia/Aden" , 0x022A24 }, + { (char*) "Asia/Almaty" , 0x022AB5 }, + { (char*) "Asia/Amman" , 0x022D34 }, + { (char*) "Asia/Anadyr" , 0x0230E0 }, + { (char*) "Asia/Aqtau" , 0x0233E6 }, + { (char*) "Asia/Aqtobe" , 0x023665 }, + { (char*) "Asia/Ashgabat" , 0x0238E5 }, + { (char*) "Asia/Ashkhabad" , 0x023A68 }, + { (char*) "Asia/Atyrau" , 0x023BEB }, + { (char*) "Asia/Baghdad" , 0x023E74 }, + { (char*) "Asia/Bahrain" , 0x0240F6 }, + { (char*) "Asia/Baku" , 0x0241AF }, + { (char*) "Asia/Bangkok" , 0x0244A3 }, + { (char*) "Asia/Barnaul" , 0x024547 }, + { (char*) "Asia/Beirut" , 0x024852 }, + { (char*) "Asia/Bishkek" , 0x024B3A }, + { (char*) "Asia/Brunei" , 0x024DB0 }, + { (char*) "Asia/Calcutta" , 0x024E56 }, + { (char*) "Asia/Chita" , 0x024F3E }, + { (char*) "Asia/Choibalsan" , 0x02524C }, + { (char*) "Asia/Chongqing" , 0x0254D5 }, + { (char*) "Asia/Chungking" , 0x02566A }, + { (char*) "Asia/Colombo" , 0x0257FF }, + { (char*) "Asia/Dacca" , 0x025902 }, + { (char*) "Asia/Damascus" , 0x0259F5 }, + { (char*) "Asia/Dhaka" , 0x025ED3 }, + { (char*) "Asia/Dili" , 0x025FC6 }, + { (char*) "Asia/Dubai" , 0x02607C }, + { (char*) "Asia/Dushanbe" , 0x02610D }, + { (char*) "Asia/Famagusta" , 0x026287 }, + { (char*) "Asia/Gaza" , 0x02664E }, + { (char*) "Asia/Harbin" , 0x0271FC }, + { (char*) "Asia/Hebron" , 0x027391 }, + { (char*) "Asia/Ho_Chi_Minh" , 0x027F50 }, + { (char*) "Asia/Hong_Kong" , 0x028048 }, + { (char*) "Asia/Hovd" , 0x02835B }, + { (char*) "Asia/Irkutsk" , 0x0285E4 }, + { (char*) "Asia/Istanbul" , 0x028902 }, + { (char*) "Asia/Jakarta" , 0x028DBE }, + { (char*) "Asia/Jayapura" , 0x028ECF }, + { (char*) "Asia/Jerusalem" , 0x028FBC }, + { (char*) "Asia/Kabul" , 0x0293FA }, + { (char*) "Asia/Kamchatka" , 0x0294A5 }, + { (char*) "Asia/Karachi" , 0x02979A }, + { (char*) "Asia/Kashgar" , 0x0298B0 }, + { (char*) "Asia/Kathmandu" , 0x029941 }, + { (char*) "Asia/Katmandu" , 0x0299EE }, + { (char*) "Asia/Khandyga" , 0x029A9B }, + { (char*) "Asia/Kolkata" , 0x029DCC }, + { (char*) "Asia/Krasnoyarsk" , 0x029EB4 }, + { (char*) "Asia/Kuala_Lumpur" , 0x02A1BE }, + { (char*) "Asia/Kuching" , 0x02A2DE }, + { (char*) "Asia/Kuwait" , 0x02A438 }, + { (char*) "Asia/Macao" , 0x02A4C9 }, + { (char*) "Asia/Macau" , 0x02A7EC }, + { (char*) "Asia/Magadan" , 0x02AB0F }, + { (char*) "Asia/Makassar" , 0x02AE1A }, + { (char*) "Asia/Manila" , 0x02AF2D }, + { (char*) "Asia/Muscat" , 0x02B027 }, + { (char*) "Asia/Nicosia" , 0x02B0B8 }, + { (char*) "Asia/Novokuznetsk" , 0x02B327 }, + { (char*) "Asia/Novosibirsk" , 0x02B61A }, + { (char*) "Asia/Omsk" , 0x02B92B }, + { (char*) "Asia/Oral" , 0x02BC29 }, + { (char*) "Asia/Phnom_Penh" , 0x02BEB5 }, + { (char*) "Asia/Pontianak" , 0x02BF89 }, + { (char*) "Asia/Pyongyang" , 0x02C0A2 }, + { (char*) "Asia/Qatar" , 0x02C165 }, + { (char*) "Asia/Qostanay" , 0x02C209 }, + { (char*) "Asia/Qyzylorda" , 0x02C496 }, + { (char*) "Asia/Rangoon" , 0x02C72F }, + { (char*) "Asia/Riyadh" , 0x02C7F6 }, + { (char*) "Asia/Saigon" , 0x02C887 }, + { (char*) "Asia/Sakhalin" , 0x02C97F }, + { (char*) "Asia/Samarkand" , 0x02CC96 }, + { (char*) "Asia/Seoul" , 0x02CE21 }, + { (char*) "Asia/Shanghai" , 0x02CFCC }, + { (char*) "Asia/Singapore" , 0x02D16D }, + { (char*) "Asia/Srednekolymsk" , 0x02D279 }, + { (char*) "Asia/Taipei" , 0x02D589 }, + { (char*) "Asia/Tashkent" , 0x02D794 }, + { (char*) "Asia/Tbilisi" , 0x02D91F }, + { (char*) "Asia/Tehran" , 0x02DBA0 }, + { (char*) "Asia/Tel_Aviv" , 0x02DED8 }, + { (char*) "Asia/Thimbu" , 0x02E316 }, + { (char*) "Asia/Thimphu" , 0x02E3BC }, + { (char*) "Asia/Tokyo" , 0x02E462 }, + { (char*) "Asia/Tomsk" , 0x02E543 }, + { (char*) "Asia/Ujung_Pandang" , 0x02E84E }, + { (char*) "Asia/Ulaanbaatar" , 0x02E918 }, + { (char*) "Asia/Ulan_Bator" , 0x02EB86 }, + { (char*) "Asia/Urumqi" , 0x02EDE4 }, + { (char*) "Asia/Ust-Nera" , 0x02EE82 }, + { (char*) "Asia/Vientiane" , 0x02F1A5 }, + { (char*) "Asia/Vladivostok" , 0x02F28B }, + { (char*) "Asia/Yakutsk" , 0x02F590 }, + { (char*) "Asia/Yangon" , 0x02F894 }, + { (char*) "Asia/Yekaterinburg" , 0x02F95B }, + { (char*) "Asia/Yerevan" , 0x02FC6D }, + { (char*) "Atlantic/Azores" , 0x02FF3D }, + { (char*) "Atlantic/Bermuda" , 0x0304FC }, + { (char*) "Atlantic/Canary" , 0x030908 }, + { (char*) "Atlantic/Cape_Verde" , 0x030B00 }, + { (char*) "Atlantic/Faeroe" , 0x030BBB }, + { (char*) "Atlantic/Faroe" , 0x030D80 }, + { (char*) "Atlantic/Jan_Mayen" , 0x030F45 }, + { (char*) "Atlantic/Madeira" , 0x031212 }, + { (char*) "Atlantic/Reykjavik" , 0x0317DA }, + { (char*) "Atlantic/South_Georgia" , 0x031AD7 }, + { (char*) "Atlantic/St_Helena" , 0x031B67 }, + { (char*) "Atlantic/Stanley" , 0x031C08 }, + { (char*) "Australia/ACT" , 0x031F29 }, + { (char*) "Australia/Adelaide" , 0x0322BD }, + { (char*) "Australia/Brisbane" , 0x032671 }, + { (char*) "Australia/Broken_Hill" , 0x0327B5 }, + { (char*) "Australia/Canberra" , 0x032B8A }, + { (char*) "Australia/Currie" , 0x032F1E }, + { (char*) "Australia/Darwin" , 0x033315 }, + { (char*) "Australia/Eucla" , 0x03341D }, + { (char*) "Australia/Hobart" , 0x03357C }, + { (char*) "Australia/LHI" , 0x03397B }, + { (char*) "Australia/Lindeman" , 0x033C3B }, + { (char*) "Australia/Lord_Howe" , 0x033DAB }, + { (char*) "Australia/Melbourne" , 0x03407B }, + { (char*) "Australia/North" , 0x034417 }, + { (char*) "Australia/NSW" , 0x03450D }, + { (char*) "Australia/Perth" , 0x0348A1 }, + { (char*) "Australia/Queensland" , 0x0349FD }, + { (char*) "Australia/South" , 0x034B2A }, + { (char*) "Australia/Sydney" , 0x034ECF }, + { (char*) "Australia/Tasmania" , 0x03527F }, + { (char*) "Australia/Victoria" , 0x035676 }, + { (char*) "Australia/West" , 0x035A0A }, + { (char*) "Australia/Yancowinna" , 0x035B48 }, + { (char*) "Brazil/Acre" , 0x035F01 }, + { (char*) "Brazil/DeNoronha" , 0x0360AF }, + { (char*) "Brazil/East" , 0x03629F }, + { (char*) "Brazil/West" , 0x036663 }, + { (char*) "Canada/Atlantic" , 0x03680B }, + { (char*) "Canada/Central" , 0x036E9F }, + { (char*) "Canada/Eastern" , 0x0373B9 }, + { (char*) "Canada/Mountain" , 0x037A7A }, + { (char*) "Canada/Newfoundland" , 0x037E50 }, + { (char*) "Canada/Pacific" , 0x0385B2 }, + { (char*) "Canada/Saskatchewan" , 0x038AF0 }, + { (char*) "Canada/Yukon" , 0x038D7A }, + { (char*) "CET" , 0x03918B }, + { (char*) "Chile/Continental" , 0x039404 }, + { (char*) "Chile/EasterIsland" , 0x03995A }, + { (char*) "CST6CDT" , 0x039DFC }, + { (char*) "Cuba" , 0x03A1BF }, + { (char*) "EET" , 0x03A628 }, + { (char*) "Egypt" , 0x03A825 }, + { (char*) "Eire" , 0x03AD4E }, + { (char*) "EST" , 0x03B332 }, + { (char*) "EST5EDT" , 0x03B3AD }, + { (char*) "Etc/GMT" , 0x03B770 }, + { (char*) "Etc/GMT+0" , 0x03B7EB }, + { (char*) "Etc/GMT+1" , 0x03B866 }, + { (char*) "Etc/GMT+10" , 0x03B8E3 }, + { (char*) "Etc/GMT+11" , 0x03B961 }, + { (char*) "Etc/GMT+12" , 0x03B9DF }, + { (char*) "Etc/GMT+2" , 0x03BA5D }, + { (char*) "Etc/GMT+3" , 0x03BADA }, + { (char*) "Etc/GMT+4" , 0x03BB57 }, + { (char*) "Etc/GMT+5" , 0x03BBD4 }, + { (char*) "Etc/GMT+6" , 0x03BC51 }, + { (char*) "Etc/GMT+7" , 0x03BCCE }, + { (char*) "Etc/GMT+8" , 0x03BD4B }, + { (char*) "Etc/GMT+9" , 0x03BDC8 }, + { (char*) "Etc/GMT-0" , 0x03BE45 }, + { (char*) "Etc/GMT-1" , 0x03BEC0 }, + { (char*) "Etc/GMT-10" , 0x03BF3E }, + { (char*) "Etc/GMT-11" , 0x03BFBD }, + { (char*) "Etc/GMT-12" , 0x03C03C }, + { (char*) "Etc/GMT-13" , 0x03C0BB }, + { (char*) "Etc/GMT-14" , 0x03C13A }, + { (char*) "Etc/GMT-2" , 0x03C1B9 }, + { (char*) "Etc/GMT-3" , 0x03C237 }, + { (char*) "Etc/GMT-4" , 0x03C2B5 }, + { (char*) "Etc/GMT-5" , 0x03C333 }, + { (char*) "Etc/GMT-6" , 0x03C3B1 }, + { (char*) "Etc/GMT-7" , 0x03C42F }, + { (char*) "Etc/GMT-8" , 0x03C4AD }, + { (char*) "Etc/GMT-9" , 0x03C52B }, + { (char*) "Etc/GMT0" , 0x03C5A9 }, + { (char*) "Etc/Greenwich" , 0x03C624 }, + { (char*) "Etc/UCT" , 0x03C69F }, + { (char*) "Etc/Universal" , 0x03C71A }, + { (char*) "Etc/UTC" , 0x03C795 }, + { (char*) "Etc/Zulu" , 0x03C810 }, + { (char*) "Europe/Amsterdam" , 0x03C88B }, + { (char*) "Europe/Andorra" , 0x03CCC6 }, + { (char*) "Europe/Astrakhan" , 0x03CE57 }, + { (char*) "Europe/Athens" , 0x03D14B }, + { (char*) "Europe/Belfast" , 0x03D401 }, + { (char*) "Europe/Belgrade" , 0x03DA4C }, + { (char*) "Europe/Berlin" , 0x03DC36 }, + { (char*) "Europe/Bratislava" , 0x03DF12 }, + { (char*) "Europe/Brussels" , 0x03E1F1 }, + { (char*) "Europe/Bucharest" , 0x03E64C }, + { (char*) "Europe/Budapest" , 0x03E8ED }, + { (char*) "Europe/Busingen" , 0x03EBF7 }, + { (char*) "Europe/Chisinau" , 0x03EDFC }, + { (char*) "Europe/Copenhagen" , 0x03F0FB }, + { (char*) "Europe/Dublin" , 0x03F376 }, + { (char*) "Europe/Gibraltar" , 0x03F95A }, + { (char*) "Europe/Guernsey" , 0x03FE2A }, + { (char*) "Europe/Helsinki" , 0x040481 }, + { (char*) "Europe/Isle_of_Man" , 0x04066E }, + { (char*) "Europe/Istanbul" , 0x040CB9 }, + { (char*) "Europe/Jersey" , 0x041175 }, + { (char*) "Europe/Kaliningrad" , 0x0417CC }, + { (char*) "Europe/Kiev" , 0x041B74 }, + { (char*) "Europe/Kirov" , 0x041DAE }, + { (char*) "Europe/Kyiv" , 0x0420A7 }, + { (char*) "Europe/Lisbon" , 0x0422F0 }, + { (char*) "Europe/Ljubljana" , 0x0428BD }, + { (char*) "Europe/London" , 0x042AA7 }, + { (char*) "Europe/Luxembourg" , 0x0430F2 }, + { (char*) "Europe/Madrid" , 0x04353D }, + { (char*) "Europe/Malta" , 0x0438DA }, + { (char*) "Europe/Mariehamn" , 0x043C86 }, + { (char*) "Europe/Minsk" , 0x043E73 }, + { (char*) "Europe/Monaco" , 0x0441A7 }, + { (char*) "Europe/Moscow" , 0x04460D }, + { (char*) "Europe/Nicosia" , 0x0449B9 }, + { (char*) "Europe/Oslo" , 0x044C1A }, + { (char*) "Europe/Paris" , 0x044ECA }, + { (char*) "Europe/Podgorica" , 0x045327 }, + { (char*) "Europe/Prague" , 0x045511 }, + { (char*) "Europe/Riga" , 0x0457F0 }, + { (char*) "Europe/Rome" , 0x045AB2 }, + { (char*) "Europe/Samara" , 0x045E71 }, + { (char*) "Europe/San_Marino" , 0x046172 }, + { (char*) "Europe/Sarajevo" , 0x046531 }, + { (char*) "Europe/Saratov" , 0x04671B }, + { (char*) "Europe/Simferopol" , 0x046A0D }, + { (char*) "Europe/Skopje" , 0x046D80 }, + { (char*) "Europe/Sofia" , 0x046F6A }, + { (char*) "Europe/Stockholm" , 0x0471C6 }, + { (char*) "Europe/Tallinn" , 0x0473C3 }, + { (char*) "Europe/Tirane" , 0x047672 }, + { (char*) "Europe/Tiraspol" , 0x0478DA }, + { (char*) "Europe/Ulyanovsk" , 0x047BD9 }, + { (char*) "Europe/Uzhgorod" , 0x047EEF }, + { (char*) "Europe/Vaduz" , 0x048129 }, + { (char*) "Europe/Vatican" , 0x048313 }, + { (char*) "Europe/Vienna" , 0x0486D2 }, + { (char*) "Europe/Vilnius" , 0x048970 }, + { (char*) "Europe/Volgograd" , 0x048C20 }, + { (char*) "Europe/Warsaw" , 0x048F2F }, + { (char*) "Europe/Zagreb" , 0x0492D6 }, + { (char*) "Europe/Zaporozhye" , 0x0494C0 }, + { (char*) "Europe/Zurich" , 0x0496FA }, + { (char*) "Factory" , 0x0498F7 }, + { (char*) "GB" , 0x049974 }, + { (char*) "GB-Eire" , 0x049FBF }, + { (char*) "GMT" , 0x04A60A }, + { (char*) "GMT+0" , 0x04A685 }, + { (char*) "GMT-0" , 0x04A700 }, + { (char*) "GMT0" , 0x04A77B }, + { (char*) "Greenwich" , 0x04A7F6 }, + { (char*) "Hongkong" , 0x04A871 }, + { (char*) "HST" , 0x04AB84 }, + { (char*) "Iceland" , 0x04AC00 }, + { (char*) "Indian/Antananarivo" , 0x04AC8E }, + { (char*) "Indian/Chagos" , 0x04AD3A }, + { (char*) "Indian/Christmas" , 0x04ADDE }, + { (char*) "Indian/Cocos" , 0x04AE6F }, + { (char*) "Indian/Comoro" , 0x04AF07 }, + { (char*) "Indian/Kerguelen" , 0x04AF96 }, + { (char*) "Indian/Mahe" , 0x04B027 }, + { (char*) "Indian/Maldives" , 0x04B0B8 }, + { (char*) "Indian/Mauritius" , 0x04B15C }, + { (char*) "Indian/Mayotte" , 0x04B21B }, + { (char*) "Indian/Reunion" , 0x04B2AA }, + { (char*) "Iran" , 0x04B33B }, + { (char*) "Israel" , 0x04B673 }, + { (char*) "Jamaica" , 0x04BAB1 }, + { (char*) "Japan" , 0x04BC10 }, + { (char*) "Kwajalein" , 0x04BCF1 }, + { (char*) "Libya" , 0x04BDD8 }, + { (char*) "MET" , 0x04BF93 }, + { (char*) "Mexico/BajaNorte" , 0x04C20C }, + { (char*) "Mexico/BajaSur" , 0x04C619 }, + { (char*) "Mexico/General" , 0x04C8F3 }, + { (char*) "MST" , 0x04CC04 }, + { (char*) "MST7MDT" , 0x04CC7F }, + { (char*) "Navajo" , 0x04D042 }, + { (char*) "NZ" , 0x04D460 }, + { (char*) "NZ-CHAT" , 0x04D87F }, + { (char*) "Pacific/Apia" , 0x04DBB3 }, + { (char*) "Pacific/Auckland" , 0x04DD56 }, + { (char*) "Pacific/Bougainville" , 0x04E188 }, + { (char*) "Pacific/Chatham" , 0x04E269 }, + { (char*) "Pacific/Chuuk" , 0x04E5AC }, + { (char*) "Pacific/Easter" , 0x04E68A }, + { (char*) "Pacific/Efate" , 0x04EB39 }, + { (char*) "Pacific/Enderbury" , 0x04EC9B }, + { (char*) "Pacific/Fakaofo" , 0x04ED53 }, + { (char*) "Pacific/Fiji" , 0x04EDF8 }, + { (char*) "Pacific/Funafuti" , 0x04EF90 }, + { (char*) "Pacific/Galapagos" , 0x04F022 }, + { (char*) "Pacific/Gambier" , 0x04F0EE }, + { (char*) "Pacific/Guadalcanal" , 0x04F18D }, + { (char*) "Pacific/Guam" , 0x04F21F }, + { (char*) "Pacific/Honolulu" , 0x04F389 }, + { (char*) "Pacific/Johnston" , 0x04F478 }, + { (char*) "Pacific/Kanton" , 0x04F561 }, + { (char*) "Pacific/Kiritimati" , 0x04F628 }, + { (char*) "Pacific/Kosrae" , 0x04F6EE }, + { (char*) "Pacific/Kwajalein" , 0x04F7F2 }, + { (char*) "Pacific/Majuro" , 0x04F8E2 }, + { (char*) "Pacific/Marquesas" , 0x04F9E0 }, + { (char*) "Pacific/Midway" , 0x04FA88 }, + { (char*) "Pacific/Nauru" , 0x04FB4B }, + { (char*) "Pacific/Niue" , 0x04FC0E }, + { (char*) "Pacific/Norfolk" , 0x04FCB4 }, + { (char*) "Pacific/Noumea" , 0x04FDAD }, + { (char*) "Pacific/Pago_Pago" , 0x04FE7F }, + { (char*) "Pacific/Palau" , 0x04FF1D }, + { (char*) "Pacific/Pitcairn" , 0x04FFBD }, + { (char*) "Pacific/Pohnpei" , 0x050062 }, + { (char*) "Pacific/Ponape" , 0x050152 }, + { (char*) "Pacific/Port_Moresby" , 0x0501E4 }, + { (char*) "Pacific/Rarotonga" , 0x0502A2 }, + { (char*) "Pacific/Saipan" , 0x050444 }, + { (char*) "Pacific/Samoa" , 0x0505A5 }, + { (char*) "Pacific/Tahiti" , 0x050643 }, + { (char*) "Pacific/Tarawa" , 0x0506E3 }, + { (char*) "Pacific/Tongatapu" , 0x050784 }, + { (char*) "Pacific/Truk" , 0x05087D }, + { (char*) "Pacific/Wake" , 0x050923 }, + { (char*) "Pacific/Wallis" , 0x0509C0 }, + { (char*) "Pacific/Yap" , 0x050A52 }, + { (char*) "Poland" , 0x050AF8 }, + { (char*) "Portugal" , 0x050E9F }, + { (char*) "PRC" , 0x051459 }, + { (char*) "PST8PDT" , 0x0515EE }, + { (char*) "ROC" , 0x0519B1 }, + { (char*) "ROK" , 0x051BBC }, + { (char*) "Singapore" , 0x051D67 }, + { (char*) "Turkey" , 0x051E73 }, + { (char*) "UCT" , 0x05232F }, + { (char*) "Universal" , 0x0523AA }, + { (char*) "US/Alaska" , 0x052425 }, + { (char*) "US/Aleutian" , 0x052802 }, + { (char*) "US/Arizona" , 0x052BD7 }, + { (char*) "US/Central" , 0x052CD3 }, + { (char*) "US/East-Indiana" , 0x0533B9 }, + { (char*) "US/Eastern" , 0x0535D8 }, + { (char*) "US/Hawaii" , 0x053CB4 }, + { (char*) "US/Indiana-Starke" , 0x053D9D }, + { (char*) "US/Michigan" , 0x0541A1 }, + { (char*) "US/Mountain" , 0x054530 }, + { (char*) "US/Pacific" , 0x05494E }, + { (char*) "US/Samoa" , 0x054E68 }, + { (char*) "UTC" , 0x054F06 }, + { (char*) "W-SU" , 0x054F81 }, + { (char*) "WET" , 0x055319 }, + { (char*) "Zulu" , 0x055513 }, }; -const unsigned char timelib_timezone_db_data_builtin[348143] = { +const unsigned char timelib_timezone_db_data_builtin[349582] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2070,7 +2070,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x33, 0x0A, 0x00, 0x5D, 0xE4, 0x75, 0x00, 0xAE, 0x47, 0xE2, 0x00, 0x00, 0x00, 0x1B, -0x43, 0x61, 0x74, 0x61, 0x6D, 0x61, 0x72, 0x63, 0x61, 0x20, 0x28, 0x43, 0x54, 0x29, 0x3B, 0x20, +0x43, 0x61, 0x74, 0x61, 0x6D, 0x61, 0x72, 0x63, 0x61, 0x20, 0x28, 0x43, 0x54, 0x29, 0x2C, 0x20, 0x43, 0x68, 0x75, 0x62, 0x75, 0x74, 0x20, 0x28, 0x43, 0x48, 0x29, /* America/Argentina/ComodRivadavia */ @@ -2696,7 +2696,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0xD3, 0xBA, 0x95, 0x00, 0x86, 0xDA, 0xC9, 0x00, 0x00, 0x00, 0x21, 0x45, 0x53, 0x54, 0x20, -0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x41, 0x74, 0x69, 0x6B, 0x6F, 0x6B, 0x61, 0x6E, 0x29, 0x3B, +0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x41, 0x74, 0x69, 0x6B, 0x6F, 0x6B, 0x61, 0x6E, 0x29, 0x2C, 0x20, 0x4E, 0x55, 0x20, 0x28, 0x43, 0x6F, 0x72, 0x61, 0x6C, 0x20, 0x48, 0x29, /* America/Atka */ @@ -2907,7 +2907,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x33, 0x0A, 0x00, 0x87, 0x1D, 0xD8, 0x00, 0xC8, 0xAD, 0xB2, 0x00, 0x00, 0x00, 0x12, 0x50, 0x61, 0x72, 0x61, 0x20, 0x28, 0x65, 0x61, 0x73, 0x74, -0x29, 0x3B, 0x20, 0x41, 0x6D, 0x61, 0x70, 0x61, +0x29, 0x2C, 0x20, 0x41, 0x6D, 0x61, 0x70, 0x61, /* America/Belize */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x42, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3106,7 +3106,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x4D, 0x53, 0x54, 0x37, 0x4D, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xCB, 0xE0, 0xD1, 0x00, 0x61, 0x58, 0xE6, 0x00, 0x00, 0x00, 0x20, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x2D, 0x20, 0x49, 0x44, -0x20, 0x28, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x3B, 0x20, 0x4F, 0x52, 0x20, 0x28, 0x65, 0x61, +0x20, 0x28, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x2C, 0x20, 0x4F, 0x52, 0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x29, /* America/Buenos_Aires */ @@ -4141,9 +4141,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x0A, 0x4D, 0x53, 0x54, 0x37, 0x4D, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xDB, 0x0A, 0x38, 0x00, 0x65, -0x85, 0x95, 0x00, 0x00, 0x00, 0x25, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x2D, -0x20, 0x41, 0x42, 0x3B, 0x20, 0x42, 0x43, 0x20, 0x28, 0x45, 0x29, 0x3B, 0x20, 0x4E, 0x54, 0x20, -0x28, 0x45, 0x29, 0x3B, 0x20, 0x53, 0x4B, 0x20, 0x28, 0x57, 0x29, +0x85, 0x95, 0x00, 0x00, 0x00, 0x22, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x2D, +0x20, 0x41, 0x42, 0x2C, 0x20, 0x42, 0x43, 0x28, 0x45, 0x29, 0x2C, 0x20, 0x4E, 0x54, 0x28, 0x45, +0x29, 0x2C, 0x20, 0x53, 0x4B, 0x28, 0x57, 0x29, /* America/Eirunepe */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4243,13 +4243,13 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x45, 0x44, 0x6D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0F, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x47, 0x24, 0x4F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF8, 0x9F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x04, 0x31, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD8, 0x81, 0x20, 0x00, -0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0xB3, 0xA0, 0x01, +0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x3D, 0xAB, 0x80, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0x92, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, @@ -4540,7 +4540,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x03, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, @@ -4630,7 +4630,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x47, 0xD3, 0x60, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0D, 0x17, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x42, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xEC, 0xF9, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x5F, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x16, 0x6C, 0x00, -0x00, 0x00, 0x00, 0x4D, 0x7C, 0x41, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xB6, 0x14, 0x50, 0x01, +0x00, 0x00, 0x00, 0x4D, 0x7C, 0x41, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAF, 0x60, 0xB0, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x06, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, @@ -4640,7 +4640,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x09, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0xFF, 0xFF, 0xC7, 0x5C, 0x00, 0x00, 0xFF, 0xFF, 0xCE, +0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x07, 0xFF, 0xFF, 0xC7, 0x5C, 0x00, 0x00, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x04, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x08, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x04, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x08, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x14, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x18, 0xFF, 0xFF, 0xE3, @@ -4886,7 +4886,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x0A, 0x41, 0x53, 0x54, 0x34, 0x41, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xCD, 0x75, 0xA8, 0x00, 0xB1, 0x9C, 0xC0, 0x00, 0x00, 0x00, 0x1E, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x2D, 0x20, 0x4E, -0x53, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, 0x3B, 0x20, +0x53, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, 0x2C, 0x20, 0x50, 0x45, /* America/Havana */ @@ -5288,7 +5288,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1C, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E, 0x03, 0xFE, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xA6, 0x2C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x86, 0x0E, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x9A, 0xDB, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x88, 0xFE, 0x80, 0xFF, @@ -5311,19 +5311,18 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0xFF, 0xFF, 0xFF, 0xEF, 0xAF, 0xE0, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xFE, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x87, 0xE1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x76, 0x70, 0x00, -0x00, 0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, -0x00, 0x00, 0x00, 0x47, 0x2D, 0x5F, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, +0x00, 0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x02, +0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, -0x06, 0x05, 0x01, 0x02, 0x06, 0x05, 0xFF, 0xFF, 0xAE, 0xCF, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x18, -0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, -0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x0A, 0x45, 0x53, 0x54, -0x35, 0x45, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, -0x31, 0x2E, 0x30, 0x0A, 0x00, 0xC7, 0xF7, 0xF2, 0x00, 0x8E, 0x83, 0x2E, 0x00, 0x00, 0x00, 0x16, -0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x2D, 0x20, 0x49, 0x4E, 0x20, 0x28, 0x50, 0x75, -0x6C, 0x61, 0x73, 0x6B, 0x69, 0x29, +0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x01, 0x02, 0x06, 0xFF, 0xFF, 0xAE, +0xCF, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, +0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, +0x14, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x18, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, +0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, +0x44, 0x54, 0x00, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x45, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, +0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xC7, 0xF7, 0xF2, 0x00, +0x8E, 0x83, 0x2E, 0x00, 0x00, 0x00, 0x16, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x2D, +0x20, 0x49, 0x4E, 0x20, 0x28, 0x50, 0x75, 0x6C, 0x61, 0x73, 0x6B, 0x69, 0x29, /* America/Indianapolis */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -6192,9 +6191,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0F, 0x66, 0x80, 0x00, 0x00, 0x00, 0x00, 0x47, 0x24, 0x33, 0x70, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF8, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x04, 0x15, 0x70, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD8, 0x65, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4A, 0xE3, 0xF7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x01, +0x00, 0x00, 0x00, 0x4A, 0xE3, 0xF7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x3D, 0x8F, 0x60, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x01, 0xFF, 0xFF, 0xA4, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x0A, 0x43, 0x53, 0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, @@ -6416,7 +6415,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1E, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC2, 0xFD, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x87, 0x30, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x89, 0x1A, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x61, 0x26, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x47, 0x20, 0xFF, @@ -6438,19 +6437,18 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x56, 0xE5, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00, 0x58, 0x1E, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x2A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xE1, 0x20, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA5, 0x0C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0xC3, 0x20, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x44, 0x46, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xEE, 0x30, 0x01, -0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, +0x00, 0x00, 0x00, 0x5C, 0x44, 0x46, 0xA0, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, -0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x02, 0x06, 0x07, 0x00, 0x00, 0xD6, 0x26, 0x00, -0x00, 0xFF, 0xFF, 0x84, 0xA6, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, -0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0xFF, -0xFF, 0x81, 0x70, 0x00, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x50, -0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x41, -0x4B, 0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x0A, 0x41, 0x4B, 0x53, 0x54, 0x39, 0x41, -0x4B, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, -0x2E, 0x30, 0x0A, 0x00, 0xDD, 0x72, 0x36, 0x00, 0x49, 0xE3, 0x79, 0x00, 0x00, 0x00, 0x17, 0x41, -0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x2D, 0x20, 0x41, 0x6E, 0x6E, 0x65, 0x74, 0x74, 0x65, 0x20, -0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, +0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, +0x02, 0x06, 0x00, 0x00, 0xD6, 0x26, 0x00, 0x00, 0xFF, 0xFF, 0x84, 0xA6, 0x00, 0x00, 0xFF, 0xFF, +0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, +0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x14, 0xFF, 0xFF, 0x8F, 0x80, +0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, +0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, +0x0A, 0x41, 0x4B, 0x53, 0x54, 0x39, 0x41, 0x4B, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, +0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xDD, 0x72, 0x36, 0x00, 0x49, +0xE3, 0x79, 0x00, 0x00, 0x00, 0x17, 0x41, 0x6C, 0x61, 0x73, 0x6B, 0x61, 0x20, 0x2D, 0x20, 0x41, +0x6E, 0x6E, 0x65, 0x74, 0x74, 0x65, 0x20, 0x49, 0x73, 0x6C, 0x61, 0x6E, 0x64, /* America/Mexico_City */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -6621,7 +6619,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x38, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0x88, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x55, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0x6A, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x37, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x4C, 0x7C, 0x00, -0x00, 0x00, 0x00, 0x45, 0x44, 0x19, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0x9A, 0xE0, 0x01, +0x00, 0x00, 0x00, 0x45, 0x44, 0x19, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x45, 0x98, 0x87, 0x40, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x04, 0x05, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, @@ -6631,7 +6629,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0xFF, 0xFF, 0xC3, 0x44, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, +0x03, 0xFF, 0xFF, 0xC3, 0x44, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x0A, 0x41, 0x53, @@ -7523,7 +7521,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x03, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, @@ -7538,7 +7536,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0xA5, 0xB6, 0xE8, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xF2, 0x6E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x66, 0x56, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0x43, 0xD2, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xB8, 0x0C, 0x36, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xB8, 0xFD, 0x86, 0xF0, 0x00, @@ -7568,18 +7566,19 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xBE, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9E, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x61, 0x87, 0x87, 0x80, 0x00, -0x00, 0x00, 0x00, 0x62, 0x2D, 0xB2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5E, 0x2F, 0x00, 0x01, -0x02, 0x01, 0x03, 0x01, 0x02, 0x04, 0x02, 0x04, 0x02, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, +0x00, 0x00, 0x00, 0x62, 0x2D, 0xB2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5E, 0x2F, 0x00, 0x00, +0x00, 0x00, 0x00, 0x63, 0x86, 0xF1, 0x60, 0x01, 0x02, 0x01, 0x03, 0x01, 0x02, 0x04, 0x02, 0x04, +0x02, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x02, 0xFF, 0xFF, 0x9E, 0x1C, 0x00, -0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, -0x00, 0x43, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x0A, 0x43, 0x53, -0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, -0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xB6, 0x71, 0xBA, 0x00, 0x73, 0x54, 0xBD, 0x00, 0x00, 0x00, -0x1C, 0x43, 0x68, 0x69, 0x68, 0x75, 0x61, 0x68, 0x75, 0x61, 0x20, 0x28, 0x55, 0x53, 0x20, 0x62, -0x6F, 0x72, 0x64, 0x65, 0x72, 0x20, 0x2D, 0x20, 0x65, 0x61, 0x73, 0x74, 0x29, +0x01, 0x03, 0x02, 0x02, 0xFF, 0xFF, 0x9E, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, +0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, +0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x4D, 0x44, +0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x0A, 0x43, 0x53, 0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, +0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xB6, +0x71, 0xBA, 0x00, 0x73, 0x54, 0xBD, 0x00, 0x00, 0x00, 0x1C, 0x43, 0x68, 0x69, 0x68, 0x75, 0x61, +0x68, 0x75, 0x61, 0x20, 0x28, 0x55, 0x53, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x20, 0x2D, +0x20, 0x65, 0x61, 0x73, 0x74, 0x29, /* America/Panama */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x50, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -8291,13 +8290,13 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x45, 0x44, 0x6D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0F, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x47, 0x24, 0x4F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF8, 0x9F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x04, 0x31, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD8, 0x81, 0x20, 0x00, -0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0xB3, 0xA0, 0x01, +0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x3D, 0xAB, 0x80, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0x92, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, @@ -8517,9 +8516,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x4C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4D, 0x6E, 0x40, 0x00, 0x00, 0x00, 0x00, 0x14, 0x34, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x23, 0xF9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x13, 0xDC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0x03, 0xCD, 0x90, 0x00, @@ -8536,17 +8535,49 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2A, 0xC5, 0x07, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xE9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, +0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, +0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, +0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, +0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, +0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, +0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, +0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, +0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, +0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, +0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, +0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, +0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, +0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, +0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, +0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, +0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, +0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, +0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, +0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, +0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, +0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, +0x00, 0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, +0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, +0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, +0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, +0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, +0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, +0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, +0x00, 0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, -0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x4C, -0x4D, 0x54, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x0A, -0x3C, 0x2D, 0x30, 0x31, 0x3E, 0x31, 0x3C, 0x2B, 0x30, 0x30, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, 0x35, -0x2E, 0x30, 0x2F, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x31, 0x0A, 0x00, -0xF4, 0xE0, 0xCD, 0x00, 0xF1, 0x23, 0xC5, 0x00, 0x00, 0x00, 0x1D, 0x53, 0x63, 0x6F, 0x72, 0x65, -0x73, 0x62, 0x79, 0x73, 0x75, 0x6E, 0x64, 0x2F, 0x49, 0x74, 0x74, 0x6F, 0x71, 0x71, 0x6F, 0x72, -0x74, 0x6F, 0x6F, 0x72, 0x6D, 0x69, 0x69, 0x74, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x02, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, +0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, +0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, +0x30, 0x31, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, +0x30, 0x31, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x2D, 0x31, 0x2C, 0x4D, 0x31, +0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x30, 0x0A, 0x00, 0xF4, 0xE0, 0xCD, 0x00, 0xF1, 0x23, 0xC5, +0x00, 0x00, 0x00, 0x1D, 0x53, 0x63, 0x6F, 0x72, 0x65, 0x73, 0x62, 0x79, 0x73, 0x75, 0x6E, 0x64, +0x2F, 0x49, 0x74, 0x74, 0x6F, 0x71, 0x71, 0x6F, 0x72, 0x74, 0x6F, 0x6F, 0x72, 0x6D, 0x69, 0x69, +0x74, /* America/Shiprock */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -8794,7 +8825,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x49, 0x0D, 0x10, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x3B, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xEC, 0xF2, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x58, 0x74, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x0F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x3A, 0x74, 0x00, -0x00, 0x00, 0x00, 0x4E, 0xB6, 0x0D, 0x48, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x4E, 0xAF, 0x59, 0xA8, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x04, 0x03, 0x04, @@ -8806,16 +8837,15 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x03, 0x04, 0x07, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x00, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x04, 0xFF, 0xFF, +0x03, 0x03, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x00, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x04, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x08, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x04, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x08, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x10, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x44, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 0x44, 0x44, 0x54, 0x00, 0x0A, 0x4E, 0x53, 0x54, 0x33, 0x3A, 0x33, 0x30, 0x4E, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xD1, 0xE8, 0xFA, 0x00, 0xC2, 0x38, 0x0D, 0x00, 0x00, -0x00, 0x22, 0x4E, 0x65, 0x77, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x6C, 0x61, 0x6E, 0x64, 0x3B, 0x20, -0x4C, 0x61, 0x62, 0x72, 0x61, 0x64, 0x6F, 0x72, 0x20, 0x28, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x65, -0x61, 0x73, 0x74, 0x29, +0x00, 0x1B, 0x4E, 0x65, 0x77, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x6C, 0x61, 0x6E, 0x64, 0x2C, 0x20, +0x4C, 0x61, 0x62, 0x72, 0x61, 0x64, 0x6F, 0x72, 0x20, 0x28, 0x53, 0x45, 0x29, /* America/St_Kitts */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4B, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -9104,13 +9134,13 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x45, 0x44, 0x6D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0F, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x47, 0x24, 0x4F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF8, 0x9F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x04, 0x31, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD8, 0x81, 0x20, 0x00, -0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0xB3, 0xA0, 0x01, +0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x3D, 0xAB, 0x80, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0x92, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, @@ -9228,8 +9258,8 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x45, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xCB, 0xEF, 0x08, 0x00, 0x99, 0x87, 0x62, 0x00, 0x00, 0x00, -0x1D, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x2C, 0x20, 0x51, -0x43, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, +0x1E, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x26, 0x20, +0x51, 0x43, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, /* America/Tortola */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -9496,7 +9526,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x0A, 0x43, 0x53, 0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xD5, 0x71, 0xED, 0x00, 0x7E, 0x6B, 0x47, 0x00, 0x00, 0x00, 0x1D, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, -0x6C, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x77, 0x65, 0x73, 0x74, 0x29, 0x3B, 0x20, 0x4D, +0x6C, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x77, 0x65, 0x73, 0x74, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, /* America/Yakutat */ @@ -9632,18 +9662,21 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1E, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xDA, 0x06, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x8F, 0xCA, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xA9, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x43, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x0A, 0x3B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xB9, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x8D, 0x1D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x96, 0x45, 0x30, 0x00, -0x00, 0x00, 0x00, 0x5E, 0x63, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x2D, 0x30, 0x30, -0x00, 0x2B, 0x30, 0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x0A, 0x3C, 0x2B, 0x31, 0x31, 0x3E, 0x2D, -0x31, 0x31, 0x0A, 0x00, 0x24, 0x30, 0x52, 0x01, 0xBB, 0x4B, 0x12, 0x00, 0x00, 0x00, 0x05, 0x43, -0x61, 0x73, 0x65, 0x79, +0x00, 0x00, 0x00, 0x5E, 0x63, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x00, +0x00, 0x00, 0x00, 0x60, 0x4C, 0xB7, 0x50, 0x00, 0x00, 0x00, 0x00, 0x61, 0x58, 0x82, 0x3C, 0x00, +0x00, 0x00, 0x00, 0x62, 0x2C, 0x99, 0x50, 0x00, 0x00, 0x00, 0x00, 0x63, 0x38, 0x64, 0x3C, 0x00, +0x00, 0x00, 0x00, 0x64, 0x08, 0xB1, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, +0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x0A, 0x3C, 0x2B, 0x30, 0x38, 0x3E, 0x2D, 0x38, 0x0A, 0x00, +0x24, 0x30, 0x52, 0x01, 0xBB, 0x4B, 0x12, 0x00, 0x00, 0x00, 0x05, 0x43, 0x61, 0x73, 0x65, 0x79, + /* Antarctica/Davis */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -9727,13 +9760,13 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x46, 0x05, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x07, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF7, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xE7, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD7, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xC7, 0x75, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4D, 0x97, 0x48, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, +0x00, 0x00, 0x00, 0x4D, 0x1D, 0xD3, 0xD0, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, +0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x2D, 0x30, 0x30, 0x00, 0x41, 0x45, 0x53, 0x54, 0x00, 0x41, 0x45, 0x44, 0x54, 0x00, 0x0A, 0x41, 0x45, 0x53, 0x54, 0x2D, 0x31, 0x30, 0x41, 0x45, 0x44, 0x54, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x31, 0x2E, 0x30, 0x2C, 0x4D, 0x34, 0x2E, 0x31, 0x2E, 0x30, 0x2F, 0x33, 0x0A, @@ -9964,14 +9997,12 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -0x00, 0x00, 0x00, 0x42, 0x0D, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x02, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x00, -0x00, 0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x32, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x0A, -0x3C, 0x2B, 0x30, 0x30, 0x3E, 0x30, 0x3C, 0x2B, 0x30, 0x32, 0x3E, 0x2D, 0x32, 0x2C, 0x4D, 0x33, -0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, -0x0A, 0x00, 0x1B, 0x72, 0xCD, 0x01, 0x16, 0x86, 0xBC, 0x00, 0x00, 0x00, 0x05, 0x54, 0x72, 0x6F, -0x6C, 0x6C, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, +0x00, 0x00, 0x00, 0x42, 0x0D, 0x47, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x0A, 0x3C, 0x2B, 0x30, +0x30, 0x3E, 0x30, 0x3C, 0x2B, 0x30, 0x32, 0x3E, 0x2D, 0x32, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, +0x30, 0x2F, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x0A, 0x00, 0x1B, +0x72, 0xCD, 0x01, 0x16, 0x86, 0xBC, 0x00, 0x00, 0x00, 0x05, 0x54, 0x72, 0x6F, 0x6C, 0x6C, /* Antarctica/Vostok */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -9979,11 +10010,13 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xFF, -0xFF, 0xFF, 0xFF, 0xE9, 0x58, 0x89, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x54, 0x60, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x36, 0x00, 0x0A, 0x3C, 0x2B, 0x30, -0x36, 0x3E, 0x2D, 0x36, 0x0A, 0x00, 0x11, 0xB3, 0x3F, 0x01, 0xB5, 0xC6, 0x4F, 0x00, 0x00, 0x00, -0x06, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xFF, +0xFF, 0xFF, 0xFF, 0xE9, 0x58, 0x89, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x4D, 0x39, 0x10, 0x00, +0x00, 0x00, 0x00, 0x2E, 0xB5, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x7F, 0x45, 0x30, 0x01, +0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, +0x00, 0x46, 0x50, 0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x37, 0x00, 0x2B, 0x30, 0x35, +0x00, 0x0A, 0x3C, 0x2B, 0x30, 0x35, 0x3E, 0x2D, 0x35, 0x0A, 0x00, 0x11, 0xB3, 0x3F, 0x01, 0xB5, +0xC6, 0x4F, 0x00, 0x00, 0x00, 0x06, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, /* Arctic/Longyearbyen */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x53, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -11078,7 +11111,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -11205,10 +11238,35 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0xBC, 0x8B, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x84, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x6B, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x52, 0x50, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x4B, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x28, 0xF7, 0xF0, 0x00, -0x00, 0x00, 0x00, 0xC1, 0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, -0x00, 0x00, 0x00, 0xC3, 0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, -0x00, 0x00, 0x00, 0xC5, 0x04, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, -0x00, 0x00, 0x00, 0xC6, 0xD1, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x09, 0x37, 0x70, 0x02, +0x00, 0x00, 0x00, 0xC1, 0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x69, 0x91, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC2, 0x2B, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC3, 0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x49, 0x73, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC4, 0x0B, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC5, 0x04, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x29, 0x55, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC5, 0xF4, 0x6A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xC6, 0xD1, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x09, 0x37, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC7, 0xD4, 0x4C, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x71, 0x20, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xC8, 0xA8, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xE9, 0x19, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC9, 0xB4, 0x2E, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x47, 0xC8, 0x70, 0x00, +0x00, 0x00, 0x00, 0xCA, 0x7F, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xD2, 0x35, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCB, 0x94, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x1E, 0x6F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCC, 0x4C, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xB2, 0x17, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCD, 0x73, 0xF2, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xEB, 0xDC, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCE, 0x23, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x91, 0xF9, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCF, 0x5D, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC2, 0x84, 0x70, 0x00, +0x00, 0x00, 0x00, 0xCF, 0xF0, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x71, 0xDB, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD1, 0x3C, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x99, 0x2B, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD1, 0xC7, 0x5E, 0x80, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x51, 0xBD, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD3, 0x1C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x66, 0x98, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD3, 0x9E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0x31, 0x9F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD4, 0xFC, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x3D, 0x40, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD5, 0x6B, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x1A, 0xBC, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD6, 0xDC, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x0A, 0xAD, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD7, 0x42, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xFA, 0x9E, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD8, 0xBC, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xE1, 0x54, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD9, 0x18, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xDA, 0x80, 0x70, 0x00, +0x00, 0x00, 0x00, 0xDA, 0xA5, 0x95, 0x80, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB7, 0xFC, 0x70, 0x00, +0x00, 0x00, 0x00, 0xDA, 0xE6, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xBA, 0x62, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, @@ -11225,13 +11283,16 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, -0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, -0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, -0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, -0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, -0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, +0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, +0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, 0x31, 0x30, +0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, +0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -11267,7 +11328,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -11395,10 +11456,35 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0xBC, 0x8B, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x84, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x6B, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x52, 0x50, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x4B, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x28, 0xF7, 0xF0, 0x00, -0x00, 0x00, 0x00, 0xC1, 0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, -0x00, 0x00, 0x00, 0xC3, 0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, -0x00, 0x00, 0x00, 0xC5, 0x04, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, -0x00, 0x00, 0x00, 0xC6, 0xD1, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x09, 0x37, 0x70, 0x02, +0x00, 0x00, 0x00, 0xC1, 0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x69, 0x91, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC2, 0x2B, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC3, 0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x49, 0x73, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC4, 0x0B, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC5, 0x04, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x29, 0x55, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC5, 0xF4, 0x6A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xC6, 0xD1, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x09, 0x37, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC7, 0xD4, 0x4C, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x71, 0x20, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xC8, 0xA8, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xE9, 0x19, 0x70, 0x00, +0x00, 0x00, 0x00, 0xC9, 0xB4, 0x2E, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x47, 0xC8, 0x70, 0x00, +0x00, 0x00, 0x00, 0xCA, 0x7F, 0x35, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xD2, 0x35, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCB, 0x94, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x1E, 0x6F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCC, 0x4C, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xB2, 0x17, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCD, 0x73, 0xF2, 0x80, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xEB, 0xDC, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCE, 0x23, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x91, 0xF9, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xCF, 0x5D, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC2, 0x84, 0x70, 0x00, +0x00, 0x00, 0x00, 0xCF, 0xF0, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x71, 0xDB, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD1, 0x3C, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x99, 0x2B, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD1, 0xC7, 0x5E, 0x80, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x51, 0xBD, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD3, 0x1C, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x66, 0x98, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD3, 0x9E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0x31, 0x9F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD4, 0xFC, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0x3D, 0x40, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD5, 0x6B, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x1A, 0xBC, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD6, 0xDC, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x0A, 0xAD, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD7, 0x42, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xFA, 0x9E, 0x70, 0x00, +0x00, 0x00, 0x00, 0xD8, 0xBC, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xE1, 0x54, 0xF0, 0x00, +0x00, 0x00, 0x00, 0xD9, 0x18, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xDA, 0x80, 0x70, 0x00, +0x00, 0x00, 0x00, 0xDA, 0xA5, 0x95, 0x80, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB7, 0xFC, 0x70, 0x00, +0x00, 0x00, 0x00, 0xDA, 0xE6, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xBA, 0x62, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, @@ -11415,13 +11501,16 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, -0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, -0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, 0x31, 0x30, -0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, -0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, +0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, +0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, +0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, +0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -11700,7 +11789,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x57, 0x49, 0x54, 0x00, 0x0A, 0x57, 0x49, 0x54, 0x2D, 0x39, 0x0A, 0x00, 0x85, 0x76, 0xAA, 0x01, 0xE9, 0x59, 0x70, 0x00, 0x00, 0x00, 0x36, 0x4E, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6E, 0x65, 0x61, 0x20, 0x28, 0x57, 0x65, 0x73, 0x74, 0x20, 0x50, 0x61, 0x70, 0x75, 0x61, 0x20, 0x2F, 0x20, -0x49, 0x72, 0x69, 0x61, 0x6E, 0x20, 0x4A, 0x61, 0x79, 0x61, 0x29, 0x3B, 0x20, 0x4D, 0x61, 0x6C, +0x49, 0x72, 0x69, 0x61, 0x6E, 0x20, 0x4A, 0x61, 0x79, 0x61, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6C, 0x75, 0x6B, 0x75, 0x73, 0x2F, 0x4D, 0x6F, 0x6C, 0x75, 0x63, 0x63, 0x61, 0x73, /* Asia/Jerusalem */ @@ -12244,10 +12333,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x38, 0x00, 0x2B, 0x30, 0x39, 0x00, 0x57, 0x49, 0x54, 0x41, 0x00, 0x0A, 0x57, 0x49, 0x54, 0x41, 0x2D, 0x38, 0x0A, 0x00, 0x81, 0x85, 0x8D, 0x01, 0xC8, 0xD9, 0x1F, 0x00, 0x00, 0x00, 0x49, 0x42, 0x6F, 0x72, 0x6E, 0x65, 0x6F, -0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x2C, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x3B, 0x20, +0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x2C, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x2C, 0x20, 0x53, 0x75, 0x6C, 0x61, 0x77, 0x65, 0x73, 0x69, 0x2F, 0x43, 0x65, 0x6C, 0x65, 0x62, 0x65, 0x73, 0x2C, 0x20, 0x42, 0x61, 0x6C, 0x69, 0x2C, 0x20, 0x4E, 0x75, 0x73, 0x61, 0x20, 0x54, 0x65, 0x6E, -0x67, 0x61, 0x72, 0x72, 0x61, 0x3B, 0x20, 0x54, 0x69, 0x6D, 0x6F, 0x72, 0x20, 0x28, 0x77, 0x65, +0x67, 0x61, 0x72, 0x72, 0x61, 0x2C, 0x20, 0x54, 0x69, 0x6D, 0x6F, 0x72, 0x20, 0x28, 0x77, 0x65, 0x73, 0x74, 0x29, /* Asia/Manila */ @@ -12311,10 +12400,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x30, 0x64, 0x75, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xAE, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4D, 0x91, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x90, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x2D, 0x73, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x72, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x35, 0xEB, 0x0E, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x01, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, @@ -12917,7 +13006,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x2B, 0x31, 0x30, 0x00, 0x2B, 0x31, 0x32, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x0A, 0x3C, 0x2B, 0x31, 0x31, 0x3E, 0x2D, 0x31, 0x31, 0x0A, 0x00, 0xF0, 0x46, 0x6A, 0x01, 0xFD, 0x36, 0x12, 0x00, 0x00, 0x00, 0x1E, 0x4D, 0x53, 0x4B, 0x2B, 0x30, 0x38, 0x20, 0x2D, 0x20, 0x53, 0x61, 0x6B, 0x68, 0x61, -0x20, 0x28, 0x45, 0x29, 0x3B, 0x20, 0x4E, 0x20, 0x4B, 0x75, 0x72, 0x69, 0x6C, 0x20, 0x49, 0x73, +0x20, 0x28, 0x45, 0x29, 0x2C, 0x20, 0x4E, 0x20, 0x4B, 0x75, 0x72, 0x69, 0x6C, 0x20, 0x49, 0x73, /* Asia/Taipei */ @@ -15882,7 +15971,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x49, 0x0D, 0x10, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x3B, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xEC, 0xF2, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x58, 0x74, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x0F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x3A, 0x74, 0x00, -0x00, 0x00, 0x00, 0x4E, 0xB6, 0x0D, 0x48, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x4E, 0xAF, 0x59, 0xA8, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x04, 0x03, 0x04, @@ -15894,7 +15983,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x03, 0x04, 0x07, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x00, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x04, 0xFF, 0xFF, +0x03, 0x03, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x00, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x04, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x08, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x04, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x08, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x10, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x44, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, @@ -17362,7 +17451,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, @@ -17372,7 +17461,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x01, 0x02, 0x01, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, +0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x0A, 0x47, 0x4D, 0x54, 0x30, 0x42, 0x53, 0x54, 0x2C, 0x4D, 0x33, @@ -17614,10 +17703,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x92, 0x60, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x75, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xAE, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x7B, 0xD0, 0x00, -0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, +0x00, 0x00, 0x00, 0x32, 0xC9, 0x8C, 0xE0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x18, 0x78, 0x00, 0x00, 0x00, 0x00, 0x18, 0x78, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, @@ -17747,11 +17836,11 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x92, 0x60, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x75, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xAE, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x32, 0x72, 0x7B, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xAD, 0x00, 0x01, +0x00, 0x00, 0x00, 0x32, 0x72, 0x7B, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0xC9, 0x8C, 0xE0, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x06, 0x05, 0x06, 0x05, 0x06, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1B, 0x08, 0x00, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x04, 0x00, 0x00, 0x1B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF4, 0x00, 0x04, 0x00, 0x00, 0x18, 0x78, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x19, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1E, 0x00, 0x00, 0x2A, 0x30, 0x00, @@ -18065,7 +18154,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2A, 0xE9, 0xF1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, +0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, @@ -18075,7 +18164,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x06, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFD, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFD, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, @@ -18203,7 +18292,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, @@ -18213,7 +18302,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x01, 0x02, 0x01, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFB, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, +0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFB, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x0A, 0x47, 0x4D, 0x54, 0x30, 0x42, 0x53, 0x54, 0x2C, 0x4D, 0x33, @@ -18383,7 +18472,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2A, 0xE9, 0xF1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, +0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, @@ -18393,7 +18482,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x06, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFE, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, @@ -18489,9 +18578,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, -0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x00, 0x00, 0x00, 0x31, 0x96, 0x51, 0x50, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, @@ -18577,9 +18666,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, -0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x00, 0x00, 0x00, 0x31, 0x96, 0x51, 0x50, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, @@ -18804,7 +18893,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, @@ -18814,7 +18903,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x01, 0x02, 0x01, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, +0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x0A, 0x47, 0x4D, 0x54, 0x30, 0x42, 0x53, 0x54, 0x2C, 0x4D, 0x33, @@ -19265,10 +19354,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x30, 0x64, 0x75, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xAE, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4D, 0x91, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0x90, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x34, 0x2D, 0x73, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x72, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x35, 0xEB, 0x0E, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x01, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, @@ -19507,10 +19596,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, -0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x06, 0x05, +0x00, 0x00, 0x00, 0x3A, 0x50, 0xFD, 0xE0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, -0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x00, 0x00, 0x16, 0xA2, +0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x08, 0x03, 0x03, 0x00, 0x00, 0x16, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x16, 0xA2, 0x00, 0x04, 0x00, 0x00, 0x24, 0xB2, 0x01, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0C, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x10, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x18, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, @@ -19899,10 +19988,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x92, 0x60, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x75, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xAE, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0x7B, 0xD0, 0x00, -0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x02, 0x05, +0x00, 0x00, 0x00, 0x32, 0xC9, 0x8C, 0xE0, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x00, 0x00, 0x15, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x68, 0x00, 0x04, +0x02, 0x05, 0x02, 0x02, 0x00, 0x00, 0x15, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x15, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x53, @@ -19976,11 +20065,11 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, -0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x01, +0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x74, 0x1C, 0x60, 0x01, 0x03, 0x02, 0x03, 0x01, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, 0x07, 0x04, -0x07, 0x04, 0x07, 0x00, 0x00, 0x17, 0x34, 0x00, 0x00, 0x00, 0x00, 0x17, 0x34, 0x00, 0x04, 0x00, +0x07, 0x04, 0x04, 0x00, 0x00, 0x17, 0x34, 0x00, 0x00, 0x00, 0x00, 0x17, 0x34, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x15, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, @@ -20066,11 +20155,11 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x92, 0x60, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x75, 0x50, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xAE, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x32, 0x72, 0x7B, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xAD, 0x00, 0x01, +0x00, 0x00, 0x00, 0x32, 0x72, 0x7B, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0xC9, 0x8C, 0xE0, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x06, 0x05, 0x06, 0x05, 0x06, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1B, 0x08, 0x00, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x04, 0x00, 0x00, 0x1B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF4, 0x00, 0x04, 0x00, 0x00, 0x18, 0x78, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x19, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1E, 0x00, 0x00, 0x2A, 0x30, 0x00, @@ -20158,9 +20247,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, -0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x00, 0x00, 0x00, 0x31, 0x96, 0x51, 0x50, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, @@ -20341,10 +20430,10 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x33, 0x3D, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, -0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x01, 0x02, 0x03, 0x04, 0x03, 0x05, 0x06, 0x03, 0x06, +0x00, 0x00, 0x00, 0x3E, 0x12, 0x13, 0x60, 0x01, 0x02, 0x03, 0x04, 0x03, 0x05, 0x06, 0x03, 0x06, 0x03, 0x06, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, -0x04, 0x08, 0x04, 0x08, 0x04, 0x06, 0x03, 0x06, 0x04, 0x08, 0x00, 0x00, 0x17, 0xBC, 0x00, 0x00, +0x04, 0x08, 0x04, 0x08, 0x04, 0x06, 0x03, 0x06, 0x04, 0x04, 0x00, 0x00, 0x17, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x13, 0xB0, 0x00, 0x04, 0x00, 0x00, 0x16, 0x68, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x10, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x18, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x21, @@ -20526,9 +20615,9 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, -0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x00, 0x00, 0x00, 0x31, 0x96, 0x51, 0x50, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, @@ -20668,7 +20757,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, @@ -20678,7 +20767,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x01, 0x02, 0x01, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, +0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x0A, 0x47, 0x4D, 0x54, 0x30, 0x42, 0x53, 0x54, 0x2C, 0x4D, 0x33, @@ -20771,7 +20860,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC9, 0xD3, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xA9, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x89, 0x97, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x30, 0xE7, 0x24, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, @@ -20781,7 +20870,7 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x01, 0x02, 0x01, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, +0x02, 0x01, 0x02, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x0A, 0x47, 0x4D, 0x54, 0x30, 0x42, 0x53, 0x54, 0x2C, 0x4D, 0x33, @@ -21353,13 +21442,13 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x45, 0x44, 0x6D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0F, 0x82, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x47, 0x24, 0x4F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0xF8, 0x9F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x04, 0x31, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0xD8, 0x81, 0x20, 0x00, -0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0xB3, 0xA0, 0x01, +0x00, 0x00, 0x00, 0x4A, 0xE4, 0x13, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x3D, 0xAB, 0x80, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0x92, +0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, @@ -22331,18 +22420,17 @@ const unsigned char timelib_timezone_db_data_builtin[348143] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1E, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x36, 0x17, 0x88, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0x41, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0F, 0xCA, 0x68, 0x00, 0x00, 0x00, 0x00, 0x09, 0xB5, 0xE7, 0x68, 0x00, -0x00, 0x00, 0x00, 0x56, 0x0F, 0xE6, 0x68, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x98, 0xAF, 0xF0, 0x01, -0x02, 0x03, 0x02, 0x04, 0x05, 0x00, 0x00, 0x9D, 0x78, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x80, 0x00, +0x00, 0x00, 0x00, 0x56, 0x0F, 0xE6, 0x68, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x18, 0xB2, 0x50, 0x01, +0x02, 0x03, 0x02, 0x04, 0x04, 0x00, 0x00, 0x9D, 0x78, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x80, 0x00, 0x04, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x0A, 0x00, 0x00, 0xAF, 0xC8, 0x01, 0x10, 0x00, 0x00, 0x9A, -0xB0, 0x00, 0x16, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x1A, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x31, 0x31, -0x31, 0x32, 0x00, 0x2B, 0x31, 0x31, 0x33, 0x30, 0x00, 0x2B, 0x31, 0x32, 0x33, 0x30, 0x00, 0x2B, -0x31, 0x31, 0x00, 0x2B, 0x31, 0x32, 0x00, 0x0A, 0x3C, 0x2B, 0x31, 0x31, 0x3E, 0x2D, 0x31, 0x31, -0x3C, 0x2B, 0x31, 0x32, 0x3E, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x31, 0x2E, 0x30, 0x2C, 0x4D, 0x34, -0x2E, 0x31, 0x2E, 0x30, 0x2F, 0x33, 0x0A, 0x00, 0x5D, 0x00, 0x98, 0x02, 0x12, 0xF4, 0x7A, 0x00, -0x00, 0x00, 0x00, +0xB0, 0x00, 0x16, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x31, 0x31, 0x31, 0x32, 0x00, 0x2B, 0x31, 0x31, +0x33, 0x30, 0x00, 0x2B, 0x31, 0x32, 0x33, 0x30, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x0A, 0x3C, 0x2B, +0x31, 0x31, 0x3E, 0x2D, 0x31, 0x31, 0x3C, 0x2B, 0x31, 0x32, 0x3E, 0x2C, 0x4D, 0x31, 0x30, 0x2E, +0x31, 0x2E, 0x30, 0x2C, 0x4D, 0x34, 0x2E, 0x31, 0x2E, 0x30, 0x2F, 0x33, 0x0A, 0x00, 0x5D, 0x00, +0x98, 0x02, 0x12, 0xF4, 0x7A, 0x00, 0x00, 0x00, 0x00, /* Pacific/Noumea */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4E, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -23968,498 +24056,498 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[597] = { { (char*) "America/Detroit" , 0x013B17 }, { (char*) "America/Dominica" , 0x0143F2 }, { (char*) "America/Edmonton" , 0x014492 }, - { (char*) "America/Eirunepe" , 0x014DDF }, - { (char*) "America/El_Salvador" , 0x01507C }, - { (char*) "America/Ensenada" , 0x015168 }, - { (char*) "America/Fort_Nelson" , 0x015ABA }, - { (char*) "America/Fort_Wayne" , 0x01639A }, - { (char*) "America/Fortaleza" , 0x016A38 }, - { (char*) "America/Glace_Bay" , 0x016D28 }, - { (char*) "America/Godthab" , 0x0175DF }, - { (char*) "America/Goose_Bay" , 0x017D5A }, - { (char*) "America/Grand_Turk" , 0x018A10 }, - { (char*) "America/Grenada" , 0x019146 }, - { (char*) "America/Guadeloupe" , 0x0191E6 }, - { (char*) "America/Guatemala" , 0x019286 }, - { (char*) "America/Guayaquil" , 0x0193AA }, - { (char*) "America/Guyana" , 0x0194B0 }, - { (char*) "America/Halifax" , 0x0195B4 }, - { (char*) "America/Havana" , 0x01A33E }, - { (char*) "America/Hermosillo" , 0x01ACBA }, - { (char*) "America/Indiana/Indianapolis" , 0x01AE94 }, - { (char*) "America/Indiana/Knox" , 0x01B54B }, - { (char*) "America/Indiana/Marengo" , 0x01BEF8 }, - { (char*) "America/Indiana/Petersburg" , 0x01C5E5 }, - { (char*) "America/Indiana/Tell_City" , 0x01CD84 }, - { (char*) "America/Indiana/Vevay" , 0x01D448 }, - { (char*) "America/Indiana/Vincennes" , 0x01DA04 }, - { (char*) "America/Indiana/Winamac" , 0x01E0DA }, - { (char*) "America/Indianapolis" , 0x01E7FE }, - { (char*) "America/Inuvik" , 0x01EE9C }, - { (char*) "America/Iqaluit" , 0x01F6D6 }, - { (char*) "America/Jamaica" , 0x01FF95 }, - { (char*) "America/Jujuy" , 0x020183 }, - { (char*) "America/Juneau" , 0x020599 }, - { (char*) "America/Kentucky/Louisville" , 0x020EEA }, - { (char*) "America/Kentucky/Monticello" , 0x0219F8 }, - { (char*) "America/Knox_IN" , 0x022358 }, - { (char*) "America/Kralendijk" , 0x022CF0 }, - { (char*) "America/La_Paz" , 0x022DF2 }, - { (char*) "America/Lima" , 0x022ED8 }, - { (char*) "America/Los_Angeles" , 0x02306C }, - { (char*) "America/Louisville" , 0x023BA3 }, - { (char*) "America/Lower_Princes" , 0x024693 }, - { (char*) "America/Maceio" , 0x024795 }, - { (char*) "America/Managua" , 0x024A8B }, - { (char*) "America/Manaus" , 0x024C45 }, - { (char*) "America/Marigot" , 0x024EAE }, - { (char*) "America/Martinique" , 0x024FB0 }, - { (char*) "America/Matamoros" , 0x0250A4 }, - { (char*) "America/Mazatlan" , 0x025666 }, - { (char*) "America/Mendoza" , 0x025B0C }, - { (char*) "America/Menominee" , 0x025F3E }, - { (char*) "America/Merida" , 0x02684B }, - { (char*) "America/Metlakatla" , 0x026C54 }, - { (char*) "America/Mexico_City" , 0x027206 }, - { (char*) "America/Miquelon" , 0x0276E6 }, - { (char*) "America/Moncton" , 0x027D66 }, - { (char*) "America/Monterrey" , 0x0289DC }, - { (char*) "America/Montevideo" , 0x028DF2 }, - { (char*) "America/Montreal" , 0x0293D6 }, - { (char*) "America/Montserrat" , 0x02A188 }, - { (char*) "America/Nassau" , 0x02A228 }, - { (char*) "America/New_York" , 0x02AB88 }, - { (char*) "America/Nipigon" , 0x02B988 }, - { (char*) "America/Nome" , 0x02C73A }, - { (char*) "America/Noronha" , 0x02D092 }, - { (char*) "America/North_Dakota/Beulah" , 0x02D36C }, - { (char*) "America/North_Dakota/Center" , 0x02DCE9 }, - { (char*) "America/North_Dakota/New_Salem" , 0x02E666 }, - { (char*) "America/Nuuk" , 0x02EFE9 }, - { (char*) "America/Ojinaga" , 0x02F775 }, - { (char*) "America/Panama" , 0x02FD91 }, - { (char*) "America/Pangnirtung" , 0x02FE53 }, - { (char*) "America/Paramaribo" , 0x0306F9 }, - { (char*) "America/Phoenix" , 0x0307FD }, - { (char*) "America/Port-au-Prince" , 0x030989 }, - { (char*) "America/Port_of_Spain" , 0x030F2F }, - { (char*) "America/Porto_Acre" , 0x030FCF }, - { (char*) "America/Porto_Velho" , 0x031241 }, - { (char*) "America/Puerto_Rico" , 0x031487 }, - { (char*) "America/Punta_Arenas" , 0x031589 }, - { (char*) "America/Rainy_River" , 0x031D17 }, - { (char*) "America/Rankin_Inlet" , 0x032857 }, - { (char*) "America/Recife" , 0x03308B }, - { (char*) "America/Regina" , 0x03335F }, - { (char*) "America/Resolute" , 0x033754 }, - { (char*) "America/Rio_Branco" , 0x033F89 }, - { (char*) "America/Rosario" , 0x0341FF }, - { (char*) "America/Santa_Isabel" , 0x034631 }, - { (char*) "America/Santarem" , 0x034F83 }, - { (char*) "America/Santiago" , 0x0351E6 }, - { (char*) "America/Santo_Domingo" , 0x035BD2 }, - { (char*) "America/Sao_Paulo" , 0x035DA8 }, - { (char*) "America/Scoresbysund" , 0x036380 }, - { (char*) "America/Shiprock" , 0x036B17 }, - { (char*) "America/Sitka" , 0x0374BF }, - { (char*) "America/St_Barthelemy" , 0x037DF7 }, - { (char*) "America/St_Johns" , 0x037EF9 }, - { (char*) "America/St_Kitts" , 0x038D6E }, - { (char*) "America/St_Lucia" , 0x038E0E }, - { (char*) "America/St_Thomas" , 0x038ED0 }, - { (char*) "America/St_Vincent" , 0x038F70 }, - { (char*) "America/Swift_Current" , 0x039032 }, - { (char*) "America/Tegucigalpa" , 0x039280 }, - { (char*) "America/Thule" , 0x039388 }, - { (char*) "America/Thunder_Bay" , 0x039980 }, - { (char*) "America/Tijuana" , 0x03A732 }, - { (char*) "America/Toronto" , 0x03B093 }, - { (char*) "America/Tortola" , 0x03BE62 }, - { (char*) "America/Vancouver" , 0x03BF02 }, - { (char*) "America/Virgin" , 0x03CA73 }, - { (char*) "America/Whitehorse" , 0x03CB75 }, - { (char*) "America/Winnipeg" , 0x03D1E1 }, - { (char*) "America/Yakutat" , 0x03DD3E }, - { (char*) "America/Yellowknife" , 0x03E65B }, - { (char*) "Antarctica/Casey" , 0x03EF83 }, - { (char*) "Antarctica/Davis" , 0x03F106 }, - { (char*) "Antarctica/DumontDUrville" , 0x03F232 }, - { (char*) "Antarctica/Macquarie" , 0x03F302 }, - { (char*) "Antarctica/Mawson" , 0x03FBF2 }, - { (char*) "Antarctica/McMurdo" , 0x03FCBD }, - { (char*) "Antarctica/Palmer" , 0x0404B8 }, - { (char*) "Antarctica/Rothera" , 0x040A46 }, - { (char*) "Antarctica/South_Pole" , 0x040AEF }, - { (char*) "Antarctica/Syowa" , 0x041480 }, - { (char*) "Antarctica/Troll" , 0x041528 }, - { (char*) "Antarctica/Vostok" , 0x0419B5 }, - { (char*) "Arctic/Longyearbyen" , 0x041A5E }, - { (char*) "Asia/Aden" , 0x042364 }, - { (char*) "Asia/Almaty" , 0x042407 }, - { (char*) "Asia/Amman" , 0x0427FC }, - { (char*) "Asia/Anadyr" , 0x042DA1 }, - { (char*) "Asia/Aqtau" , 0x043256 }, - { (char*) "Asia/Aqtobe" , 0x043640 }, - { (char*) "Asia/Ashgabat" , 0x043A3E }, - { (char*) "Asia/Ashkhabad" , 0x043CA7 }, - { (char*) "Asia/Atyrau" , 0x043F10 }, - { (char*) "Asia/Baghdad" , 0x044302 }, - { (char*) "Asia/Bahrain" , 0x0446D7 }, - { (char*) "Asia/Baku" , 0x0447C2 }, - { (char*) "Asia/Bangkok" , 0x044C8B }, - { (char*) "Asia/Barnaul" , 0x044D50 }, - { (char*) "Asia/Beirut" , 0x045221 }, - { (char*) "Asia/Bishkek" , 0x045A97 }, - { (char*) "Asia/Brunei" , 0x045E6C }, - { (char*) "Asia/Calcutta" , 0x045F35 }, - { (char*) "Asia/Chita" , 0x04605E }, - { (char*) "Asia/Choibalsan" , 0x046535 }, - { (char*) "Asia/Chongqing" , 0x0468FA }, - { (char*) "Asia/Chungking" , 0x046B37 }, - { (char*) "Asia/Colombo" , 0x046D74 }, - { (char*) "Asia/Dacca" , 0x046EE6 }, - { (char*) "Asia/Damascus" , 0x047035 }, - { (char*) "Asia/Dhaka" , 0x047792 }, - { (char*) "Asia/Dili" , 0x0478E1 }, - { (char*) "Asia/Dubai" , 0x0479C2 }, - { (char*) "Asia/Dushanbe" , 0x047A65 }, - { (char*) "Asia/Famagusta" , 0x047CB2 }, - { (char*) "Asia/Gaza" , 0x0484B9 }, - { (char*) "Asia/Harbin" , 0x0493AF }, - { (char*) "Asia/Hebron" , 0x0495EC }, - { (char*) "Asia/Ho_Chi_Minh" , 0x04A4FD }, - { (char*) "Asia/Hong_Kong" , 0x04A65A }, - { (char*) "Asia/Hovd" , 0x04AB37 }, - { (char*) "Asia/Irkutsk" , 0x04AEDB }, - { (char*) "Asia/Istanbul" , 0x04B3CE }, - { (char*) "Asia/Jakarta" , 0x04BB67 }, - { (char*) "Asia/Jayapura" , 0x04BCFF }, - { (char*) "Asia/Jerusalem" , 0x04BE1E }, - { (char*) "Asia/Kabul" , 0x04C77E }, - { (char*) "Asia/Kamchatka" , 0x04C84C }, - { (char*) "Asia/Karachi" , 0x04CCEA }, - { (char*) "Asia/Kashgar" , 0x04CE71 }, - { (char*) "Asia/Kathmandu" , 0x04CF14 }, - { (char*) "Asia/Katmandu" , 0x04CFE6 }, - { (char*) "Asia/Khandyga" , 0x04D0B8 }, - { (char*) "Asia/Kolkata" , 0x04D5CB }, - { (char*) "Asia/Krasnoyarsk" , 0x04D6F4 }, - { (char*) "Asia/Kuala_Lumpur" , 0x04DBC2 }, - { (char*) "Asia/Kuching" , 0x04DD73 }, - { (char*) "Asia/Kuwait" , 0x04DF62 }, - { (char*) "Asia/Macao" , 0x04E005 }, - { (char*) "Asia/Macau" , 0x04E4DC }, - { (char*) "Asia/Magadan" , 0x04E9B3 }, - { (char*) "Asia/Makassar" , 0x04EE87 }, - { (char*) "Asia/Manila" , 0x04EFDA }, - { (char*) "Asia/Muscat" , 0x04F12E }, - { (char*) "Asia/Nicosia" , 0x04F1D1 }, - { (char*) "Asia/Novokuznetsk" , 0x04F9BD }, - { (char*) "Asia/Novosibirsk" , 0x04FE59 }, - { (char*) "Asia/Omsk" , 0x050330 }, - { (char*) "Asia/Oral" , 0x0507F2 }, - { (char*) "Asia/Phnom_Penh" , 0x050BEC }, - { (char*) "Asia/Pontianak" , 0x050D11 }, - { (char*) "Asia/Pyongyang" , 0x050E94 }, - { (char*) "Asia/Qatar" , 0x050F8D }, - { (char*) "Asia/Qostanay" , 0x051052 }, - { (char*) "Asia/Qyzylorda" , 0x05145D }, - { (char*) "Asia/Rangoon" , 0x051879 }, - { (char*) "Asia/Riyadh" , 0x051983 }, - { (char*) "Asia/Saigon" , 0x051A26 }, - { (char*) "Asia/Sakhalin" , 0x051B83 }, - { (char*) "Asia/Samarkand" , 0x05204B }, - { (char*) "Asia/Seoul" , 0x05229B }, - { (char*) "Asia/Shanghai" , 0x052510 }, - { (char*) "Asia/Singapore" , 0x052759 }, - { (char*) "Asia/Srednekolymsk" , 0x0528F6 }, - { (char*) "Asia/Taipei" , 0x052DCA }, - { (char*) "Asia/Tashkent" , 0x0530CF }, - { (char*) "Asia/Tbilisi" , 0x05332D }, - { (char*) "Asia/Tehran" , 0x053736 }, - { (char*) "Asia/Tel_Aviv" , 0x053C22 }, - { (char*) "Asia/Thimbu" , 0x054582 }, - { (char*) "Asia/Thimphu" , 0x05464B }, - { (char*) "Asia/Tokyo" , 0x054714 }, - { (char*) "Asia/Tomsk" , 0x054855 }, - { (char*) "Asia/Ujung_Pandang" , 0x054D26 }, - { (char*) "Asia/Ulaanbaatar" , 0x054E30 }, - { (char*) "Asia/Ulan_Bator" , 0x0551B9 }, - { (char*) "Asia/Urumqi" , 0x055532 }, - { (char*) "Asia/Ust-Nera" , 0x0555E2 }, - { (char*) "Asia/Vientiane" , 0x055AD8 }, - { (char*) "Asia/Vladivostok" , 0x055C19 }, - { (char*) "Asia/Yakutsk" , 0x0560E2 }, - { (char*) "Asia/Yangon" , 0x0565AA }, - { (char*) "Asia/Yekaterinburg" , 0x0566B4 }, - { (char*) "Asia/Yerevan" , 0x056B9B }, - { (char*) "Atlantic/Azores" , 0x057018 }, - { (char*) "Atlantic/Bermuda" , 0x057DD4 }, - { (char*) "Atlantic/Canary" , 0x05873C }, - { (char*) "Atlantic/Cape_Verde" , 0x058EBF }, - { (char*) "Atlantic/Faeroe" , 0x058FCB }, - { (char*) "Atlantic/Faroe" , 0x0596EE }, - { (char*) "Atlantic/Jan_Mayen" , 0x059E11 }, - { (char*) "Atlantic/Madeira" , 0x05A717 }, - { (char*) "Atlantic/Reykjavik" , 0x05B4E1 }, - { (char*) "Atlantic/South_Georgia" , 0x05B977 }, - { (char*) "Atlantic/St_Helena" , 0x05BA19 }, - { (char*) "Atlantic/Stanley" , 0x05BADB }, - { (char*) "Australia/ACT" , 0x05BF97 }, - { (char*) "Australia/Adelaide" , 0x05C831 }, - { (char*) "Australia/Brisbane" , 0x05D0EC }, - { (char*) "Australia/Broken_Hill" , 0x05D2B2 }, - { (char*) "Australia/Canberra" , 0x05DB8F }, - { (char*) "Australia/Currie" , 0x05E429 }, - { (char*) "Australia/Darwin" , 0x05ED6B }, - { (char*) "Australia/Eucla" , 0x05EECE }, - { (char*) "Australia/Hobart" , 0x05F0BB }, - { (char*) "Australia/LHI" , 0x05FA05 }, - { (char*) "Australia/Lindeman" , 0x060147 }, - { (char*) "Australia/Lord_Howe" , 0x06034D }, - { (char*) "Australia/Melbourne" , 0x060A9F }, - { (char*) "Australia/North" , 0x061341 }, - { (char*) "Australia/NSW" , 0x061492 }, - { (char*) "Australia/Perth" , 0x061D2C }, - { (char*) "Australia/Queensland" , 0x061F14 }, - { (char*) "Australia/South" , 0x0620C3 }, - { (char*) "Australia/Sydney" , 0x06296F }, - { (char*) "Australia/Tasmania" , 0x063225 }, - { (char*) "Australia/Victoria" , 0x063B67 }, - { (char*) "Australia/West" , 0x064401 }, - { (char*) "Australia/Yancowinna" , 0x0645CB }, - { (char*) "Brazil/Acre" , 0x064E8C }, - { (char*) "Brazil/DeNoronha" , 0x0650FE }, - { (char*) "Brazil/East" , 0x0653C8 }, - { (char*) "Brazil/West" , 0x06596A }, - { (char*) "Canada/Atlantic" , 0x065BC4 }, - { (char*) "Canada/Central" , 0x066930 }, - { (char*) "Canada/Eastern" , 0x067470 }, - { (char*) "Canada/Mountain" , 0x068222 }, - { (char*) "Canada/Newfoundland" , 0x068B4A }, - { (char*) "Canada/Pacific" , 0x06999D }, - { (char*) "Canada/Saskatchewan" , 0x06A4F5 }, - { (char*) "Canada/Yukon" , 0x06A8D5 }, - { (char*) "CET" , 0x06AF2F }, - { (char*) "Chile/Continental" , 0x06B769 }, - { (char*) "Chile/EasterIsland" , 0x06C148 }, - { (char*) "CST6CDT" , 0x06C9FF }, - { (char*) "Cuba" , 0x06D311 }, - { (char*) "EET" , 0x06DC8D }, - { (char*) "Egypt" , 0x06E40D }, - { (char*) "Eire" , 0x06ED78 }, - { (char*) "EST" , 0x06FB28 }, - { (char*) "EST5EDT" , 0x06FBA6 }, - { (char*) "Etc/GMT" , 0x0704B8 }, - { (char*) "Etc/GMT+0" , 0x070536 }, - { (char*) "Etc/GMT+1" , 0x0705B4 }, - { (char*) "Etc/GMT+10" , 0x070634 }, - { (char*) "Etc/GMT+11" , 0x0706B5 }, - { (char*) "Etc/GMT+12" , 0x070736 }, - { (char*) "Etc/GMT+2" , 0x0707B7 }, - { (char*) "Etc/GMT+3" , 0x070837 }, - { (char*) "Etc/GMT+4" , 0x0708B7 }, - { (char*) "Etc/GMT+5" , 0x070937 }, - { (char*) "Etc/GMT+6" , 0x0709B7 }, - { (char*) "Etc/GMT+7" , 0x070A37 }, - { (char*) "Etc/GMT+8" , 0x070AB7 }, - { (char*) "Etc/GMT+9" , 0x070B37 }, - { (char*) "Etc/GMT-0" , 0x070BB7 }, - { (char*) "Etc/GMT-1" , 0x070C35 }, - { (char*) "Etc/GMT-10" , 0x070CB6 }, - { (char*) "Etc/GMT-11" , 0x070D38 }, - { (char*) "Etc/GMT-12" , 0x070DBA }, - { (char*) "Etc/GMT-13" , 0x070E3C }, - { (char*) "Etc/GMT-14" , 0x070EBE }, - { (char*) "Etc/GMT-2" , 0x070F40 }, - { (char*) "Etc/GMT-3" , 0x070FC1 }, - { (char*) "Etc/GMT-4" , 0x071042 }, - { (char*) "Etc/GMT-5" , 0x0710C3 }, - { (char*) "Etc/GMT-6" , 0x071144 }, - { (char*) "Etc/GMT-7" , 0x0711C5 }, - { (char*) "Etc/GMT-8" , 0x071246 }, - { (char*) "Etc/GMT-9" , 0x0712C7 }, - { (char*) "Etc/GMT0" , 0x071348 }, - { (char*) "Etc/Greenwich" , 0x0713C6 }, - { (char*) "Etc/UCT" , 0x071444 }, - { (char*) "Etc/Universal" , 0x0714C2 }, - { (char*) "Etc/UTC" , 0x071540 }, - { (char*) "Etc/Zulu" , 0x0715BE }, - { (char*) "Europe/Amsterdam" , 0x07163C }, - { (char*) "Europe/Andorra" , 0x0721A6 }, - { (char*) "Europe/Astrakhan" , 0x072880 }, - { (char*) "Europe/Athens" , 0x072D1D }, - { (char*) "Europe/Belfast" , 0x0735FF }, - { (char*) "Europe/Belgrade" , 0x07445B }, - { (char*) "Europe/Berlin" , 0x074BE7 }, - { (char*) "Europe/Bratislava" , 0x0754FC }, - { (char*) "Europe/Brussels" , 0x075E05 }, - { (char*) "Europe/Bucharest" , 0x076986 }, - { (char*) "Europe/Budapest" , 0x07721A }, - { (char*) "Europe/Busingen" , 0x077B66 }, - { (char*) "Europe/Chisinau" , 0x0782EF }, - { (char*) "Europe/Copenhagen" , 0x078C51 }, - { (char*) "Europe/Dublin" , 0x0794B6 }, - { (char*) "Europe/Gibraltar" , 0x07A266 }, - { (char*) "Europe/Guernsey" , 0x07AE6E }, - { (char*) "Europe/Helsinki" , 0x07BD0E }, - { (char*) "Europe/Isle_of_Man" , 0x07C486 }, - { (char*) "Europe/Istanbul" , 0x07D2D2 }, - { (char*) "Europe/Jersey" , 0x07DA6B }, - { (char*) "Europe/Kaliningrad" , 0x07E90B }, - { (char*) "Europe/Kiev" , 0x07EF00 }, - { (char*) "Europe/Kirov" , 0x07F754 }, - { (char*) "Europe/Kyiv" , 0x07FC0F }, - { (char*) "Europe/Lisbon" , 0x080472 }, - { (char*) "Europe/Ljubljana" , 0x08123A }, - { (char*) "Europe/London" , 0x0819C6 }, - { (char*) "Europe/Luxembourg" , 0x082822 }, - { (char*) "Europe/Madrid" , 0x0833B0 }, - { (char*) "Europe/Malta" , 0x083E02 }, - { (char*) "Europe/Mariehamn" , 0x08484A }, - { (char*) "Europe/Minsk" , 0x084FC2 }, - { (char*) "Europe/Monaco" , 0x0854E9 }, - { (char*) "Europe/Moscow" , 0x086075 }, - { (char*) "Europe/Nicosia" , 0x086694 }, - { (char*) "Europe/Oslo" , 0x086E72 }, - { (char*) "Europe/Paris" , 0x087732 }, - { (char*) "Europe/Podgorica" , 0x0882D0 }, - { (char*) "Europe/Prague" , 0x088A5C }, - { (char*) "Europe/Riga" , 0x089365 }, - { (char*) "Europe/Rome" , 0x089C07 }, - { (char*) "Europe/Samara" , 0x08A664 }, - { (char*) "Europe/San_Marino" , 0x08AB3A }, - { (char*) "Europe/Sarajevo" , 0x08B597 }, - { (char*) "Europe/Saratov" , 0x08BD23 }, - { (char*) "Europe/Simferopol" , 0x08C1D0 }, - { (char*) "Europe/Skopje" , 0x08C79F }, - { (char*) "Europe/Sofia" , 0x08CF2B }, - { (char*) "Europe/Stockholm" , 0x08D754 }, - { (char*) "Europe/Tallinn" , 0x08DED5 }, - { (char*) "Europe/Tirane" , 0x08E745 }, - { (char*) "Europe/Tiraspol" , 0x08EF75 }, - { (char*) "Europe/Ulyanovsk" , 0x08F8D7 }, - { (char*) "Europe/Uzhgorod" , 0x08FDDA }, - { (char*) "Europe/Vaduz" , 0x09062E }, - { (char*) "Europe/Vatican" , 0x090D9A }, - { (char*) "Europe/Vienna" , 0x0917F7 }, - { (char*) "Europe/Vilnius" , 0x09209B }, - { (char*) "Europe/Volgograd" , 0x092919 }, - { (char*) "Europe/Warsaw" , 0x092DE0 }, - { (char*) "Europe/Zagreb" , 0x09384A }, - { (char*) "Europe/Zaporozhye" , 0x093FD6 }, - { (char*) "Europe/Zurich" , 0x09482A }, - { (char*) "Factory" , 0x094FAB }, - { (char*) "GB" , 0x09502B }, - { (char*) "GB-Eire" , 0x095E87 }, - { (char*) "GMT" , 0x096CE3 }, - { (char*) "GMT+0" , 0x096D61 }, - { (char*) "GMT-0" , 0x096DDF }, - { (char*) "GMT0" , 0x096E5D }, - { (char*) "Greenwich" , 0x096EDB }, - { (char*) "Hongkong" , 0x096F59 }, - { (char*) "HST" , 0x097436 }, - { (char*) "Iceland" , 0x0974B5 }, - { (char*) "Indian/Antananarivo" , 0x097555 }, - { (char*) "Indian/Chagos" , 0x09763C }, - { (char*) "Indian/Christmas" , 0x097701 }, - { (char*) "Indian/Cocos" , 0x0977A4 }, - { (char*) "Indian/Comoro" , 0x097850 }, - { (char*) "Indian/Kerguelen" , 0x0978F1 }, - { (char*) "Indian/Mahe" , 0x097994 }, - { (char*) "Indian/Maldives" , 0x097A37 }, - { (char*) "Indian/Mauritius" , 0x097AFC }, - { (char*) "Indian/Mayotte" , 0x097BEB }, - { (char*) "Indian/Reunion" , 0x097C8C }, - { (char*) "Iran" , 0x097D2F }, - { (char*) "Israel" , 0x09821B }, - { (char*) "Jamaica" , 0x098B7B }, - { (char*) "Japan" , 0x098D69 }, - { (char*) "Kwajalein" , 0x098EAA }, - { (char*) "Libya" , 0x098FE4 }, - { (char*) "MET" , 0x099261 }, - { (char*) "Mexico/BajaNorte" , 0x099A9B }, - { (char*) "Mexico/BajaSur" , 0x09A3ED }, - { (char*) "Mexico/General" , 0x09A861 }, - { (char*) "MST" , 0x09AD33 }, - { (char*) "MST7MDT" , 0x09ADB1 }, - { (char*) "Navajo" , 0x09B6C3 }, - { (char*) "NZ" , 0x09C06B }, - { (char*) "NZ-CHAT" , 0x09C9FC }, - { (char*) "Pacific/Apia" , 0x09D20E }, - { (char*) "Pacific/Auckland" , 0x09D470 }, - { (char*) "Pacific/Bougainville" , 0x09DE14 }, - { (char*) "Pacific/Chatham" , 0x09DF2A }, - { (char*) "Pacific/Chuuk" , 0x09E74B }, - { (char*) "Pacific/Easter" , 0x09E865 }, - { (char*) "Pacific/Efate" , 0x09F129 }, - { (char*) "Pacific/Enderbury" , 0x09F341 }, - { (char*) "Pacific/Fakaofo" , 0x09F429 }, - { (char*) "Pacific/Fiji" , 0x09F4EF }, - { (char*) "Pacific/Funafuti" , 0x09F72F }, - { (char*) "Pacific/Galapagos" , 0x09F7D3 }, - { (char*) "Pacific/Gambier" , 0x09F8D0 }, - { (char*) "Pacific/Guadalcanal" , 0x09F981 }, - { (char*) "Pacific/Guam" , 0x09FA25 }, - { (char*) "Pacific/Honolulu" , 0x09FC1F }, - { (char*) "Pacific/Johnston" , 0x09FD7A }, - { (char*) "Pacific/Kanton" , 0x09FECF }, - { (char*) "Pacific/Kiritimati" , 0x09FFC6 }, - { (char*) "Pacific/Kosrae" , 0x0A00BE }, - { (char*) "Pacific/Kwajalein" , 0x0A0221 }, - { (char*) "Pacific/Majuro" , 0x0A0364 }, - { (char*) "Pacific/Marquesas" , 0x0A04B0 }, - { (char*) "Pacific/Midway" , 0x0A056C }, - { (char*) "Pacific/Nauru" , 0x0A065F }, - { (char*) "Pacific/Niue" , 0x0A0759 }, - { (char*) "Pacific/Norfolk" , 0x0A0822 }, - { (char*) "Pacific/Noumea" , 0x0A0B90 }, - { (char*) "Pacific/Pago_Pago" , 0x0A0CBE }, - { (char*) "Pacific/Palau" , 0x0A0D79 }, - { (char*) "Pacific/Pitcairn" , 0x0A0E2B }, - { (char*) "Pacific/Pohnpei" , 0x0A0EF3 }, - { (char*) "Pacific/Ponape" , 0x0A102E }, - { (char*) "Pacific/Port_Moresby" , 0x0A10D2 }, - { (char*) "Pacific/Rarotonga" , 0x0A11A2 }, - { (char*) "Pacific/Saipan" , 0x0A13FB }, - { (char*) "Pacific/Samoa" , 0x0A15E7 }, - { (char*) "Pacific/Tahiti" , 0x0A16A2 }, - { (char*) "Pacific/Tarawa" , 0x0A1754 }, - { (char*) "Pacific/Tongatapu" , 0x0A1807 }, - { (char*) "Pacific/Truk" , 0x0A1979 }, - { (char*) "Pacific/Wake" , 0x0A1A31 }, - { (char*) "Pacific/Wallis" , 0x0A1AE0 }, - { (char*) "Pacific/Yap" , 0x0A1B84 }, - { (char*) "Poland" , 0x0A1C3C }, - { (char*) "Portugal" , 0x0A26A6 }, - { (char*) "PRC" , 0x0A345B }, - { (char*) "PST8PDT" , 0x0A3698 }, - { (char*) "ROC" , 0x0A3FAA }, - { (char*) "ROK" , 0x0A42AF }, - { (char*) "Singapore" , 0x0A4524 }, - { (char*) "Turkey" , 0x0A46C1 }, - { (char*) "UCT" , 0x0A4E5A }, - { (char*) "Universal" , 0x0A4ED8 }, - { (char*) "US/Alaska" , 0x0A4F56 }, - { (char*) "US/Aleutian" , 0x0A58A5 }, - { (char*) "US/Arizona" , 0x0A61E5 }, - { (char*) "US/Central" , 0x0A6359 }, - { (char*) "US/East-Indiana" , 0x0A716D }, - { (char*) "US/Eastern" , 0x0A780B }, - { (char*) "US/Hawaii" , 0x0A85F7 }, - { (char*) "US/Indiana-Starke" , 0x0A874C }, - { (char*) "US/Michigan" , 0x0A90E4 }, - { (char*) "US/Mountain" , 0x0A99A6 }, - { (char*) "US/Pacific" , 0x0AA34E }, - { (char*) "US/Samoa" , 0x0AAE7E }, - { (char*) "UTC" , 0x0AAF39 }, - { (char*) "W-SU" , 0x0AAFB7 }, - { (char*) "WET" , 0x0AB5C2 }, - { (char*) "Zulu" , 0x0ABD3F }, + { (char*) "America/Eirunepe" , 0x014DDC }, + { (char*) "America/El_Salvador" , 0x015079 }, + { (char*) "America/Ensenada" , 0x015165 }, + { (char*) "America/Fort_Nelson" , 0x015AB7 }, + { (char*) "America/Fort_Wayne" , 0x016397 }, + { (char*) "America/Fortaleza" , 0x016A35 }, + { (char*) "America/Glace_Bay" , 0x016D25 }, + { (char*) "America/Godthab" , 0x0175DC }, + { (char*) "America/Goose_Bay" , 0x017D49 }, + { (char*) "America/Grand_Turk" , 0x0189FF }, + { (char*) "America/Grenada" , 0x019135 }, + { (char*) "America/Guadeloupe" , 0x0191D5 }, + { (char*) "America/Guatemala" , 0x019275 }, + { (char*) "America/Guayaquil" , 0x019399 }, + { (char*) "America/Guyana" , 0x01949F }, + { (char*) "America/Halifax" , 0x0195A3 }, + { (char*) "America/Havana" , 0x01A32D }, + { (char*) "America/Hermosillo" , 0x01ACA9 }, + { (char*) "America/Indiana/Indianapolis" , 0x01AE83 }, + { (char*) "America/Indiana/Knox" , 0x01B53A }, + { (char*) "America/Indiana/Marengo" , 0x01BEE7 }, + { (char*) "America/Indiana/Petersburg" , 0x01C5D4 }, + { (char*) "America/Indiana/Tell_City" , 0x01CD73 }, + { (char*) "America/Indiana/Vevay" , 0x01D437 }, + { (char*) "America/Indiana/Vincennes" , 0x01D9F3 }, + { (char*) "America/Indiana/Winamac" , 0x01E0C9 }, + { (char*) "America/Indianapolis" , 0x01E7ED }, + { (char*) "America/Inuvik" , 0x01EE8B }, + { (char*) "America/Iqaluit" , 0x01F6C5 }, + { (char*) "America/Jamaica" , 0x01FF84 }, + { (char*) "America/Jujuy" , 0x020172 }, + { (char*) "America/Juneau" , 0x020588 }, + { (char*) "America/Kentucky/Louisville" , 0x020ED9 }, + { (char*) "America/Kentucky/Monticello" , 0x0219E7 }, + { (char*) "America/Knox_IN" , 0x022347 }, + { (char*) "America/Kralendijk" , 0x022CDF }, + { (char*) "America/La_Paz" , 0x022DE1 }, + { (char*) "America/Lima" , 0x022EC7 }, + { (char*) "America/Los_Angeles" , 0x02305B }, + { (char*) "America/Louisville" , 0x023B92 }, + { (char*) "America/Lower_Princes" , 0x024682 }, + { (char*) "America/Maceio" , 0x024784 }, + { (char*) "America/Managua" , 0x024A7A }, + { (char*) "America/Manaus" , 0x024C34 }, + { (char*) "America/Marigot" , 0x024E9D }, + { (char*) "America/Martinique" , 0x024F9F }, + { (char*) "America/Matamoros" , 0x025093 }, + { (char*) "America/Mazatlan" , 0x025655 }, + { (char*) "America/Mendoza" , 0x025AFB }, + { (char*) "America/Menominee" , 0x025F2D }, + { (char*) "America/Merida" , 0x02683A }, + { (char*) "America/Metlakatla" , 0x026C43 }, + { (char*) "America/Mexico_City" , 0x0271F5 }, + { (char*) "America/Miquelon" , 0x0276D5 }, + { (char*) "America/Moncton" , 0x027D55 }, + { (char*) "America/Monterrey" , 0x0289CB }, + { (char*) "America/Montevideo" , 0x028DE1 }, + { (char*) "America/Montreal" , 0x0293C5 }, + { (char*) "America/Montserrat" , 0x02A177 }, + { (char*) "America/Nassau" , 0x02A217 }, + { (char*) "America/New_York" , 0x02AB77 }, + { (char*) "America/Nipigon" , 0x02B977 }, + { (char*) "America/Nome" , 0x02C729 }, + { (char*) "America/Noronha" , 0x02D081 }, + { (char*) "America/North_Dakota/Beulah" , 0x02D35B }, + { (char*) "America/North_Dakota/Center" , 0x02DCD8 }, + { (char*) "America/North_Dakota/New_Salem" , 0x02E655 }, + { (char*) "America/Nuuk" , 0x02EFD8 }, + { (char*) "America/Ojinaga" , 0x02F756 }, + { (char*) "America/Panama" , 0x02FD72 }, + { (char*) "America/Pangnirtung" , 0x02FE34 }, + { (char*) "America/Paramaribo" , 0x0306DA }, + { (char*) "America/Phoenix" , 0x0307DE }, + { (char*) "America/Port-au-Prince" , 0x03096A }, + { (char*) "America/Port_of_Spain" , 0x030F10 }, + { (char*) "America/Porto_Acre" , 0x030FB0 }, + { (char*) "America/Porto_Velho" , 0x031222 }, + { (char*) "America/Puerto_Rico" , 0x031468 }, + { (char*) "America/Punta_Arenas" , 0x03156A }, + { (char*) "America/Rainy_River" , 0x031CF8 }, + { (char*) "America/Rankin_Inlet" , 0x032838 }, + { (char*) "America/Recife" , 0x03306C }, + { (char*) "America/Regina" , 0x033340 }, + { (char*) "America/Resolute" , 0x033735 }, + { (char*) "America/Rio_Branco" , 0x033F6A }, + { (char*) "America/Rosario" , 0x0341E0 }, + { (char*) "America/Santa_Isabel" , 0x034612 }, + { (char*) "America/Santarem" , 0x034F64 }, + { (char*) "America/Santiago" , 0x0351C7 }, + { (char*) "America/Santo_Domingo" , 0x035BB3 }, + { (char*) "America/Sao_Paulo" , 0x035D89 }, + { (char*) "America/Scoresbysund" , 0x036361 }, + { (char*) "America/Shiprock" , 0x036B19 }, + { (char*) "America/Sitka" , 0x0374C1 }, + { (char*) "America/St_Barthelemy" , 0x037DF9 }, + { (char*) "America/St_Johns" , 0x037EFB }, + { (char*) "America/St_Kitts" , 0x038D69 }, + { (char*) "America/St_Lucia" , 0x038E09 }, + { (char*) "America/St_Thomas" , 0x038ECB }, + { (char*) "America/St_Vincent" , 0x038F6B }, + { (char*) "America/Swift_Current" , 0x03902D }, + { (char*) "America/Tegucigalpa" , 0x03927B }, + { (char*) "America/Thule" , 0x039383 }, + { (char*) "America/Thunder_Bay" , 0x03997B }, + { (char*) "America/Tijuana" , 0x03A72D }, + { (char*) "America/Toronto" , 0x03B08E }, + { (char*) "America/Tortola" , 0x03BE5E }, + { (char*) "America/Vancouver" , 0x03BEFE }, + { (char*) "America/Virgin" , 0x03CA6F }, + { (char*) "America/Whitehorse" , 0x03CB71 }, + { (char*) "America/Winnipeg" , 0x03D1DD }, + { (char*) "America/Yakutat" , 0x03DD3A }, + { (char*) "America/Yellowknife" , 0x03E657 }, + { (char*) "Antarctica/Casey" , 0x03EF7F }, + { (char*) "Antarctica/Davis" , 0x03F137 }, + { (char*) "Antarctica/DumontDUrville" , 0x03F263 }, + { (char*) "Antarctica/Macquarie" , 0x03F333 }, + { (char*) "Antarctica/Mawson" , 0x03FC23 }, + { (char*) "Antarctica/McMurdo" , 0x03FCEE }, + { (char*) "Antarctica/Palmer" , 0x0404E9 }, + { (char*) "Antarctica/Rothera" , 0x040A77 }, + { (char*) "Antarctica/South_Pole" , 0x040B20 }, + { (char*) "Antarctica/Syowa" , 0x0414B1 }, + { (char*) "Antarctica/Troll" , 0x041559 }, + { (char*) "Antarctica/Vostok" , 0x0419E6 }, + { (char*) "Arctic/Longyearbyen" , 0x041ACD }, + { (char*) "Asia/Aden" , 0x0423D3 }, + { (char*) "Asia/Almaty" , 0x042476 }, + { (char*) "Asia/Amman" , 0x04286B }, + { (char*) "Asia/Anadyr" , 0x042E10 }, + { (char*) "Asia/Aqtau" , 0x0432C5 }, + { (char*) "Asia/Aqtobe" , 0x0436AF }, + { (char*) "Asia/Ashgabat" , 0x043AAD }, + { (char*) "Asia/Ashkhabad" , 0x043D16 }, + { (char*) "Asia/Atyrau" , 0x043F7F }, + { (char*) "Asia/Baghdad" , 0x044371 }, + { (char*) "Asia/Bahrain" , 0x044746 }, + { (char*) "Asia/Baku" , 0x044831 }, + { (char*) "Asia/Bangkok" , 0x044CFA }, + { (char*) "Asia/Barnaul" , 0x044DBF }, + { (char*) "Asia/Beirut" , 0x045290 }, + { (char*) "Asia/Bishkek" , 0x045B06 }, + { (char*) "Asia/Brunei" , 0x045EDB }, + { (char*) "Asia/Calcutta" , 0x045FA4 }, + { (char*) "Asia/Chita" , 0x0460CD }, + { (char*) "Asia/Choibalsan" , 0x0465A4 }, + { (char*) "Asia/Chongqing" , 0x046969 }, + { (char*) "Asia/Chungking" , 0x046BA6 }, + { (char*) "Asia/Colombo" , 0x046DE3 }, + { (char*) "Asia/Dacca" , 0x046F55 }, + { (char*) "Asia/Damascus" , 0x0470A4 }, + { (char*) "Asia/Dhaka" , 0x047801 }, + { (char*) "Asia/Dili" , 0x047950 }, + { (char*) "Asia/Dubai" , 0x047A31 }, + { (char*) "Asia/Dushanbe" , 0x047AD4 }, + { (char*) "Asia/Famagusta" , 0x047D21 }, + { (char*) "Asia/Gaza" , 0x048528 }, + { (char*) "Asia/Harbin" , 0x049454 }, + { (char*) "Asia/Hebron" , 0x049691 }, + { (char*) "Asia/Ho_Chi_Minh" , 0x04A5D8 }, + { (char*) "Asia/Hong_Kong" , 0x04A735 }, + { (char*) "Asia/Hovd" , 0x04AC12 }, + { (char*) "Asia/Irkutsk" , 0x04AFB6 }, + { (char*) "Asia/Istanbul" , 0x04B4A9 }, + { (char*) "Asia/Jakarta" , 0x04BC42 }, + { (char*) "Asia/Jayapura" , 0x04BDDA }, + { (char*) "Asia/Jerusalem" , 0x04BEF9 }, + { (char*) "Asia/Kabul" , 0x04C859 }, + { (char*) "Asia/Kamchatka" , 0x04C927 }, + { (char*) "Asia/Karachi" , 0x04CDC5 }, + { (char*) "Asia/Kashgar" , 0x04CF4C }, + { (char*) "Asia/Kathmandu" , 0x04CFEF }, + { (char*) "Asia/Katmandu" , 0x04D0C1 }, + { (char*) "Asia/Khandyga" , 0x04D193 }, + { (char*) "Asia/Kolkata" , 0x04D6A6 }, + { (char*) "Asia/Krasnoyarsk" , 0x04D7CF }, + { (char*) "Asia/Kuala_Lumpur" , 0x04DC9D }, + { (char*) "Asia/Kuching" , 0x04DE4E }, + { (char*) "Asia/Kuwait" , 0x04E03D }, + { (char*) "Asia/Macao" , 0x04E0E0 }, + { (char*) "Asia/Macau" , 0x04E5B7 }, + { (char*) "Asia/Magadan" , 0x04EA8E }, + { (char*) "Asia/Makassar" , 0x04EF62 }, + { (char*) "Asia/Manila" , 0x04F0B5 }, + { (char*) "Asia/Muscat" , 0x04F209 }, + { (char*) "Asia/Nicosia" , 0x04F2AC }, + { (char*) "Asia/Novokuznetsk" , 0x04FA98 }, + { (char*) "Asia/Novosibirsk" , 0x04FF34 }, + { (char*) "Asia/Omsk" , 0x05040B }, + { (char*) "Asia/Oral" , 0x0508CD }, + { (char*) "Asia/Phnom_Penh" , 0x050CC7 }, + { (char*) "Asia/Pontianak" , 0x050DEC }, + { (char*) "Asia/Pyongyang" , 0x050F6F }, + { (char*) "Asia/Qatar" , 0x051068 }, + { (char*) "Asia/Qostanay" , 0x05112D }, + { (char*) "Asia/Qyzylorda" , 0x051538 }, + { (char*) "Asia/Rangoon" , 0x051954 }, + { (char*) "Asia/Riyadh" , 0x051A5E }, + { (char*) "Asia/Saigon" , 0x051B01 }, + { (char*) "Asia/Sakhalin" , 0x051C5E }, + { (char*) "Asia/Samarkand" , 0x052126 }, + { (char*) "Asia/Seoul" , 0x052376 }, + { (char*) "Asia/Shanghai" , 0x0525EB }, + { (char*) "Asia/Singapore" , 0x052834 }, + { (char*) "Asia/Srednekolymsk" , 0x0529D1 }, + { (char*) "Asia/Taipei" , 0x052EA5 }, + { (char*) "Asia/Tashkent" , 0x0531AA }, + { (char*) "Asia/Tbilisi" , 0x053408 }, + { (char*) "Asia/Tehran" , 0x053811 }, + { (char*) "Asia/Tel_Aviv" , 0x053CFD }, + { (char*) "Asia/Thimbu" , 0x05465D }, + { (char*) "Asia/Thimphu" , 0x054726 }, + { (char*) "Asia/Tokyo" , 0x0547EF }, + { (char*) "Asia/Tomsk" , 0x054930 }, + { (char*) "Asia/Ujung_Pandang" , 0x054E01 }, + { (char*) "Asia/Ulaanbaatar" , 0x054F0B }, + { (char*) "Asia/Ulan_Bator" , 0x055294 }, + { (char*) "Asia/Urumqi" , 0x05560D }, + { (char*) "Asia/Ust-Nera" , 0x0556BD }, + { (char*) "Asia/Vientiane" , 0x055BB3 }, + { (char*) "Asia/Vladivostok" , 0x055CF4 }, + { (char*) "Asia/Yakutsk" , 0x0561BD }, + { (char*) "Asia/Yangon" , 0x056685 }, + { (char*) "Asia/Yekaterinburg" , 0x05678F }, + { (char*) "Asia/Yerevan" , 0x056C76 }, + { (char*) "Atlantic/Azores" , 0x0570F3 }, + { (char*) "Atlantic/Bermuda" , 0x057EAF }, + { (char*) "Atlantic/Canary" , 0x058817 }, + { (char*) "Atlantic/Cape_Verde" , 0x058F9A }, + { (char*) "Atlantic/Faeroe" , 0x0590A6 }, + { (char*) "Atlantic/Faroe" , 0x0597C9 }, + { (char*) "Atlantic/Jan_Mayen" , 0x059EEC }, + { (char*) "Atlantic/Madeira" , 0x05A7F2 }, + { (char*) "Atlantic/Reykjavik" , 0x05B5BC }, + { (char*) "Atlantic/South_Georgia" , 0x05BA52 }, + { (char*) "Atlantic/St_Helena" , 0x05BAF4 }, + { (char*) "Atlantic/Stanley" , 0x05BBB6 }, + { (char*) "Australia/ACT" , 0x05C072 }, + { (char*) "Australia/Adelaide" , 0x05C90C }, + { (char*) "Australia/Brisbane" , 0x05D1C7 }, + { (char*) "Australia/Broken_Hill" , 0x05D38D }, + { (char*) "Australia/Canberra" , 0x05DC6A }, + { (char*) "Australia/Currie" , 0x05E504 }, + { (char*) "Australia/Darwin" , 0x05EE46 }, + { (char*) "Australia/Eucla" , 0x05EFA9 }, + { (char*) "Australia/Hobart" , 0x05F196 }, + { (char*) "Australia/LHI" , 0x05FAE0 }, + { (char*) "Australia/Lindeman" , 0x060222 }, + { (char*) "Australia/Lord_Howe" , 0x060428 }, + { (char*) "Australia/Melbourne" , 0x060B7A }, + { (char*) "Australia/North" , 0x06141C }, + { (char*) "Australia/NSW" , 0x06156D }, + { (char*) "Australia/Perth" , 0x061E07 }, + { (char*) "Australia/Queensland" , 0x061FEF }, + { (char*) "Australia/South" , 0x06219E }, + { (char*) "Australia/Sydney" , 0x062A4A }, + { (char*) "Australia/Tasmania" , 0x063300 }, + { (char*) "Australia/Victoria" , 0x063C42 }, + { (char*) "Australia/West" , 0x0644DC }, + { (char*) "Australia/Yancowinna" , 0x0646A6 }, + { (char*) "Brazil/Acre" , 0x064F67 }, + { (char*) "Brazil/DeNoronha" , 0x0651D9 }, + { (char*) "Brazil/East" , 0x0654A3 }, + { (char*) "Brazil/West" , 0x065A45 }, + { (char*) "Canada/Atlantic" , 0x065C9F }, + { (char*) "Canada/Central" , 0x066A0B }, + { (char*) "Canada/Eastern" , 0x06754B }, + { (char*) "Canada/Mountain" , 0x0682FD }, + { (char*) "Canada/Newfoundland" , 0x068C25 }, + { (char*) "Canada/Pacific" , 0x069A78 }, + { (char*) "Canada/Saskatchewan" , 0x06A5D0 }, + { (char*) "Canada/Yukon" , 0x06A9B0 }, + { (char*) "CET" , 0x06B00A }, + { (char*) "Chile/Continental" , 0x06B844 }, + { (char*) "Chile/EasterIsland" , 0x06C223 }, + { (char*) "CST6CDT" , 0x06CADA }, + { (char*) "Cuba" , 0x06D3EC }, + { (char*) "EET" , 0x06DD68 }, + { (char*) "Egypt" , 0x06E4E8 }, + { (char*) "Eire" , 0x06EE53 }, + { (char*) "EST" , 0x06FC03 }, + { (char*) "EST5EDT" , 0x06FC81 }, + { (char*) "Etc/GMT" , 0x070593 }, + { (char*) "Etc/GMT+0" , 0x070611 }, + { (char*) "Etc/GMT+1" , 0x07068F }, + { (char*) "Etc/GMT+10" , 0x07070F }, + { (char*) "Etc/GMT+11" , 0x070790 }, + { (char*) "Etc/GMT+12" , 0x070811 }, + { (char*) "Etc/GMT+2" , 0x070892 }, + { (char*) "Etc/GMT+3" , 0x070912 }, + { (char*) "Etc/GMT+4" , 0x070992 }, + { (char*) "Etc/GMT+5" , 0x070A12 }, + { (char*) "Etc/GMT+6" , 0x070A92 }, + { (char*) "Etc/GMT+7" , 0x070B12 }, + { (char*) "Etc/GMT+8" , 0x070B92 }, + { (char*) "Etc/GMT+9" , 0x070C12 }, + { (char*) "Etc/GMT-0" , 0x070C92 }, + { (char*) "Etc/GMT-1" , 0x070D10 }, + { (char*) "Etc/GMT-10" , 0x070D91 }, + { (char*) "Etc/GMT-11" , 0x070E13 }, + { (char*) "Etc/GMT-12" , 0x070E95 }, + { (char*) "Etc/GMT-13" , 0x070F17 }, + { (char*) "Etc/GMT-14" , 0x070F99 }, + { (char*) "Etc/GMT-2" , 0x07101B }, + { (char*) "Etc/GMT-3" , 0x07109C }, + { (char*) "Etc/GMT-4" , 0x07111D }, + { (char*) "Etc/GMT-5" , 0x07119E }, + { (char*) "Etc/GMT-6" , 0x07121F }, + { (char*) "Etc/GMT-7" , 0x0712A0 }, + { (char*) "Etc/GMT-8" , 0x071321 }, + { (char*) "Etc/GMT-9" , 0x0713A2 }, + { (char*) "Etc/GMT0" , 0x071423 }, + { (char*) "Etc/Greenwich" , 0x0714A1 }, + { (char*) "Etc/UCT" , 0x07151F }, + { (char*) "Etc/Universal" , 0x07159D }, + { (char*) "Etc/UTC" , 0x07161B }, + { (char*) "Etc/Zulu" , 0x071699 }, + { (char*) "Europe/Amsterdam" , 0x071717 }, + { (char*) "Europe/Andorra" , 0x072281 }, + { (char*) "Europe/Astrakhan" , 0x07295B }, + { (char*) "Europe/Athens" , 0x072DF8 }, + { (char*) "Europe/Belfast" , 0x0736DA }, + { (char*) "Europe/Belgrade" , 0x074536 }, + { (char*) "Europe/Berlin" , 0x074CC2 }, + { (char*) "Europe/Bratislava" , 0x0755D7 }, + { (char*) "Europe/Brussels" , 0x075EE0 }, + { (char*) "Europe/Bucharest" , 0x076A61 }, + { (char*) "Europe/Budapest" , 0x0772F5 }, + { (char*) "Europe/Busingen" , 0x077C41 }, + { (char*) "Europe/Chisinau" , 0x0783CA }, + { (char*) "Europe/Copenhagen" , 0x078D2C }, + { (char*) "Europe/Dublin" , 0x079591 }, + { (char*) "Europe/Gibraltar" , 0x07A341 }, + { (char*) "Europe/Guernsey" , 0x07AF49 }, + { (char*) "Europe/Helsinki" , 0x07BDE9 }, + { (char*) "Europe/Isle_of_Man" , 0x07C561 }, + { (char*) "Europe/Istanbul" , 0x07D3AD }, + { (char*) "Europe/Jersey" , 0x07DB46 }, + { (char*) "Europe/Kaliningrad" , 0x07E9E6 }, + { (char*) "Europe/Kiev" , 0x07EFDB }, + { (char*) "Europe/Kirov" , 0x07F82F }, + { (char*) "Europe/Kyiv" , 0x07FCEA }, + { (char*) "Europe/Lisbon" , 0x08054D }, + { (char*) "Europe/Ljubljana" , 0x081315 }, + { (char*) "Europe/London" , 0x081AA1 }, + { (char*) "Europe/Luxembourg" , 0x0828FD }, + { (char*) "Europe/Madrid" , 0x08348B }, + { (char*) "Europe/Malta" , 0x083EDD }, + { (char*) "Europe/Mariehamn" , 0x084925 }, + { (char*) "Europe/Minsk" , 0x08509D }, + { (char*) "Europe/Monaco" , 0x0855C4 }, + { (char*) "Europe/Moscow" , 0x086150 }, + { (char*) "Europe/Nicosia" , 0x08676F }, + { (char*) "Europe/Oslo" , 0x086F4D }, + { (char*) "Europe/Paris" , 0x08780D }, + { (char*) "Europe/Podgorica" , 0x0883AB }, + { (char*) "Europe/Prague" , 0x088B37 }, + { (char*) "Europe/Riga" , 0x089440 }, + { (char*) "Europe/Rome" , 0x089CE2 }, + { (char*) "Europe/Samara" , 0x08A73F }, + { (char*) "Europe/San_Marino" , 0x08AC15 }, + { (char*) "Europe/Sarajevo" , 0x08B672 }, + { (char*) "Europe/Saratov" , 0x08BDFE }, + { (char*) "Europe/Simferopol" , 0x08C2AB }, + { (char*) "Europe/Skopje" , 0x08C87A }, + { (char*) "Europe/Sofia" , 0x08D006 }, + { (char*) "Europe/Stockholm" , 0x08D82F }, + { (char*) "Europe/Tallinn" , 0x08DFB0 }, + { (char*) "Europe/Tirane" , 0x08E820 }, + { (char*) "Europe/Tiraspol" , 0x08F050 }, + { (char*) "Europe/Ulyanovsk" , 0x08F9B2 }, + { (char*) "Europe/Uzhgorod" , 0x08FEB5 }, + { (char*) "Europe/Vaduz" , 0x090709 }, + { (char*) "Europe/Vatican" , 0x090E75 }, + { (char*) "Europe/Vienna" , 0x0918D2 }, + { (char*) "Europe/Vilnius" , 0x092176 }, + { (char*) "Europe/Volgograd" , 0x0929F4 }, + { (char*) "Europe/Warsaw" , 0x092EBB }, + { (char*) "Europe/Zagreb" , 0x093925 }, + { (char*) "Europe/Zaporozhye" , 0x0940B1 }, + { (char*) "Europe/Zurich" , 0x094905 }, + { (char*) "Factory" , 0x095086 }, + { (char*) "GB" , 0x095106 }, + { (char*) "GB-Eire" , 0x095F62 }, + { (char*) "GMT" , 0x096DBE }, + { (char*) "GMT+0" , 0x096E3C }, + { (char*) "GMT-0" , 0x096EBA }, + { (char*) "GMT0" , 0x096F38 }, + { (char*) "Greenwich" , 0x096FB6 }, + { (char*) "Hongkong" , 0x097034 }, + { (char*) "HST" , 0x097511 }, + { (char*) "Iceland" , 0x097590 }, + { (char*) "Indian/Antananarivo" , 0x097630 }, + { (char*) "Indian/Chagos" , 0x097717 }, + { (char*) "Indian/Christmas" , 0x0977DC }, + { (char*) "Indian/Cocos" , 0x09787F }, + { (char*) "Indian/Comoro" , 0x09792B }, + { (char*) "Indian/Kerguelen" , 0x0979CC }, + { (char*) "Indian/Mahe" , 0x097A6F }, + { (char*) "Indian/Maldives" , 0x097B12 }, + { (char*) "Indian/Mauritius" , 0x097BD7 }, + { (char*) "Indian/Mayotte" , 0x097CC6 }, + { (char*) "Indian/Reunion" , 0x097D67 }, + { (char*) "Iran" , 0x097E0A }, + { (char*) "Israel" , 0x0982F6 }, + { (char*) "Jamaica" , 0x098C56 }, + { (char*) "Japan" , 0x098E44 }, + { (char*) "Kwajalein" , 0x098F85 }, + { (char*) "Libya" , 0x0990BF }, + { (char*) "MET" , 0x09933C }, + { (char*) "Mexico/BajaNorte" , 0x099B76 }, + { (char*) "Mexico/BajaSur" , 0x09A4C8 }, + { (char*) "Mexico/General" , 0x09A93C }, + { (char*) "MST" , 0x09AE0E }, + { (char*) "MST7MDT" , 0x09AE8C }, + { (char*) "Navajo" , 0x09B79E }, + { (char*) "NZ" , 0x09C146 }, + { (char*) "NZ-CHAT" , 0x09CAD7 }, + { (char*) "Pacific/Apia" , 0x09D2E9 }, + { (char*) "Pacific/Auckland" , 0x09D54B }, + { (char*) "Pacific/Bougainville" , 0x09DEEF }, + { (char*) "Pacific/Chatham" , 0x09E005 }, + { (char*) "Pacific/Chuuk" , 0x09E826 }, + { (char*) "Pacific/Easter" , 0x09E940 }, + { (char*) "Pacific/Efate" , 0x09F204 }, + { (char*) "Pacific/Enderbury" , 0x09F41C }, + { (char*) "Pacific/Fakaofo" , 0x09F504 }, + { (char*) "Pacific/Fiji" , 0x09F5CA }, + { (char*) "Pacific/Funafuti" , 0x09F80A }, + { (char*) "Pacific/Galapagos" , 0x09F8AE }, + { (char*) "Pacific/Gambier" , 0x09F9AB }, + { (char*) "Pacific/Guadalcanal" , 0x09FA5C }, + { (char*) "Pacific/Guam" , 0x09FB00 }, + { (char*) "Pacific/Honolulu" , 0x09FCFA }, + { (char*) "Pacific/Johnston" , 0x09FE55 }, + { (char*) "Pacific/Kanton" , 0x09FFAA }, + { (char*) "Pacific/Kiritimati" , 0x0A00A1 }, + { (char*) "Pacific/Kosrae" , 0x0A0199 }, + { (char*) "Pacific/Kwajalein" , 0x0A02FC }, + { (char*) "Pacific/Majuro" , 0x0A043F }, + { (char*) "Pacific/Marquesas" , 0x0A058B }, + { (char*) "Pacific/Midway" , 0x0A0647 }, + { (char*) "Pacific/Nauru" , 0x0A073A }, + { (char*) "Pacific/Niue" , 0x0A0834 }, + { (char*) "Pacific/Norfolk" , 0x0A08FD }, + { (char*) "Pacific/Noumea" , 0x0A0C6B }, + { (char*) "Pacific/Pago_Pago" , 0x0A0D99 }, + { (char*) "Pacific/Palau" , 0x0A0E54 }, + { (char*) "Pacific/Pitcairn" , 0x0A0F06 }, + { (char*) "Pacific/Pohnpei" , 0x0A0FCE }, + { (char*) "Pacific/Ponape" , 0x0A1109 }, + { (char*) "Pacific/Port_Moresby" , 0x0A11AD }, + { (char*) "Pacific/Rarotonga" , 0x0A127D }, + { (char*) "Pacific/Saipan" , 0x0A14D6 }, + { (char*) "Pacific/Samoa" , 0x0A16C2 }, + { (char*) "Pacific/Tahiti" , 0x0A177D }, + { (char*) "Pacific/Tarawa" , 0x0A182F }, + { (char*) "Pacific/Tongatapu" , 0x0A18E2 }, + { (char*) "Pacific/Truk" , 0x0A1A54 }, + { (char*) "Pacific/Wake" , 0x0A1B0C }, + { (char*) "Pacific/Wallis" , 0x0A1BBB }, + { (char*) "Pacific/Yap" , 0x0A1C5F }, + { (char*) "Poland" , 0x0A1D17 }, + { (char*) "Portugal" , 0x0A2781 }, + { (char*) "PRC" , 0x0A3536 }, + { (char*) "PST8PDT" , 0x0A3773 }, + { (char*) "ROC" , 0x0A4085 }, + { (char*) "ROK" , 0x0A438A }, + { (char*) "Singapore" , 0x0A45FF }, + { (char*) "Turkey" , 0x0A479C }, + { (char*) "UCT" , 0x0A4F35 }, + { (char*) "Universal" , 0x0A4FB3 }, + { (char*) "US/Alaska" , 0x0A5031 }, + { (char*) "US/Aleutian" , 0x0A5980 }, + { (char*) "US/Arizona" , 0x0A62C0 }, + { (char*) "US/Central" , 0x0A6434 }, + { (char*) "US/East-Indiana" , 0x0A7248 }, + { (char*) "US/Eastern" , 0x0A78E6 }, + { (char*) "US/Hawaii" , 0x0A86D2 }, + { (char*) "US/Indiana-Starke" , 0x0A8827 }, + { (char*) "US/Michigan" , 0x0A91BF }, + { (char*) "US/Mountain" , 0x0A9A81 }, + { (char*) "US/Pacific" , 0x0AA429 }, + { (char*) "US/Samoa" , 0x0AAF59 }, + { (char*) "UTC" , 0x0AB014 }, + { (char*) "W-SU" , 0x0AB092 }, + { (char*) "WET" , 0x0AB69D }, + { (char*) "Zulu" , 0x0ABE1A }, }; -const unsigned char timelib_timezone_db_data_builtin[703933] = { +const unsigned char timelib_timezone_db_data_builtin[704152] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -26616,7 +26704,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x54, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x33, 0x0A, 0x00, 0x5D, 0xE4, 0x75, 0x00, 0xAE, 0x47, 0xE2, 0x00, 0x00, 0x00, 0x1B, 0x43, 0x61, 0x74, 0x61, 0x6D, 0x61, 0x72, 0x63, 0x61, 0x20, 0x28, 0x43, 0x54, 0x29, -0x3B, 0x20, 0x43, 0x68, 0x75, 0x62, 0x75, 0x74, 0x20, 0x28, 0x43, 0x48, 0x29, +0x2C, 0x20, 0x43, 0x68, 0x75, 0x62, 0x75, 0x74, 0x20, 0x28, 0x43, 0x48, 0x29, /* America/Argentina/ComodRivadavia */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -27565,7 +27653,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0xD3, 0xBA, 0x95, 0x00, 0x86, 0xDA, 0xC9, 0x00, 0x00, 0x00, 0x21, 0x45, 0x53, 0x54, 0x20, -0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x41, 0x74, 0x69, 0x6B, 0x6F, 0x6B, 0x61, 0x6E, 0x29, 0x3B, +0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x41, 0x74, 0x69, 0x6B, 0x6F, 0x6B, 0x61, 0x6E, 0x29, 0x2C, 0x20, 0x4E, 0x55, 0x20, 0x28, 0x43, 0x6F, 0x72, 0x61, 0x6C, 0x20, 0x48, 0x29, /* America/Atka */ @@ -27930,7 +28018,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x33, 0x0A, 0x00, 0x87, 0x1D, 0xD8, 0x00, 0xC8, 0xAD, 0xB2, 0x00, 0x00, 0x00, 0x12, 0x50, 0x61, -0x72, 0x61, 0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x29, 0x3B, 0x20, 0x41, 0x6D, 0x61, 0x70, 0x61, +0x72, 0x61, 0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x29, 0x2C, 0x20, 0x41, 0x6D, 0x61, 0x70, 0x61, /* America/Belize */ @@ -28274,7 +28362,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x54, 0x37, 0x4D, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xCB, 0xE0, 0xD1, 0x00, 0x61, 0x58, 0xE6, 0x00, 0x00, 0x00, 0x20, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, 0x20, 0x2D, -0x20, 0x49, 0x44, 0x20, 0x28, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x3B, 0x20, 0x4F, 0x52, 0x20, +0x20, 0x49, 0x44, 0x20, 0x28, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x2C, 0x20, 0x4F, 0x52, 0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x29, /* America/Buenos_Aires */ @@ -30084,9 +30172,9 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x4D, 0x53, 0x54, 0x37, 0x4D, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xDB, 0x0A, 0x38, -0x00, 0x65, 0x85, 0x95, 0x00, 0x00, 0x00, 0x25, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, -0x20, 0x2D, 0x20, 0x41, 0x42, 0x3B, 0x20, 0x42, 0x43, 0x20, 0x28, 0x45, 0x29, 0x3B, 0x20, 0x4E, -0x54, 0x20, 0x28, 0x45, 0x29, 0x3B, 0x20, 0x53, 0x4B, 0x20, 0x28, 0x57, 0x29, +0x00, 0x65, 0x85, 0x95, 0x00, 0x00, 0x00, 0x22, 0x4D, 0x6F, 0x75, 0x6E, 0x74, 0x61, 0x69, 0x6E, +0x20, 0x2D, 0x20, 0x41, 0x42, 0x2C, 0x20, 0x42, 0x43, 0x28, 0x45, 0x29, 0x2C, 0x20, 0x4E, 0x54, +0x28, 0x45, 0x29, 0x2C, 0x20, 0x53, 0x4B, 0x28, 0x57, 0x29, /* America/Eirunepe */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x42, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -30749,7 +30837,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { /* America/Godthab */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x80, 0x68, 0x00, +0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x80, 0x68, 0x00, 0x13, 0x4D, 0x7C, 0x50, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, @@ -30771,102 +30859,101 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x66, 0x08, 0xB5, 0x90, +0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, +0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, +0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, +0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, +0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, +0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, +0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, -0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x0C, 0x4C, -0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, -0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x68, -0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4D, 0x7C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x14, 0x33, 0xFA, -0x90, 0x00, 0x00, 0x00, 0x00, 0x15, 0x23, 0xEB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x16, 0x13, 0xDC, -0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0x03, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0xF3, 0xBE, -0x90, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xAF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x19, 0xD3, 0xA0, -0x90, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xC3, 0x91, 0x90, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xBD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0xAE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x9F, -0x10, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x81, -0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x72, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x63, -0x10, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x45, -0x10, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x36, 0x10, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x27, -0x10, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x43, -0x90, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x34, 0x90, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x25, -0x90, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x16, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC5, 0x07, -0x90, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xE9, -0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xCB, -0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, -0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, -0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, -0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, -0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, -0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, -0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, -0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, -0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, -0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, -0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, -0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, -0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, -0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, -0x90, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, -0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, -0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, -0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, -0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, -0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, -0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, -0x90, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, -0x90, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xAE, -0x90, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x90, -0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x72, -0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x54, -0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x71, -0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x53, -0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x35, -0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x17, -0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x74, 0x45, 0xF9, -0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x15, -0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0E, 0xF7, -0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xD9, -0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xBB, -0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, -0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, -0x90, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, -0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x0C, -0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x0A, 0x3C, -0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, -0x30, 0x2F, 0x2D, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x30, 0x0A, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, +0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, +0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, +0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, +0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, +0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, +0x13, 0x4D, 0x7C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x00, 0x00, 0x00, 0x00, +0x15, 0x23, 0xEB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x16, 0x13, 0xDC, 0x90, 0x00, 0x00, 0x00, 0x00, +0x17, 0x03, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0xF3, 0xBE, 0x90, 0x00, 0x00, 0x00, 0x00, +0x18, 0xE3, 0xAF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x19, 0xD3, 0xA0, 0x90, 0x00, 0x00, 0x00, 0x00, +0x1A, 0xC3, 0x91, 0x90, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xBD, 0x10, 0x00, 0x00, 0x00, 0x00, +0x1C, 0xAC, 0xAE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x9F, 0x10, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x81, 0x10, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x72, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x63, 0x10, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x36, 0x10, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x27, 0x10, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x43, 0x90, 0x00, 0x00, 0x00, 0x00, +0x27, 0xF5, 0x34, 0x90, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x25, 0x90, 0x00, 0x00, 0x00, 0x00, +0x29, 0xD5, 0x16, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC5, 0x07, 0x90, 0x00, 0x00, 0x00, 0x00, +0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xE9, 0x90, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x00, +0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, +0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, +0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, +0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, +0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, +0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, +0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, +0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, +0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, +0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, +0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, +0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, +0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, +0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, +0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, +0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, +0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, +0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, +0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, 0x00, 0x00, +0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, +0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, +0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, +0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, +0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, +0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, +0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, +0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, +0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, +0x70, 0x86, 0x35, 0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, +0x72, 0x66, 0x17, 0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, +0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, +0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, +0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, +0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, +0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, +0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, +0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, +0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, +0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, +0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, +0x31, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, +0x0A, 0x3C, 0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, +0x35, 0x2E, 0x30, 0x2F, 0x2D, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x30, +0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* America/Goose_Bay */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -31494,7 +31581,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xCD, 0x75, 0xA8, 0x00, 0xB1, 0x9C, 0xC0, 0x00, 0x00, 0x00, 0x1E, 0x41, 0x74, 0x6C, 0x61, 0x6E, 0x74, 0x69, 0x63, 0x20, 0x2D, 0x20, 0x4E, 0x53, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, -0x61, 0x72, 0x65, 0x61, 0x73, 0x29, 0x3B, 0x20, 0x50, 0x45, +0x61, 0x72, 0x65, 0x61, 0x73, 0x29, 0x2C, 0x20, 0x50, 0x45, /* America/Havana */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -36954,7 +37041,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { /* America/Nuuk */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x80, 0x68, 0x00, +0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x80, 0x68, 0x00, 0x13, 0x4D, 0x7C, 0x50, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, @@ -36976,103 +37063,102 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x66, 0x08, 0xB5, 0x90, +0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, +0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, +0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, +0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, +0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, +0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, +0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, -0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x0C, 0x4C, -0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, -0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x68, -0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4D, 0x7C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x14, 0x33, 0xFA, -0x90, 0x00, 0x00, 0x00, 0x00, 0x15, 0x23, 0xEB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x16, 0x13, 0xDC, -0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0x03, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0xF3, 0xBE, -0x90, 0x00, 0x00, 0x00, 0x00, 0x18, 0xE3, 0xAF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x19, 0xD3, 0xA0, -0x90, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xC3, 0x91, 0x90, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xBD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0xAE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x9F, -0x10, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x81, -0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x72, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x63, -0x10, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x45, -0x10, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x36, 0x10, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x27, -0x10, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x43, -0x90, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x34, 0x90, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x25, -0x90, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x16, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC5, 0x07, -0x90, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xE9, -0x90, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xCB, -0x90, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, -0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, -0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, -0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, -0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, -0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, -0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, -0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, -0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, -0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, -0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, -0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, -0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, -0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, -0x90, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, -0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, -0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, -0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, -0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, -0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, -0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, -0x90, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, -0x90, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xAE, -0x90, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x90, -0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x72, -0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x54, -0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x71, -0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x53, -0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x35, -0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x17, -0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x74, 0x45, 0xF9, -0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x15, -0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0E, 0xF7, -0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xD9, -0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xBB, -0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, -0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, -0x90, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, -0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x0C, -0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x0A, 0x3C, -0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, -0x30, 0x2F, 0x2D, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x30, 0x0A, 0x00, -0xEB, 0x43, 0xDD, 0x00, 0xC3, 0xB8, 0x2A, 0x00, 0x00, 0x00, 0x11, 0x6D, 0x6F, 0x73, 0x74, 0x20, -0x6F, 0x66, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6E, 0x6C, 0x61, 0x6E, 0x64, +0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, +0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, +0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, +0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, +0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, +0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, +0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, +0x13, 0x4D, 0x7C, 0x50, 0x00, 0x00, 0x00, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x00, 0x00, 0x00, 0x00, +0x15, 0x23, 0xEB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x16, 0x13, 0xDC, 0x90, 0x00, 0x00, 0x00, 0x00, +0x17, 0x03, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0xF3, 0xBE, 0x90, 0x00, 0x00, 0x00, 0x00, +0x18, 0xE3, 0xAF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x19, 0xD3, 0xA0, 0x90, 0x00, 0x00, 0x00, 0x00, +0x1A, 0xC3, 0x91, 0x90, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xBD, 0x10, 0x00, 0x00, 0x00, 0x00, +0x1C, 0xAC, 0xAE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x9F, 0x10, 0x00, 0x00, 0x00, 0x00, +0x1E, 0x8C, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x81, 0x10, 0x00, 0x00, 0x00, 0x00, +0x20, 0x6C, 0x72, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x63, 0x10, 0x00, 0x00, 0x00, 0x00, +0x22, 0x4C, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, +0x24, 0x2C, 0x36, 0x10, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x27, 0x10, 0x00, 0x00, 0x00, 0x00, +0x26, 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x43, 0x90, 0x00, 0x00, 0x00, 0x00, +0x27, 0xF5, 0x34, 0x90, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE5, 0x25, 0x90, 0x00, 0x00, 0x00, 0x00, +0x29, 0xD5, 0x16, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC5, 0x07, 0x90, 0x00, 0x00, 0x00, 0x00, +0x2B, 0xB4, 0xF8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xE9, 0x90, 0x00, 0x00, 0x00, 0x00, +0x2D, 0x94, 0xDA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xCB, 0x90, 0x00, 0x00, 0x00, 0x00, +0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, +0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, +0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, +0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, +0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, +0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, +0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, +0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, +0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, +0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, +0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, +0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, +0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, +0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, +0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, +0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, +0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, +0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, +0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, +0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, 0x00, 0x00, +0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, +0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, +0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, +0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, +0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, 0x00, 0x00, +0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x00, +0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, +0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, +0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, +0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, +0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, +0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, +0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, +0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, +0x70, 0x86, 0x35, 0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, +0x72, 0x66, 0x17, 0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, +0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, +0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, +0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, +0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, +0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, +0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, +0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, +0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, +0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, +0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, +0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, +0x31, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, +0x0A, 0x3C, 0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, +0x35, 0x2E, 0x30, 0x2F, 0x2D, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x30, +0x0A, 0x00, 0xEB, 0x43, 0xDD, 0x00, 0xC3, 0xB8, 0x2A, 0x00, 0x00, 0x00, 0x11, 0x6D, 0x6F, 0x73, +0x74, 0x20, 0x6F, 0x66, 0x20, 0x47, 0x72, 0x65, 0x65, 0x6E, 0x6C, 0x61, 0x6E, 0x64, /* America/Ojinaga */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4D, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -38866,8 +38952,8 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { /* America/Scoresbysund */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x47, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x80, 0x4C, 0x18, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x80, 0x4C, 0x18, 0x13, 0x4D, 0x6E, 0x40, 0x14, 0x34, 0x24, 0xC0, 0x15, 0x23, 0xF9, 0xA0, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, @@ -38902,16 +38988,17 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, +0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, +0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, +0x08, 0x07, 0x08, 0x07, 0x08, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, -0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x4C, -0x4D, 0x54, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x00, -0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x54, 0x5A, 0x69, -0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x4C, +0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0xFF, +0xFF, 0xF1, 0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x2D, +0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, +0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, +0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x75, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x80, 0x4C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x13, 0x4D, 0x6E, 0x40, 0x00, 0x00, 0x00, 0x00, 0x14, 0x34, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x23, 0xF9, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x13, 0xDC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0x03, 0xCD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x17, 0xF3, 0xBE, @@ -38975,18 +39062,19 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, +0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, +0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, +0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, -0x4C, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x2B, 0x30, 0x30, 0x00, -0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0A, 0x3C, -0x2D, 0x30, 0x31, 0x3E, 0x31, 0x3C, 0x2B, 0x30, 0x30, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, -0x30, 0x2F, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x31, 0x0A, 0x00, 0xF4, -0xE0, 0xCD, 0x00, 0xF1, 0x23, 0xC5, 0x00, 0x00, 0x00, 0x1D, 0x53, 0x63, 0x6F, 0x72, 0x65, 0x73, -0x62, 0x79, 0x73, 0x75, 0x6E, 0x64, 0x2F, 0x49, 0x74, 0x74, 0x6F, 0x71, 0x71, 0x6F, 0x72, 0x74, -0x6F, 0x6F, 0x72, 0x6D, 0x69, 0x69, 0x74, +0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, +0x2D, 0x30, 0x32, 0x00, 0x2D, 0x30, 0x31, 0x00, 0x2B, 0x30, 0x30, 0x00, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x0A, 0x3C, +0x2D, 0x30, 0x32, 0x3E, 0x32, 0x3C, 0x2D, 0x30, 0x31, 0x3E, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, +0x30, 0x2F, 0x2D, 0x31, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x30, 0x0A, 0x00, +0xF4, 0xE0, 0xCD, 0x00, 0xF1, 0x23, 0xC5, 0x00, 0x00, 0x00, 0x1D, 0x53, 0x63, 0x6F, 0x72, 0x65, +0x73, 0x62, 0x79, 0x73, 0x75, 0x6E, 0x64, 0x2F, 0x49, 0x74, 0x74, 0x6F, 0x71, 0x71, 0x6F, 0x72, +0x74, 0x6F, 0x6F, 0x72, 0x6D, 0x69, 0x69, 0x74, /* America/Shiprock */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -39544,9 +39632,8 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x4E, 0x53, 0x54, 0x33, 0x3A, 0x33, 0x30, 0x4E, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xD1, 0xE8, 0xFA, 0x00, 0xC2, 0x38, 0x0D, 0x00, -0x00, 0x00, 0x22, 0x4E, 0x65, 0x77, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x6C, 0x61, 0x6E, 0x64, 0x3B, -0x20, 0x4C, 0x61, 0x62, 0x72, 0x61, 0x64, 0x6F, 0x72, 0x20, 0x28, 0x73, 0x6F, 0x75, 0x74, 0x68, -0x65, 0x61, 0x73, 0x74, 0x29, +0x00, 0x00, 0x1B, 0x4E, 0x65, 0x77, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x6C, 0x61, 0x6E, 0x64, 0x2C, +0x20, 0x4C, 0x61, 0x62, 0x72, 0x61, 0x64, 0x6F, 0x72, 0x20, 0x28, 0x53, 0x45, 0x29, /* America/St_Kitts */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4B, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -40355,8 +40442,9 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x45, 0x53, 0x54, 0x35, 0x45, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xCB, 0xEF, 0x08, 0x00, 0x99, 0x87, 0x62, 0x00, 0x00, -0x00, 0x1D, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x2C, 0x20, -0x51, 0x43, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, +0x00, 0x1E, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6E, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x26, +0x20, 0x51, 0x43, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, + /* America/Tortola */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -40863,7 +40951,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xD5, 0x71, 0xED, 0x00, 0x7E, 0x6B, 0x47, 0x00, 0x00, 0x00, 0x1D, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x77, 0x65, -0x73, 0x74, 0x29, 0x3B, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, +0x73, 0x74, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, /* America/Yakutat */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -41164,30 +41252,33 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { /* Antarctica/Casey */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xFE, 0x1E, 0xCC, 0x80, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0xFE, 0x1E, 0xCC, 0x80, 0x4A, 0xDA, 0x06, 0x20, 0x4B, 0x8F, 0xCA, 0xF0, 0x4E, 0xA9, 0x9C, 0x20, 0x4F, 0x43, 0xCD, 0x90, 0x58, 0x0A, 0x3B, 0x80, 0x5A, 0xA4, 0x0F, 0x10, 0x5B, 0xB9, 0x14, 0x40, 0x5C, 0x8D, 0x1D, 0x80, -0x5D, 0x96, 0x45, 0x30, 0x5E, 0x63, 0xC5, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x01, 0x02, 0x01, 0x02, -0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x38, 0x00, 0x2B, 0x31, -0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x54, 0x5A, 0x69, 0x66, -0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1E, 0xCC, 0x80, -0x00, 0x00, 0x00, 0x00, 0x4A, 0xDA, 0x06, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x8F, 0xCA, 0xF0, -0x00, 0x00, 0x00, 0x00, 0x4E, 0xA9, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x43, 0xCD, 0x90, -0x00, 0x00, 0x00, 0x00, 0x58, 0x0A, 0x3B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0x0F, 0x10, -0x00, 0x00, 0x00, 0x00, 0x5B, 0xB9, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x8D, 0x1D, 0x80, -0x00, 0x00, 0x00, 0x00, 0x5D, 0x96, 0x45, 0x30, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x63, 0xC5, 0x00, -0x00, 0x00, 0x00, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x00, 0x00, 0x9A, 0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, -0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, -0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x3C, 0x2B, 0x31, 0x31, 0x3E, 0x2D, 0x31, -0x31, 0x0A, 0x00, 0x24, 0x30, 0x52, 0x01, 0xBB, 0x4B, 0x12, 0x00, 0x00, 0x00, 0x05, 0x43, 0x61, -0x73, 0x65, 0x79, +0x5D, 0x96, 0x45, 0x30, 0x5E, 0x63, 0xC5, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x60, 0x4C, 0xB7, 0x50, +0x61, 0x58, 0x82, 0x3C, 0x62, 0x2C, 0x99, 0x50, 0x63, 0x38, 0x64, 0x3C, 0x64, 0x08, 0xB1, 0x00, +0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x9A, +0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x38, +0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x54, 0x5A, 0x69, +0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x11, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1E, 0xCC, +0x80, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xDA, 0x06, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x8F, 0xCA, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xA9, 0x9C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x43, 0xCD, +0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x0A, 0x3B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0x0F, +0x10, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xB9, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x8D, 0x1D, +0x80, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x96, 0x45, 0x30, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x63, 0xC5, +0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x78, 0xA0, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4C, 0xB7, +0x50, 0x00, 0x00, 0x00, 0x00, 0x61, 0x58, 0x82, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2C, 0x99, +0x50, 0x00, 0x00, 0x00, 0x00, 0x63, 0x38, 0x64, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x64, 0x08, 0xB1, +0x00, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, +0x9A, 0xB0, 0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, +0x38, 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x3C, +0x2B, 0x30, 0x38, 0x3E, 0x2D, 0x38, 0x0A, 0x00, 0x24, 0x30, 0x52, 0x01, 0xBB, 0x4B, 0x12, 0x00, +0x00, 0x00, 0x05, 0x43, 0x61, 0x73, 0x65, 0x79, /* Antarctica/Davis */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -41868,15 +41959,19 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { /* Antarctica/Vostok */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x41, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xE9, 0x58, 0x89, 0x80, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x2D, 0x30, 0x30, -0x00, 0x2B, 0x30, 0x36, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xE9, 0x58, 0x89, 0x80, +0x2D, 0x4D, 0x39, 0x10, 0x2E, 0xB5, 0x85, 0x00, 0x65, 0x7F, 0x45, 0x30, 0x01, 0x00, 0x01, 0x02, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, +0x00, 0x08, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x37, 0x00, 0x2B, 0x30, 0x35, 0x00, 0x54, 0x5A, +0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0x58, 0x89, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x36, 0x00, 0x0A, 0x3C, -0x2B, 0x30, 0x36, 0x3E, 0x2D, 0x36, 0x0A, 0x00, 0x11, 0xB3, 0x3F, 0x01, 0xB5, 0xC6, 0x4F, 0x00, -0x00, 0x00, 0x06, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, +0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0x58, +0x89, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x4D, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x2E, 0xB5, +0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x7F, 0x45, 0x30, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x08, +0x2D, 0x30, 0x30, 0x00, 0x2B, 0x30, 0x37, 0x00, 0x2B, 0x30, 0x35, 0x00, 0x0A, 0x3C, 0x2B, 0x30, +0x35, 0x3E, 0x2D, 0x35, 0x0A, 0x00, 0x11, 0xB3, 0x3F, 0x01, 0xB5, 0xC6, 0x4F, 0x00, 0x00, 0x00, +0x06, 0x56, 0x6F, 0x73, 0x74, 0x6F, 0x6B, /* Arctic/Longyearbyen */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x53, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -43717,7 +43812,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, +0x00, 0x01, 0x36, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, @@ -43844,9 +43939,12 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x8B, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x84, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x6B, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x52, 0x50, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x4B, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x28, 0xF7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC1, -0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC3, -0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC5, -0x04, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC6, +0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x69, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC2, +0x2B, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC3, +0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x49, 0x73, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC4, +0x0B, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC5, +0x04, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x29, 0x55, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC5, +0xF4, 0x6A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xD1, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x09, 0x37, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC7, 0xD4, 0x4C, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x71, 0x20, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xA8, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xE9, 0x19, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC9, @@ -43888,17 +43986,17 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x20, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, -0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, -0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, -0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, -0x20, 0x53, 0x74, 0x72, 0x69, 0x70, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x03, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, +0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, +0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, +0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, +0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, +0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, +0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, +0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -43997,7 +44095,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x32, 0x00, 0x00, 0x00, +0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, @@ -44126,8 +44224,11 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0xBD, 0x84, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x6B, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0x52, 0x50, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x4B, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x28, 0xF7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x57, 0x2A, 0x80, 0x00, 0x00, 0x00, +0x00, 0xC1, 0x69, 0x91, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x2B, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0x9F, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x2D, 0xD2, 0x00, 0x00, 0x00, 0x00, +0x00, 0xC3, 0x49, 0x73, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x0B, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xCD, 0x0C, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x04, 0x79, 0x80, 0x00, 0x00, 0x00, +0x00, 0xC5, 0x29, 0x55, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC5, 0xF4, 0x6A, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xA3, 0xB3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xD1, 0xE6, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x09, 0x37, 0x70, 0x00, 0x00, 0x00, 0x00, 0xC7, 0xD4, 0x4C, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x71, 0x20, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC8, 0xA8, 0x8E, 0x00, 0x00, 0x00, 0x00, @@ -44170,17 +44271,17 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, -0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, -0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, -0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, -0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x0A, 0x00, 0xB9, 0x71, 0xF5, -0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, -0x6B, +0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x20, +0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, +0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, +0x20, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, +0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, +0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, +0x34, 0x2E, 0x34, 0x2F, 0x35, 0x30, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x35, +0x30, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, +0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -44598,7 +44699,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x30, 0x00, 0x57, 0x49, 0x54, 0x00, 0x0A, 0x57, 0x49, 0x54, 0x2D, 0x39, 0x0A, 0x00, 0x85, 0x76, 0xAA, 0x01, 0xE9, 0x59, 0x70, 0x00, 0x00, 0x00, 0x36, 0x4E, 0x65, 0x77, 0x20, 0x47, 0x75, 0x69, 0x6E, 0x65, 0x61, 0x20, 0x28, 0x57, 0x65, 0x73, 0x74, 0x20, 0x50, 0x61, 0x70, 0x75, 0x61, 0x20, -0x2F, 0x20, 0x49, 0x72, 0x69, 0x61, 0x6E, 0x20, 0x4A, 0x61, 0x79, 0x61, 0x29, 0x3B, 0x20, 0x4D, +0x2F, 0x20, 0x49, 0x72, 0x69, 0x61, 0x6E, 0x20, 0x4A, 0x61, 0x79, 0x61, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6C, 0x75, 0x6B, 0x75, 0x73, 0x2F, 0x4D, 0x6F, 0x6C, 0x75, 0x63, 0x63, 0x61, 0x73, /* Asia/Jerusalem */ @@ -45435,10 +45536,10 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x38, 0x00, 0x2B, 0x30, 0x39, 0x00, 0x57, 0x49, 0x54, 0x41, 0x00, 0x0A, 0x57, 0x49, 0x54, 0x41, 0x2D, 0x38, 0x0A, 0x00, 0x81, 0x85, 0x8D, 0x01, 0xC8, 0xD9, 0x1F, 0x00, 0x00, 0x00, 0x49, 0x42, 0x6F, 0x72, 0x6E, 0x65, 0x6F, -0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x2C, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x3B, 0x20, +0x20, 0x28, 0x65, 0x61, 0x73, 0x74, 0x2C, 0x20, 0x73, 0x6F, 0x75, 0x74, 0x68, 0x29, 0x2C, 0x20, 0x53, 0x75, 0x6C, 0x61, 0x77, 0x65, 0x73, 0x69, 0x2F, 0x43, 0x65, 0x6C, 0x65, 0x62, 0x65, 0x73, 0x2C, 0x20, 0x42, 0x61, 0x6C, 0x69, 0x2C, 0x20, 0x4E, 0x75, 0x73, 0x61, 0x20, 0x54, 0x65, 0x6E, -0x67, 0x61, 0x72, 0x72, 0x61, 0x3B, 0x20, 0x54, 0x69, 0x6D, 0x6F, 0x72, 0x20, 0x28, 0x77, 0x65, +0x67, 0x61, 0x72, 0x72, 0x61, 0x2C, 0x20, 0x54, 0x69, 0x6D, 0x6F, 0x72, 0x20, 0x28, 0x77, 0x65, 0x73, 0x74, 0x29, /* Asia/Manila */ @@ -46485,7 +46586,7 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { 0x00, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x3C, 0x2B, 0x31, 0x31, 0x3E, 0x2D, 0x31, 0x31, 0x0A, 0x00, 0xF0, 0x46, 0x6A, 0x01, 0xFD, 0x36, 0x12, 0x00, 0x00, 0x00, 0x1E, 0x4D, 0x53, 0x4B, 0x2B, 0x30, 0x38, 0x20, 0x2D, 0x20, 0x53, -0x61, 0x6B, 0x68, 0x61, 0x20, 0x28, 0x45, 0x29, 0x3B, 0x20, 0x4E, 0x20, 0x4B, 0x75, 0x72, 0x69, +0x61, 0x6B, 0x68, 0x61, 0x20, 0x28, 0x45, 0x29, 0x2C, 0x20, 0x4E, 0x20, 0x4B, 0x75, 0x72, 0x69, 0x6C, 0x20, 0x49, 0x73, /* Asia/Taipei */ @@ -69999,4 +70100,4 @@ const unsigned char timelib_timezone_db_data_builtin[703933] = { }; #endif -const timelib_tzdb timezonedb_builtin = { "2023.3", 597, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2023.4", 597, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/tests/bug80963.phpt b/ext/date/tests/bug80963.phpt index 8ee645abdeaee..c7f02a7397fcf 100644 --- a/ext/date/tests/bug80963.phpt +++ b/ext/date/tests/bug80963.phpt @@ -13,8 +13,8 @@ foreach ($tzids as $tzid) var_dump(sizeof($t), end($t)); } ?> ---EXPECT-- -int(243) +--EXPECTF-- +int(24%d) array(5) { ["ts"]=> int(2140045200) diff --git a/ext/dom/document.c b/ext/dom/document.c index 665c0a042d6ed..831f01b87b25a 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -894,29 +894,61 @@ PHP_METHOD(DOMDocument, createAttributeNS) xmlNodePtr nodep = NULL, root; xmlNsPtr nsptr; int ret; - size_t uri_len = 0, name_len = 0; - char *uri, *name; + zend_string *name, *uri; char *localname = NULL, *prefix = NULL; dom_object *intern; int errorcode; id = ZEND_THIS; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s!s", &uri, &uri_len, &name, &name_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "S!S", &uri, &name) == FAILURE) { RETURN_THROWS(); } DOM_GET_OBJ(docp, id, xmlDocPtr, intern); + if (UNEXPECTED(uri == NULL)) { + uri = zend_empty_string; + } + size_t uri_len = ZSTR_LEN(uri); + root = xmlDocGetRootElement(docp); if (root != NULL) { - errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len); + errorcode = dom_check_qname(ZSTR_VAL(name), &localname, &prefix, uri_len, ZSTR_LEN(name)); + /* TODO: switch to early goto-out style error-checking */ if (errorcode == 0) { if (xmlValidateName((xmlChar *) localname, 0) == 0) { + /* If prefix is "xml" and namespace is not the XML namespace, then throw a "NamespaceError" DOMException. */ + if (UNEXPECTED(!zend_string_equals_literal(uri, "http://www.w3.org/XML/1998/namespace") && xmlStrEqual(BAD_CAST prefix, BAD_CAST "xml"))) { + errorcode = NAMESPACE_ERR; + goto error; + } + /* If either qualifiedName or prefix is "xmlns" and namespace is not the XMLNS namespace, then throw a "NamespaceError" DOMException. */ + if (UNEXPECTED((zend_string_equals_literal(name, "xmlns") || xmlStrEqual(BAD_CAST prefix, BAD_CAST "xmlns")) && !zend_string_equals_literal(uri, "http://www.w3.org/2000/xmlns/"))) { + errorcode = NAMESPACE_ERR; + goto error; + } + /* If namespace is the XMLNS namespace and neither qualifiedName nor prefix is "xmlns", then throw a "NamespaceError" DOMException. */ + if (UNEXPECTED(zend_string_equals_literal(uri, "http://www.w3.org/2000/xmlns/") && !zend_string_equals_literal(name, "xmlns") && !xmlStrEqual(BAD_CAST prefix, BAD_CAST "xmlns"))) { + errorcode = NAMESPACE_ERR; + goto error; + } + nodep = (xmlNodePtr) xmlNewDocProp(docp, (xmlChar *) localname, NULL); if (nodep != NULL && uri_len > 0) { - nsptr = xmlSearchNsByHref(nodep->doc, root, (xmlChar *) uri); - if (nsptr == NULL || nsptr->prefix == NULL) { - nsptr = dom_get_ns(root, uri, &errorcode, prefix ? prefix : "default"); + nsptr = xmlSearchNsByHref(docp, root, BAD_CAST ZSTR_VAL(uri)); + + if (zend_string_equals_literal(name, "xmlns") || xmlStrEqual(BAD_CAST prefix, BAD_CAST "xml")) { + if (nsptr == NULL) { + nsptr = xmlNewNs(NULL, BAD_CAST ZSTR_VAL(uri), BAD_CAST prefix); + php_libxml_set_old_ns(docp, nsptr); + } + } else { + if (nsptr == NULL || nsptr->prefix == NULL) { + nsptr = dom_get_ns_unchecked(root, ZSTR_VAL(uri), prefix ? prefix : "default"); + if (UNEXPECTED(nsptr == NULL)) { + errorcode = NAMESPACE_ERR; + } + } } xmlSetNs(nodep, nsptr); } @@ -929,6 +961,7 @@ PHP_METHOD(DOMDocument, createAttributeNS) RETURN_FALSE; } +error: xmlFree(localname); if (prefix != NULL) { xmlFree(prefix); @@ -1008,21 +1041,33 @@ PHP_METHOD(DOMDocument, getElementById) } /* }}} end dom_document_get_element_by_id */ -static void php_dom_transfer_document_ref(xmlNodePtr node, dom_object *dom_object_document, xmlDocPtr document) +static zend_always_inline void php_dom_transfer_document_ref_single_node(xmlNodePtr node, php_libxml_ref_obj *new_document) +{ + php_libxml_node_ptr *iteration_object_ptr = node->_private; + if (iteration_object_ptr) { + php_libxml_node_object *iteration_object = iteration_object_ptr->_private; + ZEND_ASSERT(iteration_object != NULL); + /* Must increase refcount first because we could be the last reference holder, and the document may be equal. */ + new_document->refcount++; + php_libxml_decrement_doc_ref(iteration_object); + iteration_object->document = new_document; + } +} + +static void php_dom_transfer_document_ref(xmlNodePtr node, php_libxml_ref_obj *new_document) { if (node->children) { - php_dom_transfer_document_ref(node->children, dom_object_document, document); + php_dom_transfer_document_ref(node->children, new_document); } + while (node) { - php_libxml_node_ptr *iteration_object_ptr = node->_private; - if (iteration_object_ptr) { - php_libxml_node_object *iteration_object = iteration_object_ptr->_private; - ZEND_ASSERT(iteration_object != NULL); - /* Must increase refcount first because we could be the last reference holder, and the document may be equal. */ - dom_object_document->document->refcount++; - php_libxml_decrement_doc_ref(iteration_object); - iteration_object->document = dom_object_document->document; + if (node->type == XML_ELEMENT_NODE) { + for (xmlAttrPtr attr = node->properties; attr != NULL; attr = attr->next) { + php_dom_transfer_document_ref_single_node((xmlNodePtr) attr, new_document); + } } + + php_dom_transfer_document_ref_single_node(node, new_document); node = node->next; } } @@ -1040,7 +1085,7 @@ bool php_dom_adopt_node(xmlNodePtr nodep, dom_object *dom_object_new_document, x return false; } - php_dom_transfer_document_ref(nodep, dom_object_new_document, new_document); + php_dom_transfer_document_ref(nodep, dom_object_new_document->document); } else { xmlUnlinkNode(nodep); } diff --git a/ext/dom/element.c b/ext/dom/element.c index 133ae0d76f6d1..f87fbcccfef98 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -1554,7 +1554,7 @@ PHP_METHOD(DOMElement, toggleAttribute) } /* Step 2 */ - if (thisp->doc->type == XML_HTML_DOCUMENT_NODE && (thisp->ns == NULL || xmlStrEqual(thisp->ns->href, (const xmlChar *) "http://www.w3.org/1999/xhtml"))) { + if (thisp->doc != NULL && thisp->doc->type == XML_HTML_DOCUMENT_NODE && (thisp->ns == NULL || xmlStrEqual(thisp->ns->href, (const xmlChar *) "http://www.w3.org/1999/xhtml"))) { qname_tmp = zend_str_tolower_dup_ex(qname, qname_length); if (qname_tmp != NULL) { qname = qname_tmp; diff --git a/ext/dom/node.c b/ext/dom/node.c index 4a797c573a450..b95bf6c40fb4c 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -1490,33 +1490,58 @@ static bool php_dom_node_is_equal_node(const xmlNode *this, const xmlNode *other #define PHP_DOM_FUNC_CAT(prefix, suffix) prefix##_##suffix /* xmlNode and xmlNs have incompatible struct layouts, i.e. the next field is in a different offset */ -#define PHP_DOM_DEFINE_LIST_EQUALITY_HELPER(type) \ - static size_t PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(const type *node) \ - { \ - size_t counter = 0; \ - while (node) { \ - counter++; \ - node = node->next; \ - } \ - return counter; \ - } \ - static bool PHP_DOM_FUNC_CAT(php_dom_node_list_equality_check, type)(const type *list1, const type *list2) \ - { \ - size_t count = PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(list1); \ - if (count != PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(list2)) { \ - return false; \ - } \ - for (size_t i = 0; i < count; i++) { \ - if (!php_dom_node_is_equal_node((const xmlNode *) list1, (const xmlNode *) list2)) { \ - return false; \ - } \ - list1 = list1->next; \ - list2 = list2->next; \ - } \ - return true; \ - } -PHP_DOM_DEFINE_LIST_EQUALITY_HELPER(xmlNode) -PHP_DOM_DEFINE_LIST_EQUALITY_HELPER(xmlNs) +#define PHP_DOM_DEFINE_LIST_COUNTER_HELPER(type) \ + static size_t PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(const type *node) \ + { \ + size_t counter = 0; \ + while (node) { \ + counter++; \ + node = node->next; \ + } \ + return counter; \ + } +#define PHP_DOM_DEFINE_LIST_EQUALITY_ORDERED_HELPER(type) \ + static bool PHP_DOM_FUNC_CAT(php_dom_node_list_equality_check_ordered, type)(const type *list1, const type *list2) \ + { \ + size_t count = PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(list1); \ + if (count != PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(list2)) { \ + return false; \ + } \ + for (size_t i = 0; i < count; i++) { \ + if (!php_dom_node_is_equal_node((const xmlNode *) list1, (const xmlNode *) list2)) { \ + return false; \ + } \ + list1 = list1->next; \ + list2 = list2->next; \ + } \ + return true; \ + } +#define PHP_DOM_DEFINE_LIST_EQUALITY_UNORDERED_HELPER(type) \ + static bool PHP_DOM_FUNC_CAT(php_dom_node_list_equality_check_unordered, type)(const type *list1, const type *list2)\ + { \ + size_t count = PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(list1); \ + if (count != PHP_DOM_FUNC_CAT(php_dom_node_count_list_size, type)(list2)) { \ + return false; \ + } \ + for (const type *n1 = list1; n1 != NULL; n1 = n1->next) { \ + bool found = false; \ + for (const type *n2 = list2; n2 != NULL && !found; n2 = n2->next) { \ + if (php_dom_node_is_equal_node((const xmlNode *) n1, (const xmlNode *) n2)) { \ + found = true; \ + } \ + } \ + if (!found) { \ + return false; \ + } \ + } \ + return true; \ + } + +PHP_DOM_DEFINE_LIST_COUNTER_HELPER(xmlNode) +PHP_DOM_DEFINE_LIST_COUNTER_HELPER(xmlNs) +PHP_DOM_DEFINE_LIST_EQUALITY_ORDERED_HELPER(xmlNode) +PHP_DOM_DEFINE_LIST_EQUALITY_UNORDERED_HELPER(xmlNode) +PHP_DOM_DEFINE_LIST_EQUALITY_UNORDERED_HELPER(xmlNs) static bool php_dom_node_is_equal_node(const xmlNode *this, const xmlNode *other) { @@ -1535,9 +1560,9 @@ static bool php_dom_node_is_equal_node(const xmlNode *this, const xmlNode *other && php_dom_node_is_ns_prefix_equal(this, other) && php_dom_node_is_ns_uri_equal(this, other) /* Check attributes first, then namespace declarations, then children */ - && php_dom_node_list_equality_check_xmlNode((const xmlNode *) this->properties, (const xmlNode *) other->properties) - && php_dom_node_list_equality_check_xmlNs(this->nsDef, other->nsDef) - && php_dom_node_list_equality_check_xmlNode(this->children, other->children); + && php_dom_node_list_equality_check_unordered_xmlNode((const xmlNode *) this->properties, (const xmlNode *) other->properties) + && php_dom_node_list_equality_check_unordered_xmlNs(this->nsDef, other->nsDef) + && php_dom_node_list_equality_check_ordered_xmlNode(this->children, other->children); } else if (this->type == XML_DTD_NODE) { /* Note: in the living spec entity declarations and notations are no longer compared because they're considered obsolete. */ const xmlDtd *this_dtd = (const xmlDtd *) this; @@ -1570,7 +1595,7 @@ static bool php_dom_node_is_equal_node(const xmlNode *this, const xmlNode *other const xmlNs *other_ns = (const xmlNs *) other; return xmlStrEqual(this_ns->prefix, other_ns->prefix) && xmlStrEqual(this_ns->href, other_ns->href); } else if (this->type == XML_DOCUMENT_FRAG_NODE || this->type == XML_HTML_DOCUMENT_NODE || this->type == XML_DOCUMENT_NODE) { - return php_dom_node_list_equality_check_xmlNode(this->children, other->children); + return php_dom_node_list_equality_check_ordered_xmlNode(this->children, other->children); } return false; diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 468d934588054..f008d58089bc3 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -1596,6 +1596,20 @@ NAMESPACE_ERR: Raised if 5. the namespaceURI is "http://www.w3.org/2000/xmlns/" and neither the qualifiedName nor its prefix is "xmlns". */ +xmlNsPtr dom_get_ns_unchecked(xmlNodePtr nodep, char *uri, char *prefix) +{ + xmlNsPtr nsptr = xmlNewNs(nodep, (xmlChar *)uri, (xmlChar *)prefix); + if (UNEXPECTED(nsptr == NULL)) { + /* Either memory allocation failure, or it's because of a prefix conflict. + * We'll assume a conflict and try again. If it was a memory allocation failure we'll just fail again, whatever. + * This isn't needed for every caller (such as createElementNS & DOMElement::__construct), but isn't harmful and simplifies the mental model "when do I use which function?". + * This branch will also be taken unlikely anyway as in those cases it'll be for allocation failure. */ + return dom_get_ns_resolve_prefix_conflict(nodep, uri); + } + + return nsptr; +} + /* {{{ xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) */ xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) { xmlNsPtr nsptr; @@ -1603,16 +1617,9 @@ xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) { if (! ((prefix && !strcmp (prefix, "xml") && strcmp(uri, (char *)XML_XML_NAMESPACE)) || (prefix && !strcmp (prefix, "xmlns") && strcmp(uri, (char *)DOM_XMLNS_NAMESPACE)) || (prefix && !strcmp(uri, (char *)DOM_XMLNS_NAMESPACE) && strcmp (prefix, "xmlns")))) { - nsptr = xmlNewNs(nodep, (xmlChar *)uri, (xmlChar *)prefix); + nsptr = dom_get_ns_unchecked(nodep, uri, prefix); if (UNEXPECTED(nsptr == NULL)) { - /* Either memory allocation failure, or it's because of a prefix conflict. - * We'll assume a conflict and try again. If it was a memory allocation failure we'll just fail again, whatever. - * This isn't needed for every caller (such as createElementNS & DOMElement::__construct), but isn't harmful and simplifies the mental model "when do I use which function?". - * This branch will also be taken unlikely anyway as in those cases it'll be for allocation failure. */ - nsptr = dom_get_ns_resolve_prefix_conflict(nodep, uri); - if (UNEXPECTED(nsptr == NULL)) { - goto err; - } + goto err; } } else { goto err; diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h index 46900e8e5fe93..c8d13c220de83 100644 --- a/ext/dom/php_dom.h +++ b/ext/dom/php_dom.h @@ -128,6 +128,7 @@ void php_dom_throw_error_with_message(int error_code, char *error_message, int s void node_list_unlink(xmlNodePtr node); int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len); xmlNsPtr dom_get_ns(xmlNodePtr node, char *uri, int *errorcode, char *prefix); +xmlNsPtr dom_get_ns_unchecked(xmlNodePtr nodep, char *uri, char *prefix); void dom_reconcile_ns(xmlDocPtr doc, xmlNodePtr nodep); void dom_reconcile_ns_list(xmlDocPtr doc, xmlNodePtr nodep, xmlNodePtr last); xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName); diff --git a/ext/dom/tests/DOMDocument_adoptNode_attribute_references.phpt b/ext/dom/tests/DOMDocument_adoptNode_attribute_references.phpt new file mode 100644 index 0000000000000..fcbf032bbfd39 --- /dev/null +++ b/ext/dom/tests/DOMDocument_adoptNode_attribute_references.phpt @@ -0,0 +1,27 @@ +--TEST-- +DOMDocument::adoptNode() with attribute references +--EXTENSIONS-- +dom +--FILE-- +appendChild($dom->createElement('root')); +$root->setAttributeNS("urn:a", "a:root1", "bar"); +$root1 = $root->getAttributeNodeNS("urn:a", "root1"); +echo $dom->saveXML(); + +$dom = new DOMDocument; +$dom->appendChild($dom->adoptNode($root)); +foreach ($dom->documentElement->attributes as $attr) { + var_dump($attr->namespaceURI, $attr->prefix, $attr->localName, $attr->nodeValue); +} + +?> +--EXPECT-- + + +string(5) "urn:a" +string(1) "a" +string(5) "root1" +string(3) "bar" diff --git a/ext/dom/tests/DOMElement_toggleAttribute_without_document.phpt b/ext/dom/tests/DOMElement_toggleAttribute_without_document.phpt new file mode 100644 index 0000000000000..ecd930b487c8e --- /dev/null +++ b/ext/dom/tests/DOMElement_toggleAttribute_without_document.phpt @@ -0,0 +1,17 @@ +--TEST-- +DOMElement::toggleAttribute() without a document +--EXTENSIONS-- +dom +--FILE-- +toggleAttribute('foo', true); + +$dom = new DOMDocument; +$element = $dom->importNode($element, true); +echo $dom->saveXML($element), "\n"; + +?> +--EXPECT-- + diff --git a/ext/dom/tests/gh12870.inc b/ext/dom/tests/gh12870.inc new file mode 100644 index 0000000000000..d7cfd3df7097e --- /dev/null +++ b/ext/dom/tests/gh12870.inc @@ -0,0 +1,26 @@ +appendChild($d->createElement('root')); + try { + $attr = $d->createAttributeNS($uri, $qualifiedName); + $d->documentElement->setAttributeNodeNS($attr); + echo "Attr prefix: "; + var_dump($attr->prefix); + echo "Attr namespaceURI: "; + var_dump($attr->namespaceURI); + echo "Attr value: "; + var_dump($attr->value); + echo "root namespaceURI: "; + var_dump($d->documentElement->namespaceURI); + echo "Equality check: "; + $parts = explode(':', $qualifiedName); + var_dump($attr === $d->documentElement->getAttributeNodeNS($uri, $parts[count($parts) - 1])); + echo $d->saveXML(), "\n"; + } catch (DOMException $e) { + echo "Exception: ", $e->getMessage(), "\n\n"; + } +} diff --git a/ext/dom/tests/gh12870_a.phpt b/ext/dom/tests/gh12870_a.phpt new file mode 100644 index 0000000000000..bd085c18bbe05 --- /dev/null +++ b/ext/dom/tests/gh12870_a.phpt @@ -0,0 +1,72 @@ +--TEST-- +GH-12870 (Creating an xmlns attribute results in a DOMException) - xmlns variations +--EXTENSIONS-- +dom +--FILE-- + +--EXPECT-- +=== NORMAL CASES === +--- Testing "http://www.w3.org/2000/xmlns/qx", "foo:xmlns" --- +Attr prefix: string(3) "foo" +Attr namespaceURI: string(31) "http://www.w3.org/2000/xmlns/qx" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +--- Testing "http://www.w3.org/2000/xmlns/", "xmlns" --- +Attr prefix: string(0) "" +Attr namespaceURI: string(29) "http://www.w3.org/2000/xmlns/" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +--- Testing "http://www.w3.org/2000/xmlns/", "xmlns:xmlns" --- +Attr prefix: string(5) "xmlns" +Attr namespaceURI: string(29) "http://www.w3.org/2000/xmlns/" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +=== ERROR CASES === +--- Testing "http://www.w3.org/2000/xmlns/", "bar:xmlns" --- +Exception: Namespace Error + +--- Testing "http://www.w3.org/2000/xmlns/a", "xmlns" --- +Exception: Namespace Error + +--- Testing "http://www.w3.org/2000/xmlns/a", "xmlns:bar" --- +Exception: Namespace Error + +--- Testing NULL, "xmlns:bar" --- +Exception: Namespace Error + +--- Testing "", "xmlns" --- +Exception: Namespace Error + +--- Testing "http://www.w3.org/2000/xmlns/", "" --- +Exception: Namespace Error diff --git a/ext/dom/tests/gh12870_b.phpt b/ext/dom/tests/gh12870_b.phpt new file mode 100644 index 0000000000000..f70c56a477c96 --- /dev/null +++ b/ext/dom/tests/gh12870_b.phpt @@ -0,0 +1,84 @@ +--TEST-- +GH-12870 (Creating an xmlns attribute results in a DOMException) - xml variations +--EXTENSIONS-- +dom +--FILE-- + +--EXPECT-- +=== NORMAL CASES === +--- Testing "http://www.w3.org/XML/1998/namespaceqx", "foo:xml" --- +Attr prefix: string(3) "foo" +Attr namespaceURI: string(38) "http://www.w3.org/XML/1998/namespaceqx" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +--- Testing "http://www.w3.org/XML/1998/namespace", "xml" --- +Attr prefix: string(3) "xml" +Attr namespaceURI: string(36) "http://www.w3.org/XML/1998/namespace" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +--- Testing "http://www.w3.org/XML/1998/namespace", "bar:xml" --- +Attr prefix: string(3) "xml" +Attr namespaceURI: string(36) "http://www.w3.org/XML/1998/namespace" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +--- Testing "", "xml" --- +Attr prefix: string(0) "" +Attr namespaceURI: NULL +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(false) + + + +--- Testing "http://www.w3.org/XML/1998/namespacea", "xml" --- +Attr prefix: string(7) "default" +Attr namespaceURI: string(37) "http://www.w3.org/XML/1998/namespacea" +Attr value: string(0) "" +root namespaceURI: NULL +Equality check: bool(true) + + + +=== ERROR CASES === +--- Testing "http://www.w3.org/XML/1998/namespace", "xmlns:xml" --- +Exception: Namespace Error + +--- Testing "http://www.w3.org/XML/1998/namespace", "" --- +Exception: Namespace Error + +--- Testing "http://www.w3.org/XML/1998/namespacea", "xml:foo" --- +Exception: Namespace Error + +--- Testing NULL, "xml:foo" --- +Exception: Namespace Error diff --git a/ext/dom/tests/gh13012.phpt b/ext/dom/tests/gh13012.phpt new file mode 100644 index 0000000000000..384b43d20099c --- /dev/null +++ b/ext/dom/tests/gh13012.phpt @@ -0,0 +1,37 @@ +--TEST-- +GH-13012 (DOMNode::isEqualNode() is incorrect when attribute order is different) +--EXTENSIONS-- +dom +--FILE-- +loadXML(""); + +foreach ($dom->getElementsByTagName('x') as $x1) { + foreach ($dom->getElementsByTagName('x') as $x2) { + echo "Comparing ", $dom->saveXML($x1), " with ", $dom->saveXML($x2), "\n"; + var_dump($x1->isEqualNode($x2)); + } +} + +?> +--EXPECT-- +Comparing with +bool(true) +Comparing with +bool(true) +Comparing with +bool(false) +Comparing with +bool(true) +Comparing with +bool(true) +Comparing with +bool(false) +Comparing with +bool(false) +Comparing with +bool(false) +Comparing with +bool(true) diff --git a/ext/dom/tests/gh13012_ns.phpt b/ext/dom/tests/gh13012_ns.phpt new file mode 100644 index 0000000000000..33edbe91790d8 --- /dev/null +++ b/ext/dom/tests/gh13012_ns.phpt @@ -0,0 +1,37 @@ +--TEST-- +GH-13012 (DOMNode::isEqualNode() is incorrect when attribute order is different - ns variation) +--EXTENSIONS-- +dom +--FILE-- +loadXML(""); + +foreach ($dom->getElementsByTagName('x') as $x1) { + foreach ($dom->getElementsByTagName('x') as $x2) { + echo "Comparing ", $dom->saveXML($x1), " with ", $dom->saveXML($x2), "\n"; + var_dump($x1->isEqualNode($x2)); + } +} + +?> +--EXPECT-- +Comparing with +bool(true) +Comparing with +bool(false) +Comparing with +bool(false) +Comparing with +bool(false) +Comparing with +bool(true) +Comparing with +bool(true) +Comparing with +bool(false) +Comparing with +bool(true) +Comparing with +bool(true) diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index b0b650b7be914..b9ae159574c7e 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -26,6 +26,7 @@ #include "zend_closures.h" #include "zend_weakrefs.h" #include "main/SAPI.h" +#include "zend_observer.h" #include @@ -1302,6 +1303,10 @@ static zval *zend_ffi_cdata_write_field(zend_object *obj, zend_string *field_nam if (cache_slot && *cache_slot == type) { field = *(cache_slot + 1); } else { + if (UNEXPECTED(type == NULL)) { + zend_throw_error(zend_ffi_exception_ce, "Attempt to assign field '%s' to uninitialized FFI\\CData object", ZSTR_VAL(field_name)); + return value; + } if (type->kind == ZEND_FFI_TYPE_POINTER) { type = ZEND_FFI_TYPE(type->pointer.type); } @@ -5369,6 +5374,25 @@ static zend_result zend_ffi_preload(char *preload) /* {{{ */ } /* }}} */ +/* The startup code for observers adds a temporary to each function for internal use. + * The "new", "cast", and "type" functions in FFI are both static and non-static. + * Only the static versions are in the function table and the non-static versions are not. + * This means the non-static versions will be skipped by the observers startup code. + * This function fixes that by incrementing the temporary count for the non-static versions. + */ +static zend_result (*prev_zend_post_startup_cb)(void); +static zend_result ffi_fixup_temporaries(void) { + if (ZEND_OBSERVER_ENABLED) { + ++zend_ffi_new_fn.T; + ++zend_ffi_cast_fn.T; + ++zend_ffi_type_fn.T; + } + if (prev_zend_post_startup_cb) { + return prev_zend_post_startup_cb(); + } + return SUCCESS; +} + /* {{{ ZEND_MINIT_FUNCTION */ ZEND_MINIT_FUNCTION(ffi) { @@ -5391,6 +5415,9 @@ ZEND_MINIT_FUNCTION(ffi) memcpy(&zend_ffi_type_fn, zend_hash_str_find_ptr(&zend_ffi_ce->function_table, "type", sizeof("type")-1), sizeof(zend_internal_function)); zend_ffi_type_fn.fn_flags &= ~ZEND_ACC_STATIC; + prev_zend_post_startup_cb = zend_post_startup_cb; + zend_post_startup_cb = ffi_fixup_temporaries; + memcpy(&zend_ffi_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); zend_ffi_handlers.get_constructor = zend_fake_get_constructor; zend_ffi_handlers.free_obj = zend_ffi_free_obj; diff --git a/ext/ffi/tests/gh12905.phpt b/ext/ffi/tests/gh12905.phpt new file mode 100644 index 0000000000000..adcc32db2907c --- /dev/null +++ b/ext/ffi/tests/gh12905.phpt @@ -0,0 +1,33 @@ +--TEST-- +GH-12905 (FFI::new interacts badly with observers) +--EXTENSIONS-- +ffi +zend_test +--SKIPIF-- + +--INI-- +ffi.enable=1 +zend_test.observer.enabled=1 +zend_test.observer.observe_all=1 +zend_test.observer.show_return_value=0 +--FILE-- +new("int"); +?> +--EXPECTF-- + + + + + + + + + diff --git a/ext/ffi/tests/gh9698.phpt b/ext/ffi/tests/gh9698.phpt new file mode 100644 index 0000000000000..bab403810cd3f --- /dev/null +++ b/ext/ffi/tests/gh9698.phpt @@ -0,0 +1,21 @@ +--TEST-- +GH-9698 (stream_wrapper_register crashes with FFI\CData provided as class) +--EXTENSIONS-- +ffi +--SKIPIF-- + +--FILE-- +getMessage(); +} +?> + +DONE +--EXPECT-- +Attempt to assign field 'context' to uninitialized FFI\CData object +DONE diff --git a/ext/hash/hash_adler32.c b/ext/hash/hash_adler32.c index 52ad17c39fd05..3937853fdc317 100644 --- a/ext/hash/hash_adler32.c +++ b/ext/hash/hash_adler32.c @@ -25,11 +25,11 @@ PHP_HASH_API void PHP_ADLER32Init(PHP_ADLER32_CTX *context, ZEND_ATTRIBUTE_UNUSE PHP_HASH_API void PHP_ADLER32Update(PHP_ADLER32_CTX *context, const unsigned char *input, size_t len) { - uint32_t i, s[2]; + uint32_t s[2]; s[0] = context->state & 0xffff; s[1] = (context->state >> 16) & 0xffff; - for (i = 0; i < len; ++i) { + for (size_t i = 0; i < len; ++i) { s[0] += input[i]; s[1] += s[0]; if (s[1]>=0x7fffffff) diff --git a/ext/hash/hash_haval.c b/ext/hash/hash_haval.c index e1211a0b22ac8..67bc2b2e4780e 100644 --- a/ext/hash/hash_haval.c +++ b/ext/hash/hash_haval.c @@ -280,7 +280,8 @@ PHP_HASH_HAVAL_INIT(5,256) /* {{{ PHP_HAVALUpdate */ PHP_HASH_API void PHP_HAVALUpdate(PHP_HAVAL_CTX *context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 128 */ index = (unsigned int) ((context->count[0] >> 3) & 0x7F); @@ -288,7 +289,7 @@ PHP_HASH_API void PHP_HAVALUpdate(PHP_HAVAL_CTX *context, const unsigned char *i if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 128 - index; diff --git a/ext/hash/hash_md.c b/ext/hash/hash_md.c index eef2af3526608..96da7fce82a27 100644 --- a/ext/hash/hash_md.c +++ b/ext/hash/hash_md.c @@ -204,7 +204,8 @@ PHP_HASH_API void PHP_MD4InitArgs(PHP_MD4_CTX * context, ZEND_ATTRIBUTE_UNUSED H */ PHP_HASH_API void PHP_MD4Update(PHP_MD4_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -213,7 +214,7 @@ PHP_HASH_API void PHP_MD4Update(PHP_MD4_CTX * context, const unsigned char *inpu if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) context->count[1]++; - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; diff --git a/ext/hash/hash_ripemd.c b/ext/hash/hash_ripemd.c index b09615532335d..4802fdf9a1fcc 100644 --- a/ext/hash/hash_ripemd.c +++ b/ext/hash/hash_ripemd.c @@ -271,7 +271,8 @@ static void RIPEMD128Transform(uint32_t state[4], const unsigned char block[64]) */ PHP_HASH_API void PHP_RIPEMD128Update(PHP_RIPEMD128_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -280,7 +281,7 @@ PHP_HASH_API void PHP_RIPEMD128Update(PHP_RIPEMD128_CTX * context, const unsigne if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; @@ -369,7 +370,8 @@ static void RIPEMD256Transform(uint32_t state[8], const unsigned char block[64]) */ PHP_HASH_API void PHP_RIPEMD256Update(PHP_RIPEMD256_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -378,7 +380,7 @@ PHP_HASH_API void PHP_RIPEMD256Update(PHP_RIPEMD256_CTX * context, const unsigne if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; @@ -468,7 +470,8 @@ static void RIPEMD160Transform(uint32_t state[5], const unsigned char block[64]) */ PHP_HASH_API void PHP_RIPEMD160Update(PHP_RIPEMD160_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -477,7 +480,7 @@ PHP_HASH_API void PHP_RIPEMD160Update(PHP_RIPEMD160_CTX * context, const unsigne if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; @@ -576,7 +579,8 @@ static void RIPEMD320Transform(uint32_t state[10], const unsigned char block[64] */ PHP_HASH_API void PHP_RIPEMD320Update(PHP_RIPEMD320_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -585,7 +589,7 @@ PHP_HASH_API void PHP_RIPEMD320Update(PHP_RIPEMD320_CTX * context, const unsigne if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; diff --git a/ext/hash/hash_sha.c b/ext/hash/hash_sha.c index 0fc0d02828cb2..201a8513f9626 100644 --- a/ext/hash/hash_sha.c +++ b/ext/hash/hash_sha.c @@ -222,7 +222,8 @@ PHP_HASH_API void PHP_SHA224InitArgs(PHP_SHA224_CTX * context, ZEND_ATTRIBUTE_UN */ PHP_HASH_API void PHP_SHA224Update(PHP_SHA224_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -231,7 +232,7 @@ PHP_HASH_API void PHP_SHA224Update(PHP_SHA224_CTX * context, const unsigned char if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; @@ -299,7 +300,8 @@ PHP_HASH_API void PHP_SHA224Final(unsigned char digest[28], PHP_SHA224_CTX * con */ PHP_HASH_API void PHP_SHA256Update(PHP_SHA256_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -308,7 +310,7 @@ PHP_HASH_API void PHP_SHA256Update(PHP_SHA256_CTX * context, const unsigned char if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; @@ -513,7 +515,8 @@ static void SHA512Transform(uint64_t state[8], const unsigned char block[128]) */ PHP_HASH_API void PHP_SHA384Update(PHP_SHA384_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i = 0, index, partLen; + unsigned int index, partLen; + size_t i = 0; /* Compute number of bytes mod 128 */ index = (unsigned int) ((context->count[0] >> 3) & 0x7F); @@ -522,7 +525,8 @@ PHP_HASH_API void PHP_SHA384Update(PHP_SHA384_CTX * context, const unsigned char if ((context->count[0] += ((uint64_t) inputLen << 3)) < ((uint64_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint64_t) inputLen >> 61); + /* The cast may seem unnecessary, but on 32-bit this makes sure the result is 0 without invoking undefined behaviour. */ + context->count[1] += (uint64_t) inputLen >> 61; partLen = 128 - index; @@ -666,7 +670,8 @@ PHP_HASH_API void PHP_SHA512_224InitArgs(PHP_SHA512_CTX * context, ZEND_ATTRIBUT */ PHP_HASH_API void PHP_SHA512Update(PHP_SHA512_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 128 */ index = (unsigned int) ((context->count[0] >> 3) & 0x7F); @@ -675,7 +680,8 @@ PHP_HASH_API void PHP_SHA512Update(PHP_SHA512_CTX * context, const unsigned char if ((context->count[0] += ((uint64_t) inputLen << 3)) < ((uint64_t) inputLen << 3)) { context->count[1]++; } - context->count[1] += ((uint64_t) inputLen >> 61); + /* The cast may seem unnecessary, but on 32-bit this makes sure the result is 0 without invoking undefined behaviour. */ + context->count[1] += (uint64_t) inputLen >> 61; partLen = 128 - index; diff --git a/ext/intl/dateformat/dateformat_create.cpp b/ext/intl/dateformat/dateformat_create.cpp index 5c96f41fadf35..399740dbca227 100644 --- a/ext/intl/dateformat/dateformat_create.cpp +++ b/ext/intl/dateformat/dateformat_create.cpp @@ -112,7 +112,7 @@ static zend_result datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_error_handlin } locale = Locale::createFromName(locale_str); /* get*Name accessors being set does not preclude being bogus */ - if (locale.isBogus() || strlen(locale.getISO3Language()) == 0) { + if (locale.isBogus() || ((locale_len == 1 && locale_str[0] != 'C') && strlen(locale.getISO3Language()) == 0)) { goto error; } diff --git a/ext/intl/tests/gh12943.phpt b/ext/intl/tests/gh12943.phpt new file mode 100644 index 0000000000000..1a8856640acd3 --- /dev/null +++ b/ext/intl/tests/gh12943.phpt @@ -0,0 +1,15 @@ +--TEST-- +GitHub #12943 IntlDateFormatter::locale accepting "C". +--EXTENSIONS-- +intl +--FILE-- +getLocale(ULOC_VALID_LOCALE)); +--EXPECTF-- +string(%d) "%s" diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 526aa296aad1a..e8654abeed700 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -35,6 +35,7 @@ #include #include #include +#include #ifdef LIBXML_SCHEMAS_ENABLED #include #include diff --git a/ext/libxml/php_libxml.h b/ext/libxml/php_libxml.h index 16507b0f9f0b2..9fbe9ff0f9e81 100644 --- a/ext/libxml/php_libxml.h +++ b/ext/libxml/php_libxml.h @@ -149,12 +149,30 @@ PHP_LIBXML_API void php_libxml_shutdown(void); ZEND_TSRMLS_CACHE_EXTERN() #endif +#if defined(__clang__) +# define PHP_LIBXML_IGNORE_DEPRECATIONS_START \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +# define PHP_LIBXML_IGNORE_DEPRECATIONS_END \ + _Pragma("clang diagnostic pop") +#elif defined(__GNUC__) +# define PHP_LIBXML_IGNORE_DEPRECATIONS_START \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +# define PHP_LIBXML_IGNORE_DEPRECATIONS_END \ + _Pragma("GCC diagnostic pop") +#else +# define PHP_LIBXML_IGNORE_DEPRECATIONS_START +# define PHP_LIBXML_IGNORE_DEPRECATIONS_END +#endif + /* Other extension may override the global state options, these global options * are copied initially to ctxt->options. Set the options to a known good value. * See libxml2 globals.c and parserInternals.c. * The unique_name argument allows multiple sanitizes and restores within the * same function, even nested is necessary. */ #define PHP_LIBXML_SANITIZE_GLOBALS(unique_name) \ + PHP_LIBXML_IGNORE_DEPRECATIONS_START \ int xml_old_loadsubset_##unique_name = xmlLoadExtDtdDefaultValue; \ xmlLoadExtDtdDefaultValue = 0; \ int xml_old_validate_##unique_name = xmlDoValidityCheckingDefaultValue; \ @@ -162,15 +180,18 @@ ZEND_TSRMLS_CACHE_EXTERN() int xml_old_pedantic_##unique_name = xmlPedanticParserDefault(0); \ int xml_old_substitute_##unique_name = xmlSubstituteEntitiesDefault(0); \ int xml_old_linenrs_##unique_name = xmlLineNumbersDefault(0); \ - int xml_old_blanks_##unique_name = xmlKeepBlanksDefault(1); + int xml_old_blanks_##unique_name = xmlKeepBlanksDefault(1); \ + PHP_LIBXML_IGNORE_DEPRECATIONS_END #define PHP_LIBXML_RESTORE_GLOBALS(unique_name) \ + PHP_LIBXML_IGNORE_DEPRECATIONS_START \ xmlLoadExtDtdDefaultValue = xml_old_loadsubset_##unique_name; \ xmlDoValidityCheckingDefaultValue = xml_old_validate_##unique_name; \ (void) xmlPedanticParserDefault(xml_old_pedantic_##unique_name); \ (void) xmlSubstituteEntitiesDefault(xml_old_substitute_##unique_name); \ (void) xmlLineNumbersDefault(xml_old_linenrs_##unique_name); \ - (void) xmlKeepBlanksDefault(xml_old_blanks_##unique_name); + (void) xmlKeepBlanksDefault(xml_old_blanks_##unique_name); \ + PHP_LIBXML_IGNORE_DEPRECATIONS_END /* Alternative for above, working directly on the context and not setting globals. * Generally faster because no locking is involved, and this has the advantage that it sets the options to a known good value. */ diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index a9f6cd6282922..ad15dd6768e03 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -38,6 +38,7 @@ #include "libmbfl/mbfl/mbfilter_wchar.h" #include "libmbfl/mbfl/eaw_table.h" #include "libmbfl/filters/mbfilter_base64.h" +#include "libmbfl/filters/mbfilter_cjk.h" #include "libmbfl/filters/mbfilter_qprint.h" #include "libmbfl/filters/mbfilter_htmlent.h" #include "libmbfl/filters/mbfilter_uuencode.h" @@ -2091,9 +2092,10 @@ static zend_string* mb_get_substr_slow(unsigned char *in, size_t in_len, size_t if (from >= out_len) { from -= out_len; } else { - enc->from_wchar(wchar_buf + from, MIN(out_len - from, len), &buf, !in_len || out_len >= len); + size_t needed_codepoints = MIN(out_len - from, len); + enc->from_wchar(wchar_buf + from, needed_codepoints, &buf, !in_len || out_len >= len); from = 0; - len -= MIN(out_len, len); + len -= needed_codepoints; } } @@ -2105,8 +2107,9 @@ static zend_string* mb_get_substr(zend_string *input, size_t from, size_t len, c unsigned char *in = (unsigned char*)ZSTR_VAL(input); size_t in_len = ZSTR_LEN(input); - if (from >= in_len) { - /* No supported text encoding decodes to more than one codepoint per byte + if (len == 0 || (from >= in_len && enc != &mbfl_encoding_sjis_mac)) { + /* Other than MacJapanese, no supported text encoding decodes to + * more than one codepoint per byte * So if the number of codepoints to skip >= number of input bytes, * then definitely the output should be empty */ return zend_empty_string; @@ -2127,30 +2130,6 @@ static zend_string* mb_get_substr(zend_string *input, size_t from, size_t len, c len = in_len; } return zend_string_init_fast((const char*)in, len); - } else if (enc->mblen_table) { - /* The use of the `mblen_table` means that for encodings like MacJapanese, - * we treat each character in its native charset as "1 character", even if it - * maps to a sequence of several codepoints */ - const unsigned char *mbtab = enc->mblen_table; - unsigned char *limit = in + in_len; - while (from && in < limit) { - in += mbtab[*in]; - from--; - } - if (in >= limit) { - return zend_empty_string; - } else if (len == MBFL_SUBSTR_UNTIL_END) { - return zend_string_init_fast((const char*)in, limit - in); - } - unsigned char *end = in; - while (len && end < limit) { - end += mbtab[*end]; - len--; - } - if (end > limit) { - end = limit; - } - return zend_string_init_fast((const char*)in, end - in); } return mb_get_substr_slow(in, in_len, from, len, enc); @@ -2343,21 +2322,7 @@ PHP_FUNCTION(mb_substr) size_t mblen = 0; if (from < 0 || (!len_is_null && len < 0)) { - if (enc->mblen_table) { - /* Because we use the `mblen_table` when iterating over the string and - * extracting the requested part, we also need to use it here for counting - * the "length" of the string - * Otherwise, we can get wrong results for text encodings like MacJapanese, - * where one native 'character' can map to a sequence of several codepoints */ - const unsigned char *mbtab = enc->mblen_table; - unsigned char *p = (unsigned char*)ZSTR_VAL(str), *e = p + ZSTR_LEN(str); - while (p < e) { - p += mbtab[*p]; - mblen++; - } - } else { - mblen = mb_get_strlen(str, enc); - } + mblen = mb_get_strlen(str, enc); } /* if "from" position is negative, count start position from the end diff --git a/ext/mbstring/tests/mb_strstr.phpt b/ext/mbstring/tests/mb_strstr.phpt index 4cdbb3df24839..85b0eeb19f404 100644 --- a/ext/mbstring/tests/mb_strstr.phpt +++ b/ext/mbstring/tests/mb_strstr.phpt @@ -26,6 +26,11 @@ var_dump(FROM_EUC_JP(mb_strstr(EUC_JP("あいうえおかきくけこ"), EUC_JP( var_dump(bin2hex(mb_strstr("\xdd\x00", "", false, 'UTF-8'))); var_dump(bin2hex(mb_strstr("M\xff\xff\xff\x00", "\x00", false, "SJIS"))); +// Test handling of invalid UTF-8 string +// Thanks to Stefan Schiller +var_dump(mb_strstr("\xf0start", "start", false, "UTF-8")); +var_dump(mb_strstr("\xf0start", "start", true, "UTF-8")); + ?> --EXPECT-- string(18) "おかきくけこ" @@ -36,5 +41,7 @@ string(12) "あいうえ" string(18) "おかきくけこ" string(18) "おかきくけこ" string(12) "あいうえ" -string(4) "dd00" +string(4) "3f00" string(2) "00" +string(5) "start" +string(1) "?" diff --git a/ext/mbstring/tests/mb_substr.phpt b/ext/mbstring/tests/mb_substr.phpt index ef37ca6dc192a..8c376fb5e6ddf 100644 --- a/ext/mbstring/tests/mb_substr.phpt +++ b/ext/mbstring/tests/mb_substr.phpt @@ -118,12 +118,26 @@ print "3: " . mb_convert_encoding(mb_substr($utf7, -5, 3, 'UTF-7'), 'UTF-8', 'UT print "4: " . mb_convert_encoding(mb_substr($utf7, 1, null, 'UTF-7'), 'UTF-8', 'UTF-7') . "\n"; print "5:" . mb_convert_encoding(mb_substr($utf7, 10, 0, 'UTF-7'), 'UTF-8', 'UTF-7') . "\n"; +echo "Testing agreement with mb_strpos on invalid UTF-8 string:\n"; +/* Stefan Schiller pointed out that on invalid UTF-8 strings, character indices returned + * by mb_strpos would not extract the desired part of the string when passed to mb_substr. + * This is the test case which he provided: */ +$data = "\xF0AAA"; +$pos = mb_strpos($data, "<", 0, "UTF-8"); +$out = mb_substr($data, 0, $pos, "UTF-8"); +print $out . "\n"; + echo "Regression:\n"; /* During development, one >= comparison in mb_get_substr was wrongly written as > * This was caught by libFuzzer */ $str = "\xbd\xbd\xbd\xbd\xbd\xbd\xbd\xbe\xbd\xbd\xbd\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x89\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x00\x00\x00\x00\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8f\x8b\x8b\x8b\xbd\xbd\xbd\xbd\xbd\xbd\xbd\xbe\x01:O\xaa\xd3"; echo bin2hex(mb_substr($str, 0, 128, "JIS")), "\n"; +/* Alex messed up when reimplementing mb_substr and, in cases where `from` is non-zero and + * the number of characters to extract is more than 128, miscalculated where to end the substring + * Thanks to Maurício Fauth for finding the issue */ +var_dump(mb_substr('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum dapibus feugiat ex non cursus. Pellentesque vestibulum tellus sit lectus.', 19, -1)); + ?> --EXPECT-- EUC-JP: @@ -138,30 +152,30 @@ SJIS: 4: 967b8cea8365834c8358836782c582b781423031323334825482558256825782588142 5: -- Testing illegal SJIS byte 0x80 -- -6380 -806162 +633f +3f6162 SJIS-2004: -6380 -806162 +633f +3f6162 MacJapanese: 6380 806162 SJIS-Mobile#DOCOMO: -6380 -806162 +633f +3f6162 SJIS-Mobile#KDDI: -6380 -806162 +633f +3f6162 SJIS-Mobile#SoftBank: -6380 -806162 +633f +3f6162 -- Testing MacJapanese characters which map to 3-5 codepoints each -- 616263 -85ab85ac -85ac +3f3f +58 616263 -85bf85c0 -85c0 +3f3f +78 ISO-2022-JP: 1: 1b2442212121721b284241 2: 43 @@ -200,5 +214,8 @@ UTF-7: 3: йте 4: reek: Σὲ γνωρίζω ἀπὸ τὴν κόψη Russian: Зарегистрируйтесь 5: +Testing agreement with mb_strpos on invalid UTF-8 string: +?AAA Regression: 1b28493d3d3d3d3d3d3d3e3d3d3d1b28423f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f000000003f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f1b28493d3d3d3d3d3d3d3e1b2842013a4f1b28492a1b2842 +string(121) "it amet, consectetur adipiscing elit. Vestibulum dapibus feugiat ex non cursus. Pellentesque vestibulum tellus sit lectus" diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 443232894b287..579b5e989bd3a 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -168,7 +168,13 @@ static void _close_odbc_conn(zend_resource *rsrc) SQLFreeEnv(conn->henv); } efree(conn); - ODBCG(num_links)--; + /* See https://github.com/php/php-src/issues/12974 why we need to check the if */ +#ifdef ZTS + if (odbc_module_entry.module_started) +#endif + { + ODBCG(num_links)--; + } } /* }}} */ @@ -2194,7 +2200,7 @@ void odbc_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) } } - if (ODBCG(allow_persistent) <= 0) { + if (!ODBCG(allow_persistent)) { persistent = 0; } diff --git a/ext/opcache/jit/zend_jit_arm64.dasc b/ext/opcache/jit/zend_jit_arm64.dasc index 089879b3d5c57..52835196bdaf1 100644 --- a/ext/opcache/jit/zend_jit_arm64.dasc +++ b/ext/opcache/jit/zend_jit_arm64.dasc @@ -11792,7 +11792,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_ | GC_ADDREF REG0, TMP1w |1: if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { | // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) | IF_ZVAL_REFCOUNTED op1_addr, >2, ZREG_TMP1, ZREG_TMP2 |.cold_code @@ -11819,12 +11819,12 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_ | EXT_CALL gc_possible_root, REG0 | b >5 } - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { |.code } } - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { | // ZVAL_REF(variable_ptr, ref) | SET_ZVAL_PTR op1_addr, REG0, TMP1 | SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX, TMP1w, TMP2 diff --git a/ext/opcache/jit/zend_jit_gdb.c b/ext/opcache/jit/zend_jit_gdb.c index 39169108a8f5e..867312830f2d4 100644 --- a/ext/opcache/jit/zend_jit_gdb.c +++ b/ext/opcache/jit/zend_jit_gdb.c @@ -397,6 +397,7 @@ static void zend_gdbjit_debugabbrev(zend_gdbjit_ctx *ctx) DUV(DW_FORM_data4); DB(0); DB(0); + DB(0); ctx->p = p; } diff --git a/ext/opcache/jit/zend_jit_vm_helpers.c b/ext/opcache/jit/zend_jit_vm_helpers.c index 643b0248b7487..4eca7d78f1e86 100644 --- a/ext/opcache/jit/zend_jit_vm_helpers.c +++ b/ext/opcache/jit/zend_jit_vm_helpers.c @@ -205,7 +205,6 @@ void ZEND_FASTCALL zend_jit_undefined_long_key(EXECUTE_DATA_D) zval *result = EX_VAR(opline->result.var); zval *dim; - ZVAL_NULL(result); if (opline->op2_type == IS_CONST) { dim = RT_CONSTANT(opline, opline->op2); } else { @@ -213,6 +212,7 @@ void ZEND_FASTCALL zend_jit_undefined_long_key(EXECUTE_DATA_D) } ZEND_ASSERT(Z_TYPE_P(dim) == IS_LONG); zend_error(E_WARNING, "Undefined array key " ZEND_LONG_FMT, Z_LVAL_P(dim)); + ZVAL_NULL(result); } void ZEND_FASTCALL zend_jit_undefined_string_key(EXECUTE_DATA_D) @@ -222,7 +222,6 @@ void ZEND_FASTCALL zend_jit_undefined_string_key(EXECUTE_DATA_D) zval *dim; zend_ulong lval; - ZVAL_NULL(result); if (opline->op2_type == IS_CONST) { dim = RT_CONSTANT(opline, opline->op2); } else { @@ -234,6 +233,7 @@ void ZEND_FASTCALL zend_jit_undefined_string_key(EXECUTE_DATA_D) } else { zend_error(E_WARNING, "Undefined array key \"%s\"", Z_STRVAL_P(dim)); } + ZVAL_NULL(result); } ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_jit_profile_helper(ZEND_OPCODE_HANDLER_ARGS) diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 22d205dfed0ec..814da32123066 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -12556,7 +12556,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_ | GC_ADDREF r0 |1: if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) { - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { | // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) | IF_ZVAL_REFCOUNTED op1_addr, >2 |.cold_code @@ -12583,12 +12583,12 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_ | EXT_CALL gc_possible_root, r1 | jmp >5 } - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { |.code } } - if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) { | // ZVAL_REF(variable_ptr, ref) | SET_ZVAL_PTR op1_addr, r0 | SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX diff --git a/ext/opcache/shared_alloc_mmap.c b/ext/opcache/shared_alloc_mmap.c index ca492b122157d..d5e4612bc104e 100644 --- a/ext/opcache/shared_alloc_mmap.c +++ b/ext/opcache/shared_alloc_mmap.c @@ -48,7 +48,7 @@ # define MAP_HUGETLB MAP_ALIGNED_SUPER #endif -#if (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) +#if (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) && !defined(__SANITIZE_ADDRESS__) static void *find_prefered_mmap_base(size_t requested_size) { size_t huge_page_size = 2 * 1024 * 1024; @@ -65,6 +65,18 @@ static void *find_prefered_mmap_base(size_t requested_size) } while (fgets(buffer, MAXPATHLEN, f) && sscanf(buffer, "%lx-%lx", &start, &end) == 2) { + /* Don't place the segment directly before or after the heap segment. Due to an selinux bug, + * a segment directly preceding or following the heap is interpreted as heap memory, which + * will result in an execheap violation for the JIT. + * See https://bugzilla.kernel.org/show_bug.cgi?id=218258. */ + bool heap_segment = strstr(buffer, "[heap]") != NULL; + if (heap_segment) { + uintptr_t start_base = start & ~(huge_page_size - 1); + if (last_free_addr + requested_size >= start_base) { + last_free_addr = ZEND_MM_ALIGNED_SIZE_EX(end + huge_page_size, huge_page_size); + continue; + } + } if ((uintptr_t)execute_ex >= start) { /* the current segment lays before PHP .text segment or PHP .text segment itself */ /*Search for candidates at the end of the free segment near the .text segment @@ -98,7 +110,9 @@ static void *find_prefered_mmap_base(size_t requested_size) } } last_free_addr = ZEND_MM_ALIGNED_SIZE_EX(end, huge_page_size); - + if (heap_segment) { + last_free_addr += huge_page_size; + } } fclose(f); #elif defined(__FreeBSD__) @@ -186,7 +200,7 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_ #ifdef MAP_JIT flags |= MAP_JIT; #endif -#if (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) +#if (defined(__linux__) || defined(__FreeBSD__)) && (defined(__x86_64__) || defined (__aarch64__)) && !defined(__SANITIZE_ADDRESS__) void *hint = find_prefered_mmap_base(requested_size); if (hint != MAP_FAILED) { # ifdef MAP_HUGETLB diff --git a/ext/opcache/tests/jit/assign_static_prop_op_001.phpt b/ext/opcache/tests/jit/assign_static_prop_op_001.phpt new file mode 100644 index 0000000000000..da28851584b30 --- /dev/null +++ b/ext/opcache/tests/jit/assign_static_prop_op_001.phpt @@ -0,0 +1,23 @@ +--TEST-- +JIT ASSIGN_STATIC_PROP_OP: 001 +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--EXTENSIONS-- +opcache +--FILE-- + +--EXPECT-- +string(1) "1" diff --git a/ext/opcache/tests/jit/bind_global_001.phpt b/ext/opcache/tests/jit/bind_global_001.phpt new file mode 100644 index 0000000000000..5ad6fd2619631 --- /dev/null +++ b/ext/opcache/tests/jit/bind_global_001.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bind global and immutable string +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- + +--EXPECT-- +NULL diff --git a/ext/opcache/tests/jit/oss-fuzz-64727.phpt b/ext/opcache/tests/jit/oss-fuzz-64727.phpt new file mode 100644 index 0000000000000..e8479d1d2f6e4 --- /dev/null +++ b/ext/opcache/tests/jit/oss-fuzz-64727.phpt @@ -0,0 +1,27 @@ +--TEST-- +oss-fuzz #64727 +--INI-- +opcache.enable_cli=1 +opcache.jit_buffer_size=64M +opcache.jit=function +--EXTENSIONS-- +opcache +--FILE-- + +--EXPECT-- +int(0) +int(3) +int(3) +NULL diff --git a/ext/opcache/tests/opt/dce_014.phpt b/ext/opcache/tests/opt/dce_014.phpt new file mode 100644 index 0000000000000..a803b52772913 --- /dev/null +++ b/ext/opcache/tests/opt/dce_014.phpt @@ -0,0 +1,12 @@ +--TEST-- +DCE may remove FREE after FETCH_LIST_W +--FILE-- + +DONE +--EXPECT-- +DONE diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index b16e21549636d..9698b54a21085 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -3194,6 +3194,7 @@ PHP_FUNCTION(openssl_csr_sign) X509 *cert = NULL, *new_cert = NULL; EVP_PKEY * key = NULL, *priv_key = NULL; int i; + bool new_cert_used = false; struct php_x509_request req; ZEND_PARSE_PARAMETERS_START(4, 6) @@ -3315,11 +3316,12 @@ PHP_FUNCTION(openssl_csr_sign) object_init_ex(return_value, php_openssl_certificate_ce); cert_object = Z_OPENSSL_CERTIFICATE_P(return_value); cert_object->x509 = new_cert; + new_cert_used = true; cleanup: - if (cert == new_cert) { - cert = NULL; + if (!new_cert_used && new_cert) { + X509_free(new_cert); } PHP_SSL_REQ_DISPOSE(&req); @@ -3328,7 +3330,7 @@ PHP_FUNCTION(openssl_csr_sign) if (csr_str) { X509_REQ_free(csr); } - if (cert_str && cert) { + if (cert_str && cert && cert != new_cert) { X509_free(cert); } } diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index ce9c7967e7271..4ac271fefd4bf 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -930,8 +930,13 @@ PHP_METHOD(PDO, getAttribute) add_next_index_zval(return_value, &dbh->def_stmt_ctor_args); } return; + case PDO_ATTR_DEFAULT_FETCH_MODE: RETURN_LONG(dbh->default_fetch_type); + + case PDO_ATTR_STRINGIFY_FETCHES: + RETURN_BOOL(dbh->stringify); + default: break; } diff --git a/ext/pdo_mysql/tests/bug68371.phpt b/ext/pdo_mysql/tests/bug68371.phpt index 375011af33ea7..8a5113e437b29 100644 --- a/ext/pdo_mysql/tests/bug68371.phpt +++ b/ext/pdo_mysql/tests/bug68371.phpt @@ -96,6 +96,6 @@ array(1) { ERR ERR string(5) "mysql" -ERR +bool(false) ERR int(4) diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c index a9d5befdac8f2..fa160bfb471e4 100644 --- a/ext/pdo_odbc/odbc_driver.c +++ b/ext/pdo_odbc/odbc_driver.c @@ -344,6 +344,30 @@ static bool odbc_handle_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val) } H->assume_utf8 = bval; return true; + case PDO_ATTR_AUTOCOMMIT: + if (!pdo_get_bool_param(&bval, val)) { + return false; + } + if (dbh->in_txn) { + pdo_raise_impl_error(dbh, NULL, "HY000", "Cannot change autocommit mode while a transaction is already open"); + return false; + } + if (dbh->auto_commit ^ bval) { + dbh->auto_commit = bval; + RETCODE rc = SQLSetConnectAttr( + H->dbc, + SQL_ATTR_AUTOCOMMIT, + dbh->auto_commit ? (SQLPOINTER) SQL_AUTOCOMMIT_ON : (SQLPOINTER) SQL_AUTOCOMMIT_OFF, + SQL_IS_INTEGER + ); + if (rc != SQL_SUCCESS) { + pdo_odbc_drv_error( + dbh->auto_commit ? "SQLSetConnectAttr AUTOCOMMIT = ON" : "SQLSetConnectAttr AUTOCOMMIT = OFF" + ); + return false; + } + } + return true; default: strcpy(H->einfo.last_err_msg, "Unknown Attribute"); H->einfo.what = "setAttribute"; @@ -386,7 +410,9 @@ static int odbc_handle_get_attr(pdo_dbh_t *dbh, zend_long attr, zval *val) case PDO_ODBC_ATTR_ASSUME_UTF8: ZVAL_BOOL(val, H->assume_utf8 ? 1 : 0); return 1; - + case PDO_ATTR_AUTOCOMMIT: + ZVAL_BOOL(val, dbh->auto_commit); + return 1; } return 0; } diff --git a/ext/pdo_odbc/tests/autocommit.phpt b/ext/pdo_odbc/tests/autocommit.phpt new file mode 100644 index 0000000000000..3e17a4ad2e9e4 --- /dev/null +++ b/ext/pdo_odbc/tests/autocommit.phpt @@ -0,0 +1,53 @@ +--TEST-- +PDO ODBC auto commit mode +--EXTENSIONS-- +pdo_odbc +--SKIPIF-- + +--XLEAK-- +A bug in msodbcsql causes a memory leak when reconnecting after closing. See GH-12306 +--FILE-- +exec("CREATE TABLE {$table} (id INT, name VARCHAR(255))"); +unset($db); + +$db = new PDO(getenv('PDOTEST_DSN'), getenv('PDOTEST_USER'), getenv('PDOTEST_PASS'), [ + PDO::ATTR_AUTOCOMMIT => 0, +]); + +$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); +$db->query("INSERT INTO {$table} (id, name) VALUES (1, 'test')"); +unset($db); + +$db = new PDO(getenv('PDOTEST_DSN'), getenv('PDOTEST_USER'), getenv('PDOTEST_PASS')); + +$r = $db->query("SELECT * FROM {$table}"); +var_dump($r->fetchAll(PDO::FETCH_ASSOC)); + +echo "done!"; +?> +--CLEAN-- +exec("DROP TABLE IF EXISTS autocommit_pdo_odbc"); +?> +--EXPECT-- +array(1) { + [0]=> + array(2) { + ["id"]=> + string(1) "1" + ["name"]=> + string(4) "test" + } +} +done! diff --git a/ext/pdo_odbc/tests/autocommit_change_mode.phpt b/ext/pdo_odbc/tests/autocommit_change_mode.phpt new file mode 100644 index 0000000000000..c44f124a6cf65 --- /dev/null +++ b/ext/pdo_odbc/tests/autocommit_change_mode.phpt @@ -0,0 +1,135 @@ +--TEST-- +PDO ODBC auto commit mode +--EXTENSIONS-- +pdo_odbc +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +echo "========== not in transaction ==========\n"; + +echo "auto commit ON from ON\n"; +$db->setAttribute(PDO::ATTR_AUTOCOMMIT, true); +var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); +echo "Success\n\n"; + +echo "auto commit OFF from ON\n"; +$db->setAttribute(PDO::ATTR_AUTOCOMMIT, false); +var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); +echo "Success\n\n"; + +echo "auto commit OFF from OFF\n"; +$db->setAttribute(PDO::ATTR_AUTOCOMMIT, false); +var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); +echo "Success\n\n"; + +echo "auto commit ON from OFF\n"; +$db->setAttribute(PDO::ATTR_AUTOCOMMIT, true); +var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); +echo "Success\n\n"; + +echo "========== in transaction ==========\n"; + +echo "begin transaction\n"; +$db->beginTransaction(); +echo "\n"; + +echo "auto commit ON from ON, expect error\n"; +try { + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, true); +} catch (PDOException $e) { + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + echo $e->getMessage()."\n\n"; +} + +echo "auto commit OFF from ON, expect error\n"; +try { + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, false); +} catch (PDOException $e) { + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + echo $e->getMessage()."\n\n"; +} + +echo "end transaction\n"; +$db->rollback(); + +echo "auto commit OFF\n"; +$db->setAttribute(PDO::ATTR_AUTOCOMMIT, false); + +echo "begin transaction\n"; +$db->beginTransaction(); +echo "\n"; + +echo "auto commit ON from OFF, expect error\n"; +try { + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, true); +} catch (PDOException $e) { + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + echo $e->getMessage()."\n\n"; +} + +echo "auto commit OFF from OFF, expect error\n"; +try { + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, false); +} catch (PDOException $e) { + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + echo $e->getMessage()."\n\n"; +} + +echo "end transaction\n"; +$db->rollback(); +echo "\n"; + +echo "done!"; +?> +--EXPECT-- +========== not in transaction ========== +auto commit ON from ON +bool(true) +Success + +auto commit OFF from ON +bool(false) +Success + +auto commit OFF from OFF +bool(false) +Success + +auto commit ON from OFF +bool(true) +Success + +========== in transaction ========== +begin transaction + +auto commit ON from ON, expect error +bool(true) +SQLSTATE[HY000]: General error: Cannot change autocommit mode while a transaction is already open + +auto commit OFF from ON, expect error +bool(true) +SQLSTATE[HY000]: General error: Cannot change autocommit mode while a transaction is already open + +end transaction +auto commit OFF +begin transaction + +auto commit ON from OFF, expect error +bool(false) +SQLSTATE[HY000]: General error: Cannot change autocommit mode while a transaction is already open + +auto commit OFF from OFF, expect error +bool(false) +SQLSTATE[HY000]: General error: Cannot change autocommit mode while a transaction is already open + +end transaction + +done! diff --git a/ext/pdo_pgsql/tests/bug68371.phpt b/ext/pdo_pgsql/tests/bug68371.phpt index 04a0dd70dd380..32173a5a96450 100644 --- a/ext/pdo_pgsql/tests/bug68371.phpt +++ b/ext/pdo_pgsql/tests/bug68371.phpt @@ -95,6 +95,6 @@ array(1) { ERR ERR string(5) "pgsql" -ERR +bool(true) ERR int(4) diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 9b61bb7516532..d11c328254a83 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -315,8 +315,14 @@ static void _close_pgsql_plink(zend_resource *rsrc) PQclear(res); } PQfinish(link); - PGG(num_persistent)--; - PGG(num_links)--; + /* See https://github.com/php/php-src/issues/12974 why we need to check the if */ +#ifdef ZTS + if (pgsql_module_entry.module_started) +#endif + { + PGG(num_persistent)--; + PGG(num_links)--; + } rsrc->ptr = NULL; } @@ -406,7 +412,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN( "pgsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_persistent, zend_pgsql_globals, pgsql_globals) STD_PHP_INI_ENTRY_EX("pgsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_persistent, zend_pgsql_globals, pgsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX("pgsql.max_links", "-1", PHP_INI_SYSTEM, OnUpdateLong, max_links, zend_pgsql_globals, pgsql_globals, display_link_numbers) -STD_PHP_INI_BOOLEAN( "pgsql.auto_reset_persistent", "0", PHP_INI_SYSTEM, OnUpdateBool, auto_reset_persistent, zend_pgsql_globals, pgsql_globals) +STD_PHP_INI_BOOLEAN( "pgsql.auto_reset_persistent", "0", PHP_INI_SYSTEM, OnUpdateLong, auto_reset_persistent, zend_pgsql_globals, pgsql_globals) STD_PHP_INI_BOOLEAN( "pgsql.ignore_notice", "0", PHP_INI_ALL, OnUpdateBool, ignore_notices, zend_pgsql_globals, pgsql_globals) STD_PHP_INI_BOOLEAN( "pgsql.log_notice", "0", PHP_INI_ALL, OnUpdateBool, log_notices, zend_pgsql_globals, pgsql_globals) PHP_INI_END() diff --git a/ext/pgsql/php_pgsql.h b/ext/pgsql/php_pgsql.h index 5286ccec636b4..b9a5fec11d541 100644 --- a/ext/pgsql/php_pgsql.h +++ b/ext/pgsql/php_pgsql.h @@ -184,9 +184,10 @@ static const php_stream_ops php_stream_pgsql_fd_ops = { ZEND_BEGIN_MODULE_GLOBALS(pgsql) zend_long num_links,num_persistent; zend_long max_links,max_persistent; - zend_long allow_persistent; + bool allow_persistent; + int ignore_notices; zend_long auto_reset_persistent; - int ignore_notices,log_notices; + int log_notices; zend_object *default_link; /* default link when connection is omitted */ HashTable field_oids; HashTable table_oids; diff --git a/ext/phar/stream.c b/ext/phar/stream.c index e400699780e1f..3288aa4c2d192 100644 --- a/ext/phar/stream.c +++ b/ext/phar/stream.c @@ -254,6 +254,17 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, const cha php_url_free(resource); goto phar_stub; } else { + php_stream *stream = phar_get_pharfp(phar); + if (stream == NULL) { + if (UNEXPECTED(FAILURE == phar_open_archive_fp(phar))) { + php_stream_wrapper_log_error(wrapper, options, "phar error: could not reopen phar \"%s\"", ZSTR_VAL(resource->host)); + efree(internal_file); + php_url_free(resource); + return NULL; + } + stream = phar_get_pharfp(phar); + } + phar_entry_info *entry; entry = (phar_entry_info *) ecalloc(1, sizeof(phar_entry_info)); @@ -266,7 +277,7 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, const cha entry->is_crc_checked = 1; idata = (phar_entry_data *) ecalloc(1, sizeof(phar_entry_data)); - idata->fp = phar_get_pharfp(phar); + idata->fp = stream; idata->phar = phar; idata->internal_file = entry; if (!phar->is_persistent) { diff --git a/ext/phar/tests/bug77432.phpt b/ext/phar/tests/bug77432.phpt new file mode 100644 index 0000000000000..12480856b3952 --- /dev/null +++ b/ext/phar/tests/bug77432.phpt @@ -0,0 +1,52 @@ +--TEST-- +Bug #77432 (Segmentation fault on including phar file) +--SKIPIF-- + +--EXTENSIONS-- +phar +--INI-- +phar.readonly=0 +--FILE-- +startBuffering(); +$phar->addFromString('test.txt', 'text'); +$phar->setStub(''); +$phar->stopBuffering(); +unset($phar); + +echo "--- Include 1 ---\n"; +include("phar://" . $filename); +echo "--- Include 2 ---\n"; +// Note: will warn because the halting offset is redefined, but won't display the name because "zend_mangle_property_name" starts the name with \0 +// However, this is just the easiest way to reproduce it, so go with this test. +include("phar://" . $filename); +echo "--- After unlink ---\n"; +unlink($filename); +// This will just fail, as it should, but it is here to test the reopen error-handling path. +include("phar://" . $filename); + +?> +--CLEAN-- + +--EXPECTF-- +--- Include 1 --- +hello world +--- Include 2 --- + +Warning: Constant already defined in %s on line %d +hello world +--- After unlink --- + +Warning: include(%sbug77432.phar): Failed to open stream: phar error: could not reopen phar "%sbug77432.phar" in %s on line %d + +Warning: include(): Failed opening '%sbug77432.phar' for inclusion (include_path=%s) in %s on line %d diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 3e2f1e685544f..eebf4af023955 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -421,8 +421,6 @@ static zval *sxe_prop_dim_write(zend_object *object, zval *member, zval *value, GET_NODE(sxe, node); - php_libxml_invalidate_node_list_cache_from_doc(node->doc); - if (sxe->iter.type == SXE_ITER_ATTRLIST) { attribs = 1; elements = 0; @@ -483,6 +481,8 @@ static zval *sxe_prop_dim_write(zend_object *object, zval *member, zval *value, } if (node) { + php_libxml_invalidate_node_list_cache_from_doc(node->doc); + if (attribs) { if (Z_TYPE_P(member) == IS_LONG) { while (attr && nodendx <= Z_LVAL_P(member)) { @@ -625,6 +625,9 @@ static zval *sxe_property_get_adr(zend_object *object, zend_string *zname, int f sxe = php_sxe_fetch_object(object); GET_NODE(sxe, node); + if (UNEXPECTED(!node)) { + return &EG(error_zval); + } name = ZSTR_VAL(zname); node = sxe_get_element_by_name(sxe, node, name, &type); if (node) { @@ -794,8 +797,6 @@ static void sxe_prop_dim_delete(zend_object *object, zval *member, bool elements GET_NODE(sxe, node); - php_libxml_invalidate_node_list_cache_from_doc(node->doc); - if (Z_TYPE_P(member) == IS_LONG) { if (sxe->iter.type != SXE_ITER_ATTRLIST) { attribs = 0; @@ -819,6 +820,8 @@ static void sxe_prop_dim_delete(zend_object *object, zval *member, bool elements } if (node) { + php_libxml_invalidate_node_list_cache_from_doc(node->doc); + if (attribs) { if (Z_TYPE_P(member) == IS_LONG) { int nodendx = 0; @@ -1675,8 +1678,6 @@ PHP_METHOD(SimpleXMLElement, addChild) sxe = Z_SXEOBJ_P(ZEND_THIS); GET_NODE(sxe, node); - php_libxml_invalidate_node_list_cache_from_doc(node->doc); - if (sxe->iter.type == SXE_ITER_ATTRLIST) { php_error_docref(NULL, E_WARNING, "Cannot add element to attributes"); return; @@ -1689,6 +1690,8 @@ PHP_METHOD(SimpleXMLElement, addChild) return; } + php_libxml_invalidate_node_list_cache_from_doc(node->doc); + localname = xmlSplitQName2((xmlChar *)qname, &prefix); if (localname == NULL) { localname = xmlStrdup((xmlChar *)qname); diff --git a/ext/simplexml/tests/get_prop_address_not_initialized.phpt b/ext/simplexml/tests/get_prop_address_not_initialized.phpt new file mode 100644 index 0000000000000..e6f07405b9b65 --- /dev/null +++ b/ext/simplexml/tests/get_prop_address_not_initialized.phpt @@ -0,0 +1,17 @@ +--TEST-- +Getting the address of an uninitialized property of a SimpleXMLElement +--EXTENSIONS-- +simplexml +--FILE-- +newInstanceWithoutConstructor(); +$sxe->a['b'] = 'b'; + +?> +--EXPECTF-- +Fatal error: Uncaught Error: SimpleXMLElement is not properly initialized in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/ext/simplexml/tests/gh12929.phpt b/ext/simplexml/tests/gh12929.phpt new file mode 100644 index 0000000000000..2ae89346dba8c --- /dev/null +++ b/ext/simplexml/tests/gh12929.phpt @@ -0,0 +1,29 @@ +--TEST-- +GH-12929 (SimpleXMLElement with stream_wrapper_register can segfault) +--EXTENSIONS-- +simplexml +--FILE-- +getMessage(), "\n"; + echo $e->getPrevious()->getMessage(), "\n"; +} + +$scheme = "foo2"; +stream_wrapper_register($scheme, "SimpleXMLElement"); +try { + file_get_contents($scheme . "://x"); +} catch (Error $e) { + echo $e->getMessage(), "\n"; + echo $e->getPrevious()->getMessage(), "\n"; +} +?> +--EXPECT-- +It's not possible to assign a complex type to properties, resource given +SimpleXMLElement is not properly initialized +It's not possible to assign a complex type to properties, resource given +SimpleXMLElement is not properly initialized diff --git a/ext/standard/sha1.c b/ext/standard/sha1.c index ed59d80ab0ef2..95f2b54d0fd02 100644 --- a/ext/standard/sha1.c +++ b/ext/standard/sha1.c @@ -173,7 +173,8 @@ PHPAPI void PHP_SHA1InitArgs(PHP_SHA1_CTX * context, ZEND_ATTRIBUTE_UNUSED HashT PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX * context, const unsigned char *input, size_t inputLen) { - unsigned int i, index, partLen; + unsigned int index, partLen; + size_t i; /* Compute number of bytes mod 64 */ index = (unsigned int) ((context->count[0] >> 3) & 0x3F); @@ -182,7 +183,7 @@ PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX * context, const unsigned char *input, if ((context->count[0] += ((uint32_t) inputLen << 3)) < ((uint32_t) inputLen << 3)) context->count[1]++; - context->count[1] += ((uint32_t) inputLen >> 29); + context->count[1] += (uint32_t) (inputLen >> 29); partLen = 64 - index; diff --git a/ext/standard/tests/file/file_variation8-win32.phpt b/ext/standard/tests/file/file_variation8-win32.phpt index 9df2f5e4c536b..2aeaf451ae969 100644 --- a/ext/standard/tests/file/file_variation8-win32.phpt +++ b/ext/standard/tests/file/file_variation8-win32.phpt @@ -10,7 +10,7 @@ if(substr(PHP_OS, 0, 3) != "WIN") --FILE-- --CLEAN-- '; + +$tidy = new tidy(); +$tidy->ParseString($html); +echo tidy_get_output($tidy), "\n"; + +var_dump($tidy->root()->child[1]->attribute); + +?> +--EXPECT-- + + + + + + + + +array(4) { + ["lang"]=> + string(2) "en" + ["boolean"]=> + string(0) "" + ["empty"]=> + string(0) "" + ["selected"]=> + string(8) "selected" +} diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c index e7b345dd25e34..a2e4dec90a3e1 100644 --- a/ext/tidy/tidy.c +++ b/ext/tidy/tidy.c @@ -662,8 +662,12 @@ static void tidy_add_node_default_properties(PHPTidyObj *obj) do { name = (char *)tidyAttrName(tempattr); val = (char *)tidyAttrValue(tempattr); - if (name && val) { - add_assoc_string(&attribute, name, val); + if (name) { + if (val) { + add_assoc_string(&attribute, name, val); + } else { + add_assoc_str(&attribute, name, zend_empty_string); + } } } while((tempattr = tidyAttrNext(tempattr))); } else { diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c index c4a1f483931c5..611ec404fa455 100644 --- a/ext/xsl/xsltprocessor.c +++ b/ext/xsl/xsltprocessor.c @@ -350,8 +350,10 @@ PHP_METHOD(XSLTProcessor, importStylesheet) newdoc = xmlCopyDoc(doc, 1); xmlNodeSetBase((xmlNodePtr) newdoc, (xmlChar *)doc->URL); PHP_LIBXML_SANITIZE_GLOBALS(parse); + PHP_LIBXML_IGNORE_DEPRECATIONS_START xmlSubstituteEntitiesDefault(1); xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; + PHP_LIBXML_IGNORE_DEPRECATIONS_END sheetp = xsltParseStylesheetDoc(newdoc); PHP_LIBXML_RESTORE_GLOBALS(parse); diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 0d0f30e40977d..45b48ac61ff5e 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -45,6 +45,7 @@ #if defined(HAVE_LIBXML) && !defined(PHP_WIN32) # include # include +# include "ext/dom/php_dom.h" #endif ZEND_DECLARE_MODULE_GLOBALS(zend_test) @@ -377,12 +378,14 @@ static ZEND_FUNCTION(zend_test_override_libxml_global_state) { ZEND_PARSE_PARAMETERS_NONE(); + PHP_LIBXML_IGNORE_DEPRECATIONS_START xmlLoadExtDtdDefaultValue = 1; xmlDoValidityCheckingDefaultValue = 1; (void) xmlPedanticParserDefault(1); (void) xmlSubstituteEntitiesDefault(1); (void) xmlLineNumbersDefault(1); (void) xmlKeepBlanksDefault(0); + PHP_LIBXML_IGNORE_DEPRECATIONS_END } #endif diff --git a/main/php_version.h b/main/php_version.h index e4f32e1fd5204..30cf94f048dbe 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 8 #define PHP_MINOR_VERSION 3 -#define PHP_RELEASE_VERSION 1 -#define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.3.1-dev" -#define PHP_VERSION_ID 80301 +#define PHP_RELEASE_VERSION 2 +#define PHP_EXTRA_VERSION "" +#define PHP_VERSION "8.3.2" +#define PHP_VERSION_ID 80302 diff --git a/main/streams/userspace.c b/main/streams/userspace.c index 73319215d2800..2a7380ce8f3a6 100644 --- a/main/streams/userspace.c +++ b/main/streams/userspace.c @@ -278,6 +278,12 @@ static void user_stream_create_object(struct php_user_stream_wrapper *uwrap, php add_property_null(object, "context"); } + if (EG(exception) != NULL) { + zval_ptr_dtor(object); + ZVAL_UNDEF(object); + return; + } + if (uwrap->ce->constructor) { zend_call_known_instance_method_with_0_params( uwrap->ce->constructor, Z_OBJ_P(object), NULL); diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index ab181f5b03a1d..a09f273a70221 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -2249,6 +2249,17 @@ static bool php_cli_server_dispatch_router(php_cli_server *server, php_cli_serve zend_try { zval retval; + /* Normally php_execute_script restarts the timer with max_execution_time if it has + * previously been initialized with max_input_time. We're not using php_execute_script here + * because it does not provide a way to get the return value of the main script, so we need + * to restart the timer manually. */ + if (PG(max_input_time) != -1) { +#ifdef PHP_WIN32 + zend_unset_timeout(); +#endif + zend_set_timeout(INI_INT("max_execution_time"), 0); + } + ZVAL_UNDEF(&retval); if (SUCCESS == zend_execute_scripts(ZEND_REQUIRE, &retval, 1, &zfd)) { if (Z_TYPE(retval) != IS_UNDEF) { diff --git a/sapi/fpm/tests/logreader.inc b/sapi/fpm/tests/logreader.inc index 97b19adb027f6..51a7104d01f3f 100644 --- a/sapi/fpm/tests/logreader.inc +++ b/sapi/fpm/tests/logreader.inc @@ -116,8 +116,11 @@ class LogReader */ public function printLogs(): void { + if (empty($this->sources)) { + return; + } $hasMultipleDescriptors = count($this->sources) > 1; - echo "LOGS:\n"; + echo "\nLOGS:\n"; foreach ($this->sources as $name => $source) { if ($hasMultipleDescriptors) { echo ">>> source: $name\n"; @@ -128,6 +131,7 @@ class LogReader } $this->printSeparator(); } + echo "\n"; } /** @@ -142,9 +146,8 @@ class LogReader if (is_null($errorMessage)) { return false; } - echo "ERROR: " . $errorMessage . "\n\n"; + echo "ERROR: " . $errorMessage . "\n"; $this->printLogs(); - echo "\n"; return false; } diff --git a/sapi/fpm/tests/response.inc b/sapi/fpm/tests/response.inc index e3eb461319771..d760c26dbb8e7 100644 --- a/sapi/fpm/tests/response.inc +++ b/sapi/fpm/tests/response.inc @@ -2,14 +2,68 @@ namespace FPM; -class Response +abstract class BaseResponse +{ + /** + * Tester instance + * @var Tester + */ + private Tester $tester; + + /** + * @var bool + */ + protected bool $debugOutputted = false; + + /** + * @param Tester $tester + */ + public function __construct(Tester $tester) + { + $this->tester = $tester; + } + + /** + * Debug response output. + * + * @return void + */ + abstract function debugOutput(): void; + + /** + * Emit error message + * + * @param string $message + * @param bool $throw + * + * @return bool + * @throws \Exception + */ + protected function error(string $message, bool $throw = false): bool + { + $errorMessage = "ERROR: $message\n"; + if ($throw) { + throw new \Exception($errorMessage); + } + if ( ! $this->debugOutputted) { + $this->debugOutput(); + } + echo $errorMessage; + + $this->tester->printLogs(); + + return false; + } +} + +class Response extends BaseResponse { const HEADER_SEPARATOR = "\r\n\r\n"; /** * @var array */ - private $data; + private array $data; /** * @var string @@ -39,19 +93,17 @@ class Response /** * @var bool */ - private $expectInvalid; - - /** - * @var bool - */ - private bool $debugOutputted = false; + private bool $expectInvalid; /** + * @param Tester $tester * @param string|array|null $data * @param bool $expectInvalid */ - public function __construct($data = null, $expectInvalid = false) + public function __construct(Tester $tester, $data = null, bool $expectInvalid = false) { + parent::__construct($tester); + if ( ! is_array($data)) { $data = [ 'response' => $data, @@ -105,7 +157,7 @@ class Response * * @return Response */ - public function expectJsonBodyPatternForStatusProcessField(string $fieldName, string $pattern) + public function expectJsonBodyPatternForStatusProcessField(string $fieldName, string $pattern): Response { $rawData = $this->getBody('application/json'); $data = json_decode($rawData, true); @@ -281,7 +333,7 @@ class Response /** * Debug response output */ - public function debugOutput() + public function debugOutput(): void { echo ">>> Response\n"; echo "----------------- OUT -----------------\n"; @@ -442,26 +494,9 @@ class Response ); } } - - /** - * Emit error message - * - * @param string $message - * - * @return bool - */ - private function error(string $message): bool - { - if ( ! $this->debugOutputted) { - $this->debugOutput(); - } - echo "ERROR: $message\n"; - - return false; - } } -class ValuesResponse +class ValuesResponse extends BaseResponse { /** * @var array @@ -469,10 +504,14 @@ class ValuesResponse private array $values; /** + * @param Tester $tester * @param string|array|null $values + * @throws \Exception */ - public function __construct($values = null) + public function __construct(Tester $tester, $values = null) { + parent::__construct($tester); + if ( ! is_array($values)) { if ( ! is_null($values) ) { $this->error('Invalid values supplied', true); @@ -489,14 +528,15 @@ class ValuesResponse * @param string $name * @param mixed $value * @return ValuesResponse + * @throws \Exception */ public function expectValue(string $name, $value = null) { if ( ! isset($this->values[$name])) { - return $this->error("Value $name not found in values"); + $this->error("Value $name not found in values"); } if ( ! is_null($value) && $value !== $this->values[$name]) { - return $this->error("Value $name is {$this->values[$name]} but expected $value"); + $this->error("Value $name is {$this->values[$name]} but expected $value"); } return $this; } @@ -513,36 +553,12 @@ class ValuesResponse /** * Debug output data. - * - * @return ValuesResponse */ - public function debugOutput() + public function debugOutput(): void { echo ">>> ValuesResponse\n"; echo "----------------- Values -----------------\n"; var_dump($this->values); echo "---------------------------------------\n\n"; - - return $this; - } - - /** - * Emit error message - * - * @param string $message - * @param bool $throw - * - * @return ValuesResponse - */ - private function error(string $message, $throw = false): bool - { - $errorMessage = "ERROR: $message\n"; - if ($throw) { - throw new \Exception($errorMessage); - } - $this->debugOutput(); - echo $errorMessage; - - return $this; } } diff --git a/sapi/fpm/tests/status.inc b/sapi/fpm/tests/status.inc index 0e3f314b42209..dc07de563adbc 100644 --- a/sapi/fpm/tests/status.inc +++ b/sapi/fpm/tests/status.inc @@ -37,6 +37,34 @@ class Status 'slow requests' => '\d+', ]; + /** + * @var Tester + */ + private Tester $tester; + + /** + * @param Tester $tester + */ + public function __construct(Tester $tester) + { + $this->tester = $tester; + } + + /** + * @param string $body + * @param string $pattern + * @return void + */ + private function matchError(string $body, string $pattern): void + { + echo "ERROR: Expected body does not match pattern\n"; + echo "BODY:\n"; + var_dump($body); + echo "PATTERN:\n"; + var_dump($pattern); + $this->tester->printLogs(); + } + /** * Check status page. * @@ -106,11 +134,7 @@ class Status $pattern .= $footer . ')'; if (!preg_match($pattern, $body)) { - echo "ERROR: Expected body does not match pattern\n"; - echo "BODY:\n"; - var_dump($body); - echo "PATTERN:\n"; - var_dump($pattern); + $this->matchError($body, $pattern); } } @@ -245,11 +269,7 @@ class Status "# EOF)\n"; if (!preg_match($pattern, $body)) { - echo "ERROR: Expected body does not match pattern\n"; - echo "BODY:\n"; - var_dump($body); - echo "PATTERN:\n"; - var_dump($pattern); + $this->matchError($body, $pattern); } } } diff --git a/sapi/fpm/tests/tester.inc b/sapi/fpm/tests/tester.inc index 52c6e8992c5fb..05a33737ebb9e 100644 --- a/sapi/fpm/tests/tester.inc +++ b/sapi/fpm/tests/tester.inc @@ -672,7 +672,7 @@ class Tester } require_once "status.inc"; - $status = new Status(); + $status = new Status($this); foreach ($formats as $format) { $query = $format === 'plain' ? '' : $format; $response = $this->request($query, [], $statusPath, $address); @@ -838,7 +838,7 @@ class Tester int $writeDelay = 0, ): Response { if ($this->hasError()) { - return new Response(null, true); + return $this->createResponse(expectInvalid: true); } if (is_array($stdin)) { @@ -849,7 +849,7 @@ class Tester $this->trace('Request params', $params); try { - $this->response = new Response( + $this->response = $this->createResponse( $this->getClient($address, $connKeepAlive, $socketKeepAlive) ->request_data($params, $stdin, $readLimit, $writeDelay) ); @@ -866,7 +866,7 @@ class Tester } else { $this->message($errorMessage); } - $this->response = new Response(); + $this->response = $this->createResponse(); } if ($this->debug) { $this->response->debugOutput(); @@ -905,7 +905,7 @@ class Tester } if ($this->hasError()) { - return array_map(fn($request) => new Response(null, true), $requests); + return array_map(fn($request) => $this->createResponse(expectInvalid: true), $requests); } try { @@ -931,7 +931,9 @@ class Tester ); $responses = array_map(function ($conn) use ($readTimeout) { - $response = new Response($conn['client']->wait_for_response_data($conn['requestId'], $readTimeout)); + $response = $this->createResponse( + $conn['client']->wait_for_response_data($conn['requestId'], $readTimeout) + ); if ($this->debug) { $response->debugOutput(); } @@ -948,7 +950,7 @@ class Tester $this->message($errorMessage); } - return array_map(fn($request) => new Response(null, true), $requests); + return array_map(fn($request) => $this->createResponse(expectInvalid: true), $requests); } } @@ -968,11 +970,11 @@ class Tester bool $socketKeepAlive = false ): ValuesResponse { if ($this->hasError()) { - return new Response(null, true); + return $this->createValueResponse(); } try { - $valueResponse = new ValuesResponse( + $valueResponse = $this->createValueResponse( $this->getClient($address, $connKeepAlive)->getValues(['FCGI_MPXS_CONNS']) ); if ($this->debug) { @@ -980,7 +982,7 @@ class Tester } } catch (\Exception $exception) { $this->error("Request for getting values failed", $exception); - $valueResponse = new ValuesResponse(); + $valueResponse = $this->createValueResponse(); } return $valueResponse; @@ -1492,6 +1494,30 @@ class Tester return [$sourceFile, '/' . basename($sourceFile)]; } + /** + * Create a new response. + * + * @param mixed $data + * @param bool $expectInvalid + * @return Response + */ + private function createResponse($data = null, bool $expectInvalid = false): Response + { + return new Response($this, $data, $expectInvalid); + } + + /** + * Create a new values response. + * + * @param mixed $values + * @return ValuesResponse + * @throws \Exception + */ + private function createValueResponse($values = null): ValuesResponse + { + return new ValuesResponse($this, $values); + } + /** * @param string|null $msg */ @@ -1502,6 +1528,16 @@ class Tester } } + /** + * Print log reader logs. + * + * @return void + */ + public function printLogs(): void + { + $this->logReader->printLogs(); + } + /** * Display error. * @@ -1520,6 +1556,7 @@ class Tester $this->error .= "\n"; echo $this->error; + $this->printLogs(); return false; } diff --git a/sapi/litespeed/lsapilib.c b/sapi/litespeed/lsapilib.c index 550bdba4aa291..ca47039a636a9 100644 --- a/sapi/litespeed/lsapilib.c +++ b/sapi/litespeed/lsapilib.c @@ -302,7 +302,7 @@ void lsapi_perror(const char * pMessage, int err_no) } -static int lsapi_parent_dead() +static int lsapi_parent_dead(void) { // Return non-zero if the parent is dead. 0 if still alive. if (!s_ppid) { diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c index 5d3ea65b5697c..8fc7f4fe36ffe 100644 --- a/sapi/phpdbg/phpdbg_prompt.c +++ b/sapi/phpdbg/phpdbg_prompt.c @@ -363,7 +363,7 @@ void phpdbg_init(char *init_file, size_t init_file_len, bool use_default) /* {{{ } ZEND_IGNORE_VALUE(asprintf(&init_file, "%s/%s", scan_dir, PHPDBG_INIT_FILENAME)); - phpdbg_try_file_init(init_file, strlen(init_file), 1); + phpdbg_try_file_init(init_file, strlen(init_file), 0); free(init_file); if (i == -1) { break; diff --git a/sapi/phpdbg/tests/gh12962.phpt b/sapi/phpdbg/tests/gh12962.phpt new file mode 100644 index 0000000000000..c5cf9425d7c47 --- /dev/null +++ b/sapi/phpdbg/tests/gh12962.phpt @@ -0,0 +1,13 @@ +--TEST-- +GH-12962 (Double free of init_file in phpdbg_prompt.c) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Executed .phpdbginit diff --git a/sapi/phpdbg/tests/gh12962/.phpdbginit b/sapi/phpdbg/tests/gh12962/.phpdbginit new file mode 100644 index 0000000000000..29184ddf7c83f --- /dev/null +++ b/sapi/phpdbg/tests/gh12962/.phpdbginit @@ -0,0 +1,2 @@ +ev "Executed .phpdbginit" +q