summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-06-18 23:37:47 +0800
committerXinchen Hui <laruence@php.net>2014-06-18 23:37:47 +0800
commit17f35c9a295a55b8af09a5c8ba7dbc8894d3861b (patch)
treecbd1f091c85ea6bbd361196244d4aa7bc3f04ad4
parentb38f6f3de96990163d36c82c248fb29e6f0815c4 (diff)
parentb108267f2c5c09bd153cfb1d4e580d5fc9c52d51 (diff)
downloadphp-git-17f35c9a295a55b8af09a5c8ba7dbc8894d3861b.tar.gz
Merge branch 'phpng' of git.php.net:php-src into phpng
-rw-r--r--LICENSE2
-rw-r--r--Zend/tests/bug67436/a.php10
-rw-r--r--Zend/tests/bug67436/b.php8
-rw-r--r--Zend/tests/bug67436/bug67436.phpt26
-rw-r--r--Zend/tests/bug67436/bug67436_nohandler.phpt24
-rw-r--r--Zend/tests/bug67436/c.php5
-rw-r--r--Zend/zend_arena.h24
-rw-r--r--Zend/zend_compile.c32
-rw-r--r--ext/date/lib/parse_date.c2
-rw-r--r--ext/date/lib/timezonedb.h1310
-rw-r--r--ext/date/tests/bug41523.phpt2
-rw-r--r--ext/oci8/LICENSE2
-rw-r--r--ext/opcache/Optimizer/block_pass.c149
-rw-r--r--ext/opcache/Optimizer/compact_literals.c12
-rw-r--r--ext/opcache/Optimizer/optimize_func_calls.c21
-rw-r--r--ext/opcache/Optimizer/optimize_temp_vars_5.c16
-rw-r--r--ext/opcache/Optimizer/pass1_5.c8
-rw-r--r--ext/opcache/Optimizer/pass5.c2
-rw-r--r--ext/opcache/Optimizer/pass9.c2
-rw-r--r--ext/opcache/Optimizer/zend_optimizer.c44
-rw-r--r--ext/opcache/Optimizer/zend_optimizer_internal.h8
-rw-r--r--ext/openssl/tests/openssl_spki_verify.phpt16
-rw-r--r--ext/pdo/pdo_sql_parser.c2
-rw-r--r--ext/pdo/pdo_sql_parser.re2
-rw-r--r--ext/session/session.c11
-rw-r--r--ext/sockets/sendrecvmsg.c2
-rw-r--r--ext/sockets/windows_common.h2
-rw-r--r--ext/spl/spl_array.c1
-rw-r--r--ext/spl/spl_dllist.c1
-rw-r--r--ext/spl/spl_observer.c1
-rw-r--r--ext/spl/tests/ArrayObject_unserialize_empty_string.phpt9
-rw-r--r--ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt6
-rw-r--r--ext/standard/array.c2
-rw-r--r--ext/standard/head.c12
-rw-r--r--ext/standard/head.h7
-rw-r--r--ext/standard/http_fopen_wrapper.c5
-rw-r--r--ext/standard/tests/general_functions/header_redirection_001.phpt11
-rw-r--r--ext/standard/tests/general_functions/header_redirection_002.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_003.phpt11
-rw-r--r--ext/standard/tests/general_functions/header_redirection_004.phpt11
-rw-r--r--ext/standard/tests/general_functions/header_redirection_005.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_006.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_007.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_008.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_009.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_010.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_011.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_012.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_013.phpt12
-rw-r--r--ext/standard/tests/general_functions/header_redirection_014.phpt12
-rw-r--r--ext/standard/tests/http/bug67430.phpt49
-rw-r--r--ext/standard/tests/network/setcookie.phpt2
-rw-r--r--ext/standard/url_scanner_ex.c2
-rw-r--r--ext/standard/url_scanner_ex.re2
-rw-r--r--ext/standard/var_unserializer.c2
-rw-r--r--ext/standard/var_unserializer.re2
-rw-r--r--header2
-rw-r--r--main/SAPI.c2
-rw-r--r--sapi/cli/php.1.in4
-rw-r--r--sapi/cli/php_cli_server.c2
-rw-r--r--sapi/cli/tests/bug67429.phpt49
-rw-r--r--sapi/continuity/capi.c2
-rw-r--r--sapi/phpdbg/.travis.yml11
-rw-r--r--sapi/phpdbg/config.m41
-rw-r--r--sapi/phpdbg/phpdbg_btree.c2
-rw-r--r--sapi/phpdbg/phpdbg_btree.h2
-rw-r--r--sapi/phpdbg/phpdbg_utils.c9
-rw-r--r--sapi/phpdbg/phpdbg_utils.h20
-rw-r--r--sapi/phpdbg/tests/run-tests.php22
-rwxr-xr-xsapi/phpdbg/travis/ci.sh5
-rw-r--r--tests/classes/bug63462.phpt6
-rw-r--r--win32/build/template.rc2
72 files changed, 1260 insertions, 893 deletions
diff --git a/LICENSE b/LICENSE
index 42536af320..6059c80e12 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
--------------------------------------------------------------------
The PHP License, version 3.01
-Copyright (c) 1999 - 2012 The PHP Group. All rights reserved.
+Copyright (c) 1999 - 2014 The PHP Group. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/Zend/tests/bug67436/a.php b/Zend/tests/bug67436/a.php
new file mode 100644
index 0000000000..c560c2db7d
--- /dev/null
+++ b/Zend/tests/bug67436/a.php
@@ -0,0 +1,10 @@
+<?php
+
+class a {
+ public function test($arg = c::TESTCONSTANT) {
+ echo __METHOD__ . "($arg)\n";
+ }
+
+ static public function staticTest() {
+ }
+}
diff --git a/Zend/tests/bug67436/b.php b/Zend/tests/bug67436/b.php
new file mode 100644
index 0000000000..793a1394d6
--- /dev/null
+++ b/Zend/tests/bug67436/b.php
@@ -0,0 +1,8 @@
+<?php
+
+class b extends a {
+ public function test() {
+ echo __METHOD__ . "()\n";
+ parent::test();
+ }
+}
diff --git a/Zend/tests/bug67436/bug67436.phpt b/Zend/tests/bug67436/bug67436.phpt
new file mode 100644
index 0000000000..49b8b491d2
--- /dev/null
+++ b/Zend/tests/bug67436/bug67436.phpt
@@ -0,0 +1,26 @@
+--TEST--
+bug67436: Autoloader isn't called if user defined error handler is present
+
+--INI--
+error_reporting=
+
+--FILE--
+<?php
+
+spl_autoload_register(function($classname) {
+ if (in_array($classname, array('a','b','c'))) {
+ require_once ($classname . '.php');
+ }
+});
+
+set_error_handler(function ($errno, $errstr, $errfile, $errline) {
+}, error_reporting());
+
+a::staticTest();
+
+$b = new b();
+$b->test();
+
+--EXPECT--
+b::test()
+a::test(c::TESTCONSTANT)
diff --git a/Zend/tests/bug67436/bug67436_nohandler.phpt b/Zend/tests/bug67436/bug67436_nohandler.phpt
new file mode 100644
index 0000000000..464f711532
--- /dev/null
+++ b/Zend/tests/bug67436/bug67436_nohandler.phpt
@@ -0,0 +1,24 @@
+--TEST--
+bug67436: E_STRICT instead of custom error handler
+
+--INI--
+error_reporting=-1
+
+--FILE--
+<?php
+
+spl_autoload_register(function($classname) {
+ if (in_array($classname, array('a','b','c'))) {
+ require_once ($classname . '.php');
+ }
+});
+
+a::staticTest();
+
+$b = new b();
+$b->test();
+
+--EXPECTF--
+Strict Standards: Declaration of b::test() should be compatible with a::test($arg = c::TESTCONSTANT) in %s/bug67436/b.php on line %d
+b::test()
+a::test(c::TESTCONSTANT)
diff --git a/Zend/tests/bug67436/c.php b/Zend/tests/bug67436/c.php
new file mode 100644
index 0000000000..47c848bfa0
--- /dev/null
+++ b/Zend/tests/bug67436/c.php
@@ -0,0 +1,5 @@
+<?php
+
+class c {
+ const TESTCONSTANT = "c::TESTCONSTANT";
+}
diff --git a/Zend/zend_arena.h b/Zend/zend_arena.h
index 68fb660bbb..69ac6687ef 100644
--- a/Zend/zend_arena.h
+++ b/Zend/zend_arena.h
@@ -78,17 +78,35 @@ static zend_always_inline void* zend_arena_alloc(zend_arena **arena_ptr, size_t
return (void*) ptr;
}
-static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr, size_t unit_size, size_t count)
+static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr, size_t count, size_t unit_size)
{
- size_t size = ZEND_MM_ALIGNED_SIZE(unit_size) * count;
+ size_t size = unit_size * count;
void *ret;
- ZEND_ASSERT(size > ZEND_MM_ALIGNED_SIZE(unit_size) && size > count);
+ ZEND_ASSERT(size >= unit_size && size >= count);
ret = zend_arena_alloc(arena_ptr, size);
memset(ret, 0, size);
return ret;
}
+static zend_always_inline void* zend_arena_checkpoint(zend_arena *arena)
+{
+ return arena->ptr;
+}
+
+static zend_always_inline void zend_arena_release(zend_arena **arena_ptr, void *checkpoint)
+{
+ zend_arena *arena = *arena_ptr;
+
+ while (UNEXPECTED((char*)checkpoint > arena->end) ||
+ UNEXPECTED((char*)checkpoint < (char*)arena)) {
+ zend_arena *prev = arena->prev;
+ efree(arena);
+ *arena_ptr = arena = prev;
+ }
+ arena->ptr = (char*)checkpoint;
+}
+
#endif /* _ZEND_ARENA_H_ */
/*
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index d414a46a5c..c6116693b7 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3461,41 +3461,45 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{
}
}
if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2_type != IS_UNUSED) {
- zval zv;
+ zval *zv = precv->op2.zv;
- ZVAL_DUP(&zv, precv->op2.zv);
- zval_update_constant_ex(&zv, 1, fptr->common.scope TSRMLS_CC);
- if (Z_TYPE(zv) == IS_FALSE) {
+ if (Z_TYPE_P(zv) == IS_CONSTANT) {
+ REALLOC_BUF_IF_EXCEED(buf, offset, length, Z_STRLEN_P(zv));
+ memcpy(offset, Z_STRVAL_P(zv), Z_STRLEN_P(zv));
+ offset += Z_STRLEN_P(zv);
+ } else if (Z_TYPE_P(zv) == IS_FALSE) {
memcpy(offset, "false", 5);
offset += 5;
- } else if (Z_TYPE(zv) == IS_TRUE) {
+ } else if (Z_TYPE_P(zv) == IS_TRUE) {
memcpy(offset, "true", 4);
offset += 4;
- } else if (Z_TYPE(zv) == IS_NULL) {
+ } else if (Z_TYPE_P(zv) == IS_NULL) {
memcpy(offset, "NULL", 4);
offset += 4;
- } else if (Z_TYPE(zv) == IS_STRING) {
+ } else if (Z_TYPE_P(zv) == IS_STRING) {
*(offset++) = '\'';
- REALLOC_BUF_IF_EXCEED(buf, offset, length, MIN(Z_STRLEN(zv), 10));
- memcpy(offset, Z_STRVAL(zv), MIN(Z_STRLEN(zv), 10));
- offset += MIN(Z_STRLEN(zv), 10);
- if (Z_STRLEN(zv) > 10) {
+ REALLOC_BUF_IF_EXCEED(buf, offset, length, MIN(Z_STRLEN_P(zv), 10));
+ memcpy(offset, Z_STRVAL_P(zv), MIN(Z_STRLEN_P(zv), 10));
+ offset += MIN(Z_STRLEN_P(zv), 10);
+ if (Z_STRLEN_P(zv) > 10) {
*(offset++) = '.';
*(offset++) = '.';
*(offset++) = '.';
}
*(offset++) = '\'';
- } else if (Z_TYPE(zv) == IS_ARRAY) {
+ } else if (Z_TYPE_P(zv) == IS_ARRAY) {
memcpy(offset, "Array", 5);
offset += 5;
+ } else if (Z_TYPE_P(zv) == IS_CONSTANT_AST) {
+ memcpy(offset, "<expression>", 12);
+ offset += 12;
} else {
- zend_string *str = zval_get_string(&zv);
+ zend_string *str = zval_get_string(zv);
REALLOC_BUF_IF_EXCEED(buf, offset, length, str->len);
memcpy(offset, str->val, str->len);
offset += str->len;
STR_RELEASE(str);
}
- zval_ptr_dtor(&zv);
}
} else {
memcpy(offset, "NULL", 4);
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 348482c0e4..6174756881 100644
--- a/ext/date/lib/parse_date.c
+++ b/ext/date/lib/parse_date.c
@@ -4,7 +4,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h
index da6749c516..c270eeb807 100644
--- a/ext/date/lib/timezonedb.h
+++ b/ext/date/lib/timezonedb.h
@@ -13,575 +13,575 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[580] = {
{ "Africa/Brazzaville" , 0x00051C },
{ "Africa/Bujumbura" , 0x000571 },
{ "Africa/Cairo" , 0x0005B5 },
- { "Africa/Casablanca" , 0x0009A4 },
- { "Africa/Ceuta" , 0x000C06 },
- { "Africa/Conakry" , 0x000F0D },
- { "Africa/Dakar" , 0x000F78 },
- { "Africa/Dar_es_Salaam" , 0x000FDE },
- { "Africa/Djibouti" , 0x00104B },
- { "Africa/Douala" , 0x0010A0 },
- { "Africa/El_Aaiun" , 0x0010F5 },
- { "Africa/Freetown" , 0x001320 },
- { "Africa/Gaborone" , 0x00142F },
- { "Africa/Harare" , 0x00149C },
- { "Africa/Johannesburg" , 0x0014F1 },
- { "Africa/Juba" , 0x00155F },
- { "Africa/Kampala" , 0x001672 },
- { "Africa/Khartoum" , 0x0016F1 },
- { "Africa/Kigali" , 0x001804 },
- { "Africa/Kinshasa" , 0x001859 },
- { "Africa/Lagos" , 0x0018B4 },
- { "Africa/Libreville" , 0x001909 },
- { "Africa/Lome" , 0x00195E },
- { "Africa/Luanda" , 0x0019A2 },
- { "Africa/Lubumbashi" , 0x0019F7 },
- { "Africa/Lusaka" , 0x001A52 },
- { "Africa/Malabo" , 0x001AA7 },
- { "Africa/Maputo" , 0x001B0D },
- { "Africa/Maseru" , 0x001B62 },
- { "Africa/Mbabane" , 0x001BCA },
- { "Africa/Mogadishu" , 0x001C20 },
- { "Africa/Monrovia" , 0x001C7B },
- { "Africa/Nairobi" , 0x001CE1 },
- { "Africa/Ndjamena" , 0x001D60 },
- { "Africa/Niamey" , 0x001DCC },
- { "Africa/Nouakchott" , 0x001E3F },
- { "Africa/Ouagadougou" , 0x001EAA },
- { "Africa/Porto-Novo" , 0x001EFF },
- { "Africa/Sao_Tome" , 0x001F65 },
- { "Africa/Timbuktu" , 0x001FBA },
- { "Africa/Tripoli" , 0x002025 },
- { "Africa/Tunis" , 0x00212E },
- { "Africa/Windhoek" , 0x002240 },
- { "America/Adak" , 0x002487 },
- { "America/Anchorage" , 0x0027FD },
- { "America/Anguilla" , 0x002B71 },
- { "America/Antigua" , 0x002BC6 },
- { "America/Araguaina" , 0x002C2C },
- { "America/Argentina/Buenos_Aires" , 0x002D91 },
- { "America/Argentina/Catamarca" , 0x002F3F },
- { "America/Argentina/ComodRivadavia" , 0x003100 },
- { "America/Argentina/Cordoba" , 0x0032A6 },
- { "America/Argentina/Jujuy" , 0x00347B },
- { "America/Argentina/La_Rioja" , 0x00362F },
- { "America/Argentina/Mendoza" , 0x0037E7 },
- { "America/Argentina/Rio_Gallegos" , 0x0039A7 },
- { "America/Argentina/Salta" , 0x003B5C },
- { "America/Argentina/San_Juan" , 0x003D08 },
- { "America/Argentina/San_Luis" , 0x003EC0 },
- { "America/Argentina/Tucuman" , 0x004086 },
- { "America/Argentina/Ushuaia" , 0x004242 },
- { "America/Aruba" , 0x0043FD },
- { "America/Asuncion" , 0x004463 },
- { "America/Atikokan" , 0x004748 },
- { "America/Atka" , 0x00481E },
- { "America/Bahia" , 0x004B84 },
- { "America/Bahia_Banderas" , 0x004D17 },
- { "America/Barbados" , 0x004F90 },
- { "America/Belem" , 0x00502A },
- { "America/Belize" , 0x005125 },
- { "America/Blanc-Sablon" , 0x0052A1 },
- { "America/Boa_Vista" , 0x005355 },
- { "America/Bogota" , 0x00545E },
- { "America/Boise" , 0x0054CA },
- { "America/Buenos_Aires" , 0x005861 },
- { "America/Cambridge_Bay" , 0x0059FA },
- { "America/Campo_Grande" , 0x005D22 },
- { "America/Cancun" , 0x006011 },
- { "America/Caracas" , 0x006253 },
- { "America/Catamarca" , 0x0062BA },
- { "America/Cayenne" , 0x006460 },
- { "America/Cayman" , 0x0064C2 },
- { "America/Chicago" , 0x006517 },
- { "America/Chihuahua" , 0x006A2E },
- { "America/Coral_Harbour" , 0x006C99 },
- { "America/Cordoba" , 0x006D2B },
- { "America/Costa_Rica" , 0x006ED1 },
- { "America/Creston" , 0x006F5B },
- { "America/Cuiaba" , 0x006FE7 },
- { "America/Curacao" , 0x0072C5 },
- { "America/Danmarkshavn" , 0x00732B },
- { "America/Dawson" , 0x00746F },
- { "America/Dawson_Creek" , 0x00778C },
- { "America/Denver" , 0x007966 },
- { "America/Detroit" , 0x007CEC },
- { "America/Dominica" , 0x00804B },
- { "America/Edmonton" , 0x0080A0 },
- { "America/Eirunepe" , 0x008458 },
- { "America/El_Salvador" , 0x008570 },
- { "America/Ensenada" , 0x0085E5 },
- { "America/Fort_Wayne" , 0x008A8C },
- { "America/Fortaleza" , 0x00894E },
- { "America/Glace_Bay" , 0x008CF6 },
- { "America/Godthab" , 0x00906D },
- { "America/Goose_Bay" , 0x009331 },
- { "America/Grand_Turk" , 0x0097EE },
- { "America/Grenada" , 0x009A9D },
- { "America/Guadeloupe" , 0x009AF2 },
- { "America/Guatemala" , 0x009B47 },
- { "America/Guayaquil" , 0x009BD0 },
- { "America/Guyana" , 0x009C2D },
- { "America/Halifax" , 0x009CAE },
- { "America/Havana" , 0x00A1C4 },
- { "America/Hermosillo" , 0x00A537 },
- { "America/Indiana/Indianapolis" , 0x00A615 },
- { "America/Indiana/Knox" , 0x00A8A6 },
- { "America/Indiana/Marengo" , 0x00AC3D },
- { "America/Indiana/Petersburg" , 0x00AEE3 },
- { "America/Indiana/Tell_City" , 0x00B430 },
- { "America/Indiana/Vevay" , 0x00B6C9 },
- { "America/Indiana/Vincennes" , 0x00B904 },
- { "America/Indiana/Winamac" , 0x00BBB8 },
- { "America/Indianapolis" , 0x00B1C6 },
- { "America/Inuvik" , 0x00BE71 },
- { "America/Iqaluit" , 0x00C168 },
- { "America/Jamaica" , 0x00C48A },
- { "America/Jujuy" , 0x00C54F },
- { "America/Juneau" , 0x00C6F9 },
- { "America/Kentucky/Louisville" , 0x00CA77 },
- { "America/Kentucky/Monticello" , 0x00CE95 },
- { "America/Knox_IN" , 0x00D21A },
- { "America/Kralendijk" , 0x00D58B },
- { "America/La_Paz" , 0x00D5F1 },
- { "America/Lima" , 0x00D658 },
- { "America/Los_Angeles" , 0x00D700 },
- { "America/Louisville" , 0x00DB11 },
- { "America/Lower_Princes" , 0x00DF06 },
- { "America/Maceio" , 0x00DF6C },
- { "America/Managua" , 0x00E0A6 },
- { "America/Manaus" , 0x00E159 },
- { "America/Marigot" , 0x00E25B },
- { "America/Martinique" , 0x00E2B0 },
- { "America/Matamoros" , 0x00E31C },
- { "America/Mazatlan" , 0x00E575 },
- { "America/Mendoza" , 0x00E7E2 },
- { "America/Menominee" , 0x00E996 },
- { "America/Merida" , 0x00ED17 },
- { "America/Metlakatla" , 0x00EF52 },
- { "America/Mexico_City" , 0x00F08C },
- { "America/Miquelon" , 0x00F307 },
- { "America/Moncton" , 0x00F579 },
- { "America/Monterrey" , 0x00FA10 },
- { "America/Montevideo" , 0x00FC73 },
- { "America/Montreal" , 0x00FF85 },
- { "America/Montserrat" , 0x010475 },
- { "America/Nassau" , 0x0104CA },
- { "America/New_York" , 0x01080F },
- { "America/Nipigon" , 0x010D1A },
- { "America/Nome" , 0x01106B },
- { "America/Noronha" , 0x0113E9 },
- { "America/North_Dakota/Beulah" , 0x011519 },
- { "America/North_Dakota/Center" , 0x0118AD },
- { "America/North_Dakota/New_Salem" , 0x011C41 },
- { "America/Ojinaga" , 0x011FEA },
- { "America/Panama" , 0x01224B },
- { "America/Pangnirtung" , 0x0122A0 },
- { "America/Paramaribo" , 0x0125D6 },
- { "America/Phoenix" , 0x012668 },
- { "America/Port-au-Prince" , 0x012726 },
- { "America/Port_of_Spain" , 0x012A4A },
- { "America/Porto_Acre" , 0x012946 },
- { "America/Porto_Velho" , 0x012A9F },
- { "America/Puerto_Rico" , 0x012B95 },
- { "America/Rainy_River" , 0x012C00 },
- { "America/Rankin_Inlet" , 0x012F38 },
- { "America/Recife" , 0x01321E },
- { "America/Regina" , 0x013348 },
- { "America/Resolute" , 0x013506 },
- { "America/Rio_Branco" , 0x0137F7 },
- { "America/Rosario" , 0x0138FF },
- { "America/Santa_Isabel" , 0x013AA5 },
- { "America/Santarem" , 0x013E48 },
- { "America/Santiago" , 0x013F4D },
- { "America/Santo_Domingo" , 0x0142F6 },
- { "America/Sao_Paulo" , 0x0143BC },
- { "America/Scoresbysund" , 0x0146CB },
- { "America/Shiprock" , 0x0149B9 },
- { "America/Sitka" , 0x014D32 },
- { "America/St_Barthelemy" , 0x0150BA },
- { "America/St_Johns" , 0x01510F },
- { "America/St_Kitts" , 0x015662 },
- { "America/St_Lucia" , 0x0156B7 },
- { "America/St_Thomas" , 0x01570C },
- { "America/St_Vincent" , 0x015761 },
- { "America/Swift_Current" , 0x0157B6 },
- { "America/Tegucigalpa" , 0x0158D7 },
- { "America/Thule" , 0x015956 },
- { "America/Thunder_Bay" , 0x015B9D },
- { "America/Tijuana" , 0x015EE6 },
- { "America/Toronto" , 0x01627F },
- { "America/Tortola" , 0x01679F },
- { "America/Vancouver" , 0x0167F4 },
- { "America/Virgin" , 0x016C31 },
- { "America/Whitehorse" , 0x016C86 },
- { "America/Winnipeg" , 0x016FA3 },
- { "America/Yakutat" , 0x0173E3 },
- { "America/Yellowknife" , 0x01774E },
- { "Antarctica/Casey" , 0x017A5E },
- { "Antarctica/Davis" , 0x017AFB },
- { "Antarctica/DumontDUrville" , 0x017B9C },
- { "Antarctica/Macquarie" , 0x017C2E },
- { "Antarctica/Mawson" , 0x017E75 },
- { "Antarctica/McMurdo" , 0x017EF1 },
- { "Antarctica/Palmer" , 0x01829C },
- { "Antarctica/Rothera" , 0x0185B8 },
- { "Antarctica/South_Pole" , 0x01862E },
- { "Antarctica/Syowa" , 0x0189AC },
- { "Antarctica/Troll" , 0x018A1A },
- { "Antarctica/Vostok" , 0x018BEC },
- { "Arctic/Longyearbyen" , 0x018C5D },
- { "Asia/Aden" , 0x018F8F },
- { "Asia/Almaty" , 0x018FE4 },
- { "Asia/Amman" , 0x019163 },
- { "Asia/Anadyr" , 0x019419 },
- { "Asia/Aqtau" , 0x0195FE },
- { "Asia/Aqtobe" , 0x0197FD },
- { "Asia/Ashgabat" , 0x0199B5 },
- { "Asia/Ashkhabad" , 0x019AD2 },
- { "Asia/Baghdad" , 0x019BEF },
- { "Asia/Bahrain" , 0x019D64 },
- { "Asia/Baku" , 0x019DCA },
- { "Asia/Bangkok" , 0x01A0B2 },
- { "Asia/Beirut" , 0x01A107 },
- { "Asia/Bishkek" , 0x01A414 },
- { "Asia/Brunei" , 0x01A5C0 },
- { "Asia/Calcutta" , 0x01A622 },
- { "Asia/Choibalsan" , 0x01A69B },
- { "Asia/Chongqing" , 0x01A814 },
- { "Asia/Chungking" , 0x01A903 },
- { "Asia/Colombo" , 0x01A9B2 },
- { "Asia/Dacca" , 0x01AA4E },
- { "Asia/Damascus" , 0x01AAF4 },
- { "Asia/Dhaka" , 0x01AE44 },
- { "Asia/Dili" , 0x01AEEA },
- { "Asia/Dubai" , 0x01AF74 },
- { "Asia/Dushanbe" , 0x01AFC9 },
- { "Asia/Gaza" , 0x01B0CC },
- { "Asia/Harbin" , 0x01B41F },
- { "Asia/Hebron" , 0x01B506 },
- { "Asia/Ho_Chi_Minh" , 0x01B862 },
- { "Asia/Hong_Kong" , 0x01B8DA },
- { "Asia/Hovd" , 0x01BA9C },
- { "Asia/Irkutsk" , 0x01BC14 },
- { "Asia/Istanbul" , 0x01BDFA },
- { "Asia/Jakarta" , 0x01C1E7 },
- { "Asia/Jayapura" , 0x01C291 },
- { "Asia/Jerusalem" , 0x01C32D },
- { "Asia/Kabul" , 0x01C65C },
- { "Asia/Kamchatka" , 0x01C6AD },
- { "Asia/Karachi" , 0x01C889 },
- { "Asia/Kashgar" , 0x01C93E },
- { "Asia/Kathmandu" , 0x01CA0F },
- { "Asia/Katmandu" , 0x01CA75 },
- { "Asia/Khandyga" , 0x01CADB },
- { "Asia/Kolkata" , 0x01CD00 },
- { "Asia/Krasnoyarsk" , 0x01CD79 },
- { "Asia/Kuala_Lumpur" , 0x01CF61 },
- { "Asia/Kuching" , 0x01D01E },
- { "Asia/Kuwait" , 0x01D10C },
- { "Asia/Macao" , 0x01D161 },
- { "Asia/Macau" , 0x01D29C },
- { "Asia/Magadan" , 0x01D3D7 },
- { "Asia/Makassar" , 0x01D5B9 },
- { "Asia/Manila" , 0x01D67E },
- { "Asia/Muscat" , 0x01D703 },
- { "Asia/Nicosia" , 0x01D758 },
- { "Asia/Novokuznetsk" , 0x01DA40 },
- { "Asia/Novosibirsk" , 0x01DC42 },
- { "Asia/Omsk" , 0x01DE2D },
- { "Asia/Oral" , 0x01E014 },
- { "Asia/Phnom_Penh" , 0x01E1E4 },
- { "Asia/Pontianak" , 0x01E25C },
- { "Asia/Pyongyang" , 0x01E31E },
- { "Asia/Qatar" , 0x01E38B },
- { "Asia/Qyzylorda" , 0x01E3F1 },
- { "Asia/Rangoon" , 0x01E5C7 },
- { "Asia/Riyadh" , 0x01E63F },
- { "Asia/Saigon" , 0x01E694 },
- { "Asia/Sakhalin" , 0x01E70C },
- { "Asia/Samarkand" , 0x01E903 },
- { "Asia/Seoul" , 0x01EA39 },
- { "Asia/Shanghai" , 0x01EADD },
- { "Asia/Singapore" , 0x01EBBD },
- { "Asia/Taipei" , 0x01EC74 },
- { "Asia/Tashkent" , 0x01ED8C },
- { "Asia/Tbilisi" , 0x01EEBD },
- { "Asia/Tehran" , 0x01F077 },
- { "Asia/Tel_Aviv" , 0x01F2E5 },
- { "Asia/Thimbu" , 0x01F614 },
- { "Asia/Thimphu" , 0x01F67A },
- { "Asia/Tokyo" , 0x01F6E0 },
- { "Asia/Ujung_Pandang" , 0x01F769 },
- { "Asia/Ulaanbaatar" , 0x01F7E6 },
- { "Asia/Ulan_Bator" , 0x01F941 },
- { "Asia/Urumqi" , 0x01FA8E },
- { "Asia/Ust-Nera" , 0x01FB55 },
- { "Asia/Vientiane" , 0x01FD5A },
- { "Asia/Vladivostok" , 0x01FDD2 },
- { "Asia/Yakutsk" , 0x01FFBE },
- { "Asia/Yekaterinburg" , 0x0201A3 },
- { "Asia/Yerevan" , 0x0203AE },
- { "Atlantic/Azores" , 0x0205AE },
- { "Atlantic/Bermuda" , 0x020AB1 },
- { "Atlantic/Canary" , 0x020D92 },
- { "Atlantic/Cape_Verde" , 0x021068 },
- { "Atlantic/Faeroe" , 0x0210E1 },
- { "Atlantic/Faroe" , 0x021385 },
- { "Atlantic/Jan_Mayen" , 0x021629 },
- { "Atlantic/Madeira" , 0x02195B },
- { "Atlantic/Reykjavik" , 0x021E64 },
- { "Atlantic/South_Georgia" , 0x02201D },
- { "Atlantic/St_Helena" , 0x02222F },
- { "Atlantic/Stanley" , 0x022061 },
- { "Australia/ACT" , 0x022284 },
- { "Australia/Adelaide" , 0x0225A1 },
- { "Australia/Brisbane" , 0x0228CD },
- { "Australia/Broken_Hill" , 0x022994 },
- { "Australia/Canberra" , 0x022CD2 },
- { "Australia/Currie" , 0x022FEF },
- { "Australia/Darwin" , 0x023322 },
- { "Australia/Eucla" , 0x0233A8 },
- { "Australia/Hobart" , 0x02347D },
- { "Australia/LHI" , 0x0237DB },
- { "Australia/Lindeman" , 0x023A76 },
- { "Australia/Lord_Howe" , 0x023B57 },
- { "Australia/Melbourne" , 0x023E02 },
- { "Australia/North" , 0x024127 },
- { "Australia/NSW" , 0x02419B },
- { "Australia/Perth" , 0x0244B8 },
- { "Australia/Queensland" , 0x024590 },
- { "Australia/South" , 0x02463C },
- { "Australia/Sydney" , 0x024959 },
- { "Australia/Tasmania" , 0x024C96 },
- { "Australia/Victoria" , 0x024FDB },
- { "Australia/West" , 0x0252F8 },
- { "Australia/Yancowinna" , 0x0253AE },
- { "Brazil/Acre" , 0x0256D0 },
- { "Brazil/DeNoronha" , 0x0257D4 },
- { "Brazil/East" , 0x0258F4 },
- { "Brazil/West" , 0x025BD1 },
- { "Canada/Atlantic" , 0x025CC9 },
- { "Canada/Central" , 0x0261B1 },
- { "Canada/East-Saskatchewan" , 0x026ABB },
- { "Canada/Eastern" , 0x0265CB },
- { "Canada/Mountain" , 0x026C44 },
- { "Canada/Newfoundland" , 0x026FBA },
- { "Canada/Pacific" , 0x0274E5 },
- { "Canada/Saskatchewan" , 0x0278FE },
- { "Canada/Yukon" , 0x027A87 },
- { "CET" , 0x027D8A },
- { "Chile/Continental" , 0x028093 },
- { "Chile/EasterIsland" , 0x02842E },
- { "CST6CDT" , 0x028770 },
- { "Cuba" , 0x028AC1 },
- { "EET" , 0x028E34 },
- { "Egypt" , 0x0290E7 },
- { "Eire" , 0x0294D6 },
- { "EST" , 0x0299E7 },
- { "EST5EDT" , 0x029A2B },
- { "Etc/GMT" , 0x029D7C },
- { "Etc/GMT+0" , 0x029E48 },
- { "Etc/GMT+1" , 0x029ED2 },
- { "Etc/GMT+10" , 0x029F5F },
- { "Etc/GMT+11" , 0x029FED },
- { "Etc/GMT+12" , 0x02A07B },
- { "Etc/GMT+2" , 0x02A196 },
- { "Etc/GMT+3" , 0x02A222 },
- { "Etc/GMT+4" , 0x02A2AE },
- { "Etc/GMT+5" , 0x02A33A },
- { "Etc/GMT+6" , 0x02A3C6 },
- { "Etc/GMT+7" , 0x02A452 },
- { "Etc/GMT+8" , 0x02A4DE },
- { "Etc/GMT+9" , 0x02A56A },
- { "Etc/GMT-0" , 0x029E04 },
- { "Etc/GMT-1" , 0x029E8C },
- { "Etc/GMT-10" , 0x029F18 },
- { "Etc/GMT-11" , 0x029FA6 },
- { "Etc/GMT-12" , 0x02A034 },
- { "Etc/GMT-13" , 0x02A0C2 },
- { "Etc/GMT-14" , 0x02A109 },
- { "Etc/GMT-2" , 0x02A150 },
- { "Etc/GMT-3" , 0x02A1DC },
- { "Etc/GMT-4" , 0x02A268 },
- { "Etc/GMT-5" , 0x02A2F4 },
- { "Etc/GMT-6" , 0x02A380 },
- { "Etc/GMT-7" , 0x02A40C },
- { "Etc/GMT-8" , 0x02A498 },
- { "Etc/GMT-9" , 0x02A524 },
- { "Etc/GMT0" , 0x029DC0 },
- { "Etc/Greenwich" , 0x02A5B0 },
- { "Etc/UCT" , 0x02A5F4 },
- { "Etc/Universal" , 0x02A638 },
- { "Etc/UTC" , 0x02A67C },
- { "Etc/Zulu" , 0x02A6C0 },
- { "Europe/Amsterdam" , 0x02A704 },
- { "Europe/Andorra" , 0x02AB42 },
- { "Europe/Athens" , 0x02ADBE },
- { "Europe/Belfast" , 0x02B101 },
- { "Europe/Belgrade" , 0x02B638 },
- { "Europe/Berlin" , 0x02B901 },
- { "Europe/Bratislava" , 0x02BC65 },
- { "Europe/Brussels" , 0x02BF97 },
- { "Europe/Bucharest" , 0x02C3CE },
- { "Europe/Budapest" , 0x02C6F8 },
- { "Europe/Busingen" , 0x02CA6B },
- { "Europe/Chisinau" , 0x02CD22 },
- { "Europe/Copenhagen" , 0x02D0B0 },
- { "Europe/Dublin" , 0x02D3BA },
- { "Europe/Gibraltar" , 0x02D8CB },
- { "Europe/Guernsey" , 0x02DD22 },
- { "Europe/Helsinki" , 0x02E259 },
- { "Europe/Isle_of_Man" , 0x02E50F },
- { "Europe/Istanbul" , 0x02EA46 },
- { "Europe/Jersey" , 0x02EE33 },
- { "Europe/Kaliningrad" , 0x02F36A },
- { "Europe/Kiev" , 0x02F5D0 },
- { "Europe/Lisbon" , 0x02F8EC },
- { "Europe/Ljubljana" , 0x02FDF0 },
- { "Europe/London" , 0x0300B9 },
- { "Europe/Luxembourg" , 0x0305F0 },
- { "Europe/Madrid" , 0x030A46 },
- { "Europe/Malta" , 0x030E0C },
- { "Europe/Mariehamn" , 0x0311C5 },
- { "Europe/Minsk" , 0x03147B },
- { "Europe/Monaco" , 0x031689 },
- { "Europe/Moscow" , 0x031AC4 },
- { "Europe/Nicosia" , 0x031D15 },
- { "Europe/Oslo" , 0x031FFD },
- { "Europe/Paris" , 0x03232F },
- { "Europe/Podgorica" , 0x032775 },
- { "Europe/Prague" , 0x032A3E },
- { "Europe/Riga" , 0x032D70 },
- { "Europe/Rome" , 0x0330B5 },
- { "Europe/Samara" , 0x033478 },
- { "Europe/San_Marino" , 0x0336AB },
- { "Europe/Sarajevo" , 0x033A6E },
- { "Europe/Simferopol" , 0x033D37 },
- { "Europe/Skopje" , 0x033F83 },
- { "Europe/Sofia" , 0x03424C },
- { "Europe/Stockholm" , 0x034554 },
- { "Europe/Tallinn" , 0x034803 },
- { "Europe/Tirane" , 0x034B3D },
- { "Europe/Tiraspol" , 0x034E43 },
- { "Europe/Uzhgorod" , 0x0351D1 },
- { "Europe/Vaduz" , 0x0354E8 },
- { "Europe/Vatican" , 0x035797 },
- { "Europe/Vienna" , 0x035B5A },
- { "Europe/Vilnius" , 0x035E87 },
- { "Europe/Volgograd" , 0x0361C6 },
- { "Europe/Warsaw" , 0x0363C6 },
- { "Europe/Zagreb" , 0x0367A7 },
- { "Europe/Zaporozhye" , 0x036A70 },
- { "Europe/Zurich" , 0x036DB1 },
- { "Factory" , 0x037060 },
- { "GB" , 0x0370D1 },
- { "GB-Eire" , 0x037608 },
- { "GMT" , 0x037B3F },
- { "GMT+0" , 0x037C0B },
- { "GMT-0" , 0x037BC7 },
- { "GMT0" , 0x037B83 },
- { "Greenwich" , 0x037C4F },
- { "Hongkong" , 0x037C93 },
- { "HST" , 0x037E55 },
- { "Iceland" , 0x037E99 },
- { "Indian/Antananarivo" , 0x038052 },
- { "Indian/Chagos" , 0x0380C6 },
- { "Indian/Christmas" , 0x038128 },
- { "Indian/Cocos" , 0x03816C },
- { "Indian/Comoro" , 0x0381B0 },
- { "Indian/Kerguelen" , 0x038205 },
- { "Indian/Mahe" , 0x03825A },
- { "Indian/Maldives" , 0x0382AF },
- { "Indian/Mauritius" , 0x038304 },
- { "Indian/Mayotte" , 0x03837A },
- { "Indian/Reunion" , 0x0383CF },
- { "Iran" , 0x038424 },
- { "Israel" , 0x038692 },
- { "Jamaica" , 0x0389C1 },
- { "Japan" , 0x038A86 },
- { "Kwajalein" , 0x038B0F },
- { "Libya" , 0x038B72 },
- { "MET" , 0x038C7B },
- { "Mexico/BajaNorte" , 0x038F84 },
- { "Mexico/BajaSur" , 0x0392ED },
- { "Mexico/General" , 0x039532 },
- { "MST" , 0x039790 },
- { "MST7MDT" , 0x0397D4 },
- { "Navajo" , 0x039B25 },
- { "NZ" , 0x039E9E },
- { "NZ-CHAT" , 0x03A21C },
- { "Pacific/Apia" , 0x03A504 },
- { "Pacific/Auckland" , 0x03A6A0 },
- { "Pacific/Chatham" , 0x03AA2C },
- { "Pacific/Chuuk" , 0x03AD23 },
- { "Pacific/Easter" , 0x03AD7C },
- { "Pacific/Efate" , 0x03B0DA },
- { "Pacific/Enderbury" , 0x03B1A0 },
- { "Pacific/Fakaofo" , 0x03B20E },
- { "Pacific/Fiji" , 0x03B25F },
- { "Pacific/Funafuti" , 0x03B3F2 },
- { "Pacific/Galapagos" , 0x03B436 },
- { "Pacific/Gambier" , 0x03B4AE },
- { "Pacific/Guadalcanal" , 0x03B513 },
- { "Pacific/Guam" , 0x03B568 },
- { "Pacific/Honolulu" , 0x03B5BE },
- { "Pacific/Johnston" , 0x03B635 },
- { "Pacific/Kiritimati" , 0x03B6B4 },
- { "Pacific/Kosrae" , 0x03B71F },
- { "Pacific/Kwajalein" , 0x03B77C },
- { "Pacific/Majuro" , 0x03B7E8 },
- { "Pacific/Marquesas" , 0x03B847 },
- { "Pacific/Midway" , 0x03B8AE },
- { "Pacific/Nauru" , 0x03B938 },
- { "Pacific/Niue" , 0x03B9B0 },
- { "Pacific/Norfolk" , 0x03BA0E },
- { "Pacific/Noumea" , 0x03BA63 },
- { "Pacific/Pago_Pago" , 0x03BAF3 },
- { "Pacific/Palau" , 0x03BB7C },
- { "Pacific/Pitcairn" , 0x03BBC0 },
- { "Pacific/Pohnpei" , 0x03BC15 },
- { "Pacific/Ponape" , 0x03BC6A },
- { "Pacific/Port_Moresby" , 0x03BCAF },
- { "Pacific/Rarotonga" , 0x03BCF3 },
- { "Pacific/Saipan" , 0x03BDCF },
- { "Pacific/Samoa" , 0x03BE32 },
- { "Pacific/Tahiti" , 0x03BEBB },
- { "Pacific/Tarawa" , 0x03BF20 },
- { "Pacific/Tongatapu" , 0x03BF74 },
- { "Pacific/Truk" , 0x03C000 },
- { "Pacific/Wake" , 0x03C045 },
- { "Pacific/Wallis" , 0x03C095 },
- { "Pacific/Yap" , 0x03C0D9 },
- { "Poland" , 0x03C11E },
- { "Portugal" , 0x03C4FF },
- { "PRC" , 0x03C9FB },
- { "PST8PDT" , 0x03CAAC },
- { "ROC" , 0x03CDFD },
- { "ROK" , 0x03CF15 },
- { "Singapore" , 0x03CFB9 },
- { "Turkey" , 0x03D070 },
- { "UCT" , 0x03D45D },
- { "Universal" , 0x03D4A1 },
- { "US/Alaska" , 0x03D4E5 },
- { "US/Aleutian" , 0x03D84E },
- { "US/Arizona" , 0x03DBB4 },
- { "US/Central" , 0x03DC42 },
- { "US/East-Indiana" , 0x03E64C },
- { "US/Eastern" , 0x03E14D },
- { "US/Hawaii" , 0x03E8B6 },
- { "US/Indiana-Starke" , 0x03E927 },
- { "US/Michigan" , 0x03EC98 },
- { "US/Mountain" , 0x03EFCF },
- { "US/Pacific" , 0x03F348 },
- { "US/Pacific-New" , 0x03F74D },
- { "US/Samoa" , 0x03FB52 },
- { "UTC" , 0x03FBDB },
- { "W-SU" , 0x03FED2 },
- { "WET" , 0x03FC1F },
- { "Zulu" , 0x04010C },
+ { "Africa/Casablanca" , 0x00099C },
+ { "Africa/Ceuta" , 0x000BFE },
+ { "Africa/Conakry" , 0x000F05 },
+ { "Africa/Dakar" , 0x000F70 },
+ { "Africa/Dar_es_Salaam" , 0x000FD6 },
+ { "Africa/Djibouti" , 0x001043 },
+ { "Africa/Douala" , 0x001098 },
+ { "Africa/El_Aaiun" , 0x0010ED },
+ { "Africa/Freetown" , 0x001318 },
+ { "Africa/Gaborone" , 0x001427 },
+ { "Africa/Harare" , 0x001494 },
+ { "Africa/Johannesburg" , 0x0014E9 },
+ { "Africa/Juba" , 0x001557 },
+ { "Africa/Kampala" , 0x00166A },
+ { "Africa/Khartoum" , 0x0016E9 },
+ { "Africa/Kigali" , 0x0017FC },
+ { "Africa/Kinshasa" , 0x001851 },
+ { "Africa/Lagos" , 0x0018AC },
+ { "Africa/Libreville" , 0x001901 },
+ { "Africa/Lome" , 0x001956 },
+ { "Africa/Luanda" , 0x00199A },
+ { "Africa/Lubumbashi" , 0x0019EF },
+ { "Africa/Lusaka" , 0x001A4A },
+ { "Africa/Malabo" , 0x001A9F },
+ { "Africa/Maputo" , 0x001B05 },
+ { "Africa/Maseru" , 0x001B5A },
+ { "Africa/Mbabane" , 0x001BC2 },
+ { "Africa/Mogadishu" , 0x001C18 },
+ { "Africa/Monrovia" , 0x001C73 },
+ { "Africa/Nairobi" , 0x001CD9 },
+ { "Africa/Ndjamena" , 0x001D58 },
+ { "Africa/Niamey" , 0x001DC4 },
+ { "Africa/Nouakchott" , 0x001E37 },
+ { "Africa/Ouagadougou" , 0x001EA2 },
+ { "Africa/Porto-Novo" , 0x001EF7 },
+ { "Africa/Sao_Tome" , 0x001F5D },
+ { "Africa/Timbuktu" , 0x001FB2 },
+ { "Africa/Tripoli" , 0x00201D },
+ { "Africa/Tunis" , 0x002126 },
+ { "Africa/Windhoek" , 0x002238 },
+ { "America/Adak" , 0x00247F },
+ { "America/Anchorage" , 0x0027F5 },
+ { "America/Anguilla" , 0x002B69 },
+ { "America/Antigua" , 0x002BBE },
+ { "America/Araguaina" , 0x002C24 },
+ { "America/Argentina/Buenos_Aires" , 0x002D89 },
+ { "America/Argentina/Catamarca" , 0x002F37 },
+ { "America/Argentina/ComodRivadavia" , 0x0030F8 },
+ { "America/Argentina/Cordoba" , 0x00329E },
+ { "America/Argentina/Jujuy" , 0x003473 },
+ { "America/Argentina/La_Rioja" , 0x003627 },
+ { "America/Argentina/Mendoza" , 0x0037DF },
+ { "America/Argentina/Rio_Gallegos" , 0x00399F },
+ { "America/Argentina/Salta" , 0x003B54 },
+ { "America/Argentina/San_Juan" , 0x003D00 },
+ { "America/Argentina/San_Luis" , 0x003EB8 },
+ { "America/Argentina/Tucuman" , 0x00407E },
+ { "America/Argentina/Ushuaia" , 0x00423A },
+ { "America/Aruba" , 0x0043F5 },
+ { "America/Asuncion" , 0x00445B },
+ { "America/Atikokan" , 0x004740 },
+ { "America/Atka" , 0x004816 },
+ { "America/Bahia" , 0x004B7C },
+ { "America/Bahia_Banderas" , 0x004D0F },
+ { "America/Barbados" , 0x004F88 },
+ { "America/Belem" , 0x005022 },
+ { "America/Belize" , 0x00511D },
+ { "America/Blanc-Sablon" , 0x005299 },
+ { "America/Boa_Vista" , 0x00534D },
+ { "America/Bogota" , 0x005456 },
+ { "America/Boise" , 0x0054C2 },
+ { "America/Buenos_Aires" , 0x005859 },
+ { "America/Cambridge_Bay" , 0x0059F2 },
+ { "America/Campo_Grande" , 0x005D1A },
+ { "America/Cancun" , 0x006009 },
+ { "America/Caracas" , 0x00624B },
+ { "America/Catamarca" , 0x0062B2 },
+ { "America/Cayenne" , 0x006458 },
+ { "America/Cayman" , 0x0064BA },
+ { "America/Chicago" , 0x00650F },
+ { "America/Chihuahua" , 0x006A26 },
+ { "America/Coral_Harbour" , 0x006C91 },
+ { "America/Cordoba" , 0x006D23 },
+ { "America/Costa_Rica" , 0x006EC9 },
+ { "America/Creston" , 0x006F53 },
+ { "America/Cuiaba" , 0x006FDF },
+ { "America/Curacao" , 0x0072BD },
+ { "America/Danmarkshavn" , 0x007323 },
+ { "America/Dawson" , 0x007467 },
+ { "America/Dawson_Creek" , 0x007784 },
+ { "America/Denver" , 0x00795E },
+ { "America/Detroit" , 0x007CE4 },
+ { "America/Dominica" , 0x008043 },
+ { "America/Edmonton" , 0x008098 },
+ { "America/Eirunepe" , 0x008450 },
+ { "America/El_Salvador" , 0x008568 },
+ { "America/Ensenada" , 0x0085DD },
+ { "America/Fort_Wayne" , 0x008A84 },
+ { "America/Fortaleza" , 0x008946 },
+ { "America/Glace_Bay" , 0x008CEE },
+ { "America/Godthab" , 0x009065 },
+ { "America/Goose_Bay" , 0x009329 },
+ { "America/Grand_Turk" , 0x0097E6 },
+ { "America/Grenada" , 0x009A95 },
+ { "America/Guadeloupe" , 0x009AEA },
+ { "America/Guatemala" , 0x009B3F },
+ { "America/Guayaquil" , 0x009BC8 },
+ { "America/Guyana" , 0x009C25 },
+ { "America/Halifax" , 0x009CA6 },
+ { "America/Havana" , 0x00A1BC },
+ { "America/Hermosillo" , 0x00A52F },
+ { "America/Indiana/Indianapolis" , 0x00A60D },
+ { "America/Indiana/Knox" , 0x00A89E },
+ { "America/Indiana/Marengo" , 0x00AC35 },
+ { "America/Indiana/Petersburg" , 0x00AEDB },
+ { "America/Indiana/Tell_City" , 0x00B428 },
+ { "America/Indiana/Vevay" , 0x00B6C1 },
+ { "America/Indiana/Vincennes" , 0x00B8FC },
+ { "America/Indiana/Winamac" , 0x00BBB0 },
+ { "America/Indianapolis" , 0x00B1BE },
+ { "America/Inuvik" , 0x00BE69 },
+ { "America/Iqaluit" , 0x00C160 },
+ { "America/Jamaica" , 0x00C482 },
+ { "America/Jujuy" , 0x00C547 },
+ { "America/Juneau" , 0x00C6F1 },
+ { "America/Kentucky/Louisville" , 0x00CA6F },
+ { "America/Kentucky/Monticello" , 0x00CE8D },
+ { "America/Knox_IN" , 0x00D212 },
+ { "America/Kralendijk" , 0x00D583 },
+ { "America/La_Paz" , 0x00D5E9 },
+ { "America/Lima" , 0x00D650 },
+ { "America/Los_Angeles" , 0x00D6F8 },
+ { "America/Louisville" , 0x00DB09 },
+ { "America/Lower_Princes" , 0x00DEFE },
+ { "America/Maceio" , 0x00DF64 },
+ { "America/Managua" , 0x00E09E },
+ { "America/Manaus" , 0x00E151 },
+ { "America/Marigot" , 0x00E253 },
+ { "America/Martinique" , 0x00E2A8 },
+ { "America/Matamoros" , 0x00E314 },
+ { "America/Mazatlan" , 0x00E56D },
+ { "America/Mendoza" , 0x00E7DA },
+ { "America/Menominee" , 0x00E98E },
+ { "America/Merida" , 0x00ED0F },
+ { "America/Metlakatla" , 0x00EF4A },
+ { "America/Mexico_City" , 0x00F084 },
+ { "America/Miquelon" , 0x00F2FF },
+ { "America/Moncton" , 0x00F571 },
+ { "America/Monterrey" , 0x00FA08 },
+ { "America/Montevideo" , 0x00FC6B },
+ { "America/Montreal" , 0x00FF7D },
+ { "America/Montserrat" , 0x01046D },
+ { "America/Nassau" , 0x0104C2 },
+ { "America/New_York" , 0x010807 },
+ { "America/Nipigon" , 0x010D12 },
+ { "America/Nome" , 0x011063 },
+ { "America/Noronha" , 0x0113E1 },
+ { "America/North_Dakota/Beulah" , 0x011511 },
+ { "America/North_Dakota/Center" , 0x0118A5 },
+ { "America/North_Dakota/New_Salem" , 0x011C39 },
+ { "America/Ojinaga" , 0x011FE2 },
+ { "America/Panama" , 0x012243 },
+ { "America/Pangnirtung" , 0x012298 },
+ { "America/Paramaribo" , 0x0125CE },
+ { "America/Phoenix" , 0x012660 },
+ { "America/Port-au-Prince" , 0x01271E },
+ { "America/Port_of_Spain" , 0x012A42 },
+ { "America/Porto_Acre" , 0x01293E },
+ { "America/Porto_Velho" , 0x012A97 },
+ { "America/Puerto_Rico" , 0x012B8D },
+ { "America/Rainy_River" , 0x012BF8 },
+ { "America/Rankin_Inlet" , 0x012F30 },
+ { "America/Recife" , 0x013216 },
+ { "America/Regina" , 0x013340 },
+ { "America/Resolute" , 0x0134FE },
+ { "America/Rio_Branco" , 0x0137EF },
+ { "America/Rosario" , 0x0138F7 },
+ { "America/Santa_Isabel" , 0x013A9D },
+ { "America/Santarem" , 0x013E40 },
+ { "America/Santiago" , 0x013F45 },
+ { "America/Santo_Domingo" , 0x0142EE },
+ { "America/Sao_Paulo" , 0x0143B4 },
+ { "America/Scoresbysund" , 0x0146C3 },
+ { "America/Shiprock" , 0x0149B1 },
+ { "America/Sitka" , 0x014D2A },
+ { "America/St_Barthelemy" , 0x0150B2 },
+ { "America/St_Johns" , 0x015107 },
+ { "America/St_Kitts" , 0x01565A },
+ { "America/St_Lucia" , 0x0156AF },
+ { "America/St_Thomas" , 0x015704 },
+ { "America/St_Vincent" , 0x015759 },
+ { "America/Swift_Current" , 0x0157AE },
+ { "America/Tegucigalpa" , 0x0158CF },
+ { "America/Thule" , 0x01594E },
+ { "America/Thunder_Bay" , 0x015B95 },
+ { "America/Tijuana" , 0x015EDE },
+ { "America/Toronto" , 0x016277 },
+ { "America/Tortola" , 0x016797 },
+ { "America/Vancouver" , 0x0167EC },
+ { "America/Virgin" , 0x016C29 },
+ { "America/Whitehorse" , 0x016C7E },
+ { "America/Winnipeg" , 0x016F9B },
+ { "America/Yakutat" , 0x0173DB },
+ { "America/Yellowknife" , 0x017746 },
+ { "Antarctica/Casey" , 0x017A56 },
+ { "Antarctica/Davis" , 0x017AF3 },
+ { "Antarctica/DumontDUrville" , 0x017B94 },
+ { "Antarctica/Macquarie" , 0x017C26 },
+ { "Antarctica/Mawson" , 0x017E6D },
+ { "Antarctica/McMurdo" , 0x017EE9 },
+ { "Antarctica/Palmer" , 0x018294 },
+ { "Antarctica/Rothera" , 0x0185B0 },
+ { "Antarctica/South_Pole" , 0x018626 },
+ { "Antarctica/Syowa" , 0x0189A4 },
+ { "Antarctica/Troll" , 0x018A12 },
+ { "Antarctica/Vostok" , 0x018BE4 },
+ { "Arctic/Longyearbyen" , 0x018C55 },
+ { "Asia/Aden" , 0x018F87 },
+ { "Asia/Almaty" , 0x018FDC },
+ { "Asia/Amman" , 0x01915B },
+ { "Asia/Anadyr" , 0x019411 },
+ { "Asia/Aqtau" , 0x0195F6 },
+ { "Asia/Aqtobe" , 0x0197F5 },
+ { "Asia/Ashgabat" , 0x0199AD },
+ { "Asia/Ashkhabad" , 0x019ACA },
+ { "Asia/Baghdad" , 0x019BE7 },
+ { "Asia/Bahrain" , 0x019D5C },
+ { "Asia/Baku" , 0x019DC2 },
+ { "Asia/Bangkok" , 0x01A0AA },
+ { "Asia/Beirut" , 0x01A0FF },
+ { "Asia/Bishkek" , 0x01A40C },
+ { "Asia/Brunei" , 0x01A5B8 },
+ { "Asia/Calcutta" , 0x01A61A },
+ { "Asia/Choibalsan" , 0x01A693 },
+ { "Asia/Chongqing" , 0x01A80C },
+ { "Asia/Chungking" , 0x01A8FB },
+ { "Asia/Colombo" , 0x01A9AA },
+ { "Asia/Dacca" , 0x01AA46 },
+ { "Asia/Damascus" , 0x01AAEC },
+ { "Asia/Dhaka" , 0x01AE3C },
+ { "Asia/Dili" , 0x01AEE2 },
+ { "Asia/Dubai" , 0x01AF6C },
+ { "Asia/Dushanbe" , 0x01AFC1 },
+ { "Asia/Gaza" , 0x01B0C4 },
+ { "Asia/Harbin" , 0x01B417 },
+ { "Asia/Hebron" , 0x01B4FE },
+ { "Asia/Ho_Chi_Minh" , 0x01B85A },
+ { "Asia/Hong_Kong" , 0x01B8D2 },
+ { "Asia/Hovd" , 0x01BA94 },
+ { "Asia/Irkutsk" , 0x01BC0C },
+ { "Asia/Istanbul" , 0x01BDF2 },
+ { "Asia/Jakarta" , 0x01C1DF },
+ { "Asia/Jayapura" , 0x01C289 },
+ { "Asia/Jerusalem" , 0x01C325 },
+ { "Asia/Kabul" , 0x01C654 },
+ { "Asia/Kamchatka" , 0x01C6A5 },
+ { "Asia/Karachi" , 0x01C881 },
+ { "Asia/Kashgar" , 0x01C936 },
+ { "Asia/Kathmandu" , 0x01CA07 },
+ { "Asia/Katmandu" , 0x01CA6D },
+ { "Asia/Khandyga" , 0x01CAD3 },
+ { "Asia/Kolkata" , 0x01CCF8 },
+ { "Asia/Krasnoyarsk" , 0x01CD71 },
+ { "Asia/Kuala_Lumpur" , 0x01CF59 },
+ { "Asia/Kuching" , 0x01D016 },
+ { "Asia/Kuwait" , 0x01D104 },
+ { "Asia/Macao" , 0x01D159 },
+ { "Asia/Macau" , 0x01D294 },
+ { "Asia/Magadan" , 0x01D3CF },
+ { "Asia/Makassar" , 0x01D5B1 },
+ { "Asia/Manila" , 0x01D676 },
+ { "Asia/Muscat" , 0x01D6FB },
+ { "Asia/Nicosia" , 0x01D750 },
+ { "Asia/Novokuznetsk" , 0x01DA38 },
+ { "Asia/Novosibirsk" , 0x01DC3A },
+ { "Asia/Omsk" , 0x01DE25 },
+ { "Asia/Oral" , 0x01E00C },
+ { "Asia/Phnom_Penh" , 0x01E1DC },
+ { "Asia/Pontianak" , 0x01E254 },
+ { "Asia/Pyongyang" , 0x01E316 },
+ { "Asia/Qatar" , 0x01E383 },
+ { "Asia/Qyzylorda" , 0x01E3E9 },
+ { "Asia/Rangoon" , 0x01E5BF },
+ { "Asia/Riyadh" , 0x01E637 },
+ { "Asia/Saigon" , 0x01E68C },
+ { "Asia/Sakhalin" , 0x01E704 },
+ { "Asia/Samarkand" , 0x01E8FB },
+ { "Asia/Seoul" , 0x01EA31 },
+ { "Asia/Shanghai" , 0x01EAD5 },
+ { "Asia/Singapore" , 0x01EBB5 },
+ { "Asia/Taipei" , 0x01EC6C },
+ { "Asia/Tashkent" , 0x01ED84 },
+ { "Asia/Tbilisi" , 0x01EEB5 },
+ { "Asia/Tehran" , 0x01F06F },
+ { "Asia/Tel_Aviv" , 0x01F2DD },
+ { "Asia/Thimbu" , 0x01F60C },
+ { "Asia/Thimphu" , 0x01F672 },
+ { "Asia/Tokyo" , 0x01F6D8 },
+ { "Asia/Ujung_Pandang" , 0x01F761 },
+ { "Asia/Ulaanbaatar" , 0x01F7DE },
+ { "Asia/Ulan_Bator" , 0x01F939 },
+ { "Asia/Urumqi" , 0x01FA86 },
+ { "Asia/Ust-Nera" , 0x01FB4D },
+ { "Asia/Vientiane" , 0x01FD52 },
+ { "Asia/Vladivostok" , 0x01FDCA },
+ { "Asia/Yakutsk" , 0x01FFAF },
+ { "Asia/Yekaterinburg" , 0x020194 },
+ { "Asia/Yerevan" , 0x02039F },
+ { "Atlantic/Azores" , 0x02059F },
+ { "Atlantic/Bermuda" , 0x020AA2 },
+ { "Atlantic/Canary" , 0x020D83 },
+ { "Atlantic/Cape_Verde" , 0x021059 },
+ { "Atlantic/Faeroe" , 0x0210D2 },
+ { "Atlantic/Faroe" , 0x021376 },
+ { "Atlantic/Jan_Mayen" , 0x02161A },
+ { "Atlantic/Madeira" , 0x02194C },
+ { "Atlantic/Reykjavik" , 0x021E55 },
+ { "Atlantic/South_Georgia" , 0x02200E },
+ { "Atlantic/St_Helena" , 0x022220 },
+ { "Atlantic/Stanley" , 0x022052 },
+ { "Australia/ACT" , 0x022275 },
+ { "Australia/Adelaide" , 0x022592 },
+ { "Australia/Brisbane" , 0x0228BE },
+ { "Australia/Broken_Hill" , 0x022985 },
+ { "Australia/Canberra" , 0x022CC3 },
+ { "Australia/Currie" , 0x022FE0 },
+ { "Australia/Darwin" , 0x023313 },
+ { "Australia/Eucla" , 0x023399 },
+ { "Australia/Hobart" , 0x02346E },
+ { "Australia/LHI" , 0x0237CC },
+ { "Australia/Lindeman" , 0x023A67 },
+ { "Australia/Lord_Howe" , 0x023B48 },
+ { "Australia/Melbourne" , 0x023DF3 },
+ { "Australia/North" , 0x024118 },
+ { "Australia/NSW" , 0x02418C },
+ { "Australia/Perth" , 0x0244A9 },
+ { "Australia/Queensland" , 0x024581 },
+ { "Australia/South" , 0x02462D },
+ { "Australia/Sydney" , 0x02494A },
+ { "Australia/Tasmania" , 0x024C87 },
+ { "Australia/Victoria" , 0x024FCC },
+ { "Australia/West" , 0x0252E9 },
+ { "Australia/Yancowinna" , 0x02539F },
+ { "Brazil/Acre" , 0x0256C1 },
+ { "Brazil/DeNoronha" , 0x0257C5 },
+ { "Brazil/East" , 0x0258E5 },
+ { "Brazil/West" , 0x025BC2 },
+ { "Canada/Atlantic" , 0x025CBA },
+ { "Canada/Central" , 0x0261A2 },
+ { "Canada/East-Saskatchewan" , 0x026AAC },
+ { "Canada/Eastern" , 0x0265BC },
+ { "Canada/Mountain" , 0x026C35 },
+ { "Canada/Newfoundland" , 0x026FAB },
+ { "Canada/Pacific" , 0x0274D6 },
+ { "Canada/Saskatchewan" , 0x0278EF },
+ { "Canada/Yukon" , 0x027A78 },
+ { "CET" , 0x027D7B },
+ { "Chile/Continental" , 0x028084 },
+ { "Chile/EasterIsland" , 0x02841F },
+ { "CST6CDT" , 0x028761 },
+ { "Cuba" , 0x028AB2 },
+ { "EET" , 0x028E25 },
+ { "Egypt" , 0x0290D8 },
+ { "Eire" , 0x0294BF },
+ { "EST" , 0x0299D0 },
+ { "EST5EDT" , 0x029A14 },
+ { "Etc/GMT" , 0x029D65 },
+ { "Etc/GMT+0" , 0x029E31 },
+ { "Etc/GMT+1" , 0x029EBB },
+ { "Etc/GMT+10" , 0x029F48 },
+ { "Etc/GMT+11" , 0x029FD6 },
+ { "Etc/GMT+12" , 0x02A064 },
+ { "Etc/GMT+2" , 0x02A17F },
+ { "Etc/GMT+3" , 0x02A20B },
+ { "Etc/GMT+4" , 0x02A297 },
+ { "Etc/GMT+5" , 0x02A323 },
+ { "Etc/GMT+6" , 0x02A3AF },
+ { "Etc/GMT+7" , 0x02A43B },
+ { "Etc/GMT+8" , 0x02A4C7 },
+ { "Etc/GMT+9" , 0x02A553 },
+ { "Etc/GMT-0" , 0x029DED },
+ { "Etc/GMT-1" , 0x029E75 },
+ { "Etc/GMT-10" , 0x029F01 },
+ { "Etc/GMT-11" , 0x029F8F },
+ { "Etc/GMT-12" , 0x02A01D },
+ { "Etc/GMT-13" , 0x02A0AB },
+ { "Etc/GMT-14" , 0x02A0F2 },
+ { "Etc/GMT-2" , 0x02A139 },
+ { "Etc/GMT-3" , 0x02A1C5 },
+ { "Etc/GMT-4" , 0x02A251 },
+ { "Etc/GMT-5" , 0x02A2DD },
+ { "Etc/GMT-6" , 0x02A369 },
+ { "Etc/GMT-7" , 0x02A3F5 },
+ { "Etc/GMT-8" , 0x02A481 },
+ { "Etc/GMT-9" , 0x02A50D },
+ { "Etc/GMT0" , 0x029DA9 },
+ { "Etc/Greenwich" , 0x02A599 },
+ { "Etc/UCT" , 0x02A5DD },
+ { "Etc/Universal" , 0x02A621 },
+ { "Etc/UTC" , 0x02A665 },
+ { "Etc/Zulu" , 0x02A6A9 },
+ { "Europe/Amsterdam" , 0x02A6ED },
+ { "Europe/Andorra" , 0x02AB2B },
+ { "Europe/Athens" , 0x02ADA7 },
+ { "Europe/Belfast" , 0x02B0EA },
+ { "Europe/Belgrade" , 0x02B621 },
+ { "Europe/Berlin" , 0x02B8EA },
+ { "Europe/Bratislava" , 0x02BC4E },
+ { "Europe/Brussels" , 0x02BF80 },
+ { "Europe/Bucharest" , 0x02C3B7 },
+ { "Europe/Budapest" , 0x02C6E1 },
+ { "Europe/Busingen" , 0x02CA54 },
+ { "Europe/Chisinau" , 0x02CD0B },
+ { "Europe/Copenhagen" , 0x02D099 },
+ { "Europe/Dublin" , 0x02D3A3 },
+ { "Europe/Gibraltar" , 0x02D8B4 },
+ { "Europe/Guernsey" , 0x02DD0B },
+ { "Europe/Helsinki" , 0x02E242 },
+ { "Europe/Isle_of_Man" , 0x02E4F8 },
+ { "Europe/Istanbul" , 0x02EA2F },
+ { "Europe/Jersey" , 0x02EE1C },
+ { "Europe/Kaliningrad" , 0x02F353 },
+ { "Europe/Kiev" , 0x02F5B9 },
+ { "Europe/Lisbon" , 0x02F8D5 },
+ { "Europe/Ljubljana" , 0x02FDD9 },
+ { "Europe/London" , 0x0300A2 },
+ { "Europe/Luxembourg" , 0x0305D9 },
+ { "Europe/Madrid" , 0x030A2F },
+ { "Europe/Malta" , 0x030DF5 },
+ { "Europe/Mariehamn" , 0x0311AE },
+ { "Europe/Minsk" , 0x031464 },
+ { "Europe/Monaco" , 0x031672 },
+ { "Europe/Moscow" , 0x031AAD },
+ { "Europe/Nicosia" , 0x031D02 },
+ { "Europe/Oslo" , 0x031FEA },
+ { "Europe/Paris" , 0x03231C },
+ { "Europe/Podgorica" , 0x032762 },
+ { "Europe/Prague" , 0x032A2B },
+ { "Europe/Riga" , 0x032D5D },
+ { "Europe/Rome" , 0x0330A2 },
+ { "Europe/Samara" , 0x033465 },
+ { "Europe/San_Marino" , 0x033698 },
+ { "Europe/Sarajevo" , 0x033A5B },
+ { "Europe/Simferopol" , 0x033D24 },
+ { "Europe/Skopje" , 0x033F70 },
+ { "Europe/Sofia" , 0x034239 },
+ { "Europe/Stockholm" , 0x034541 },
+ { "Europe/Tallinn" , 0x0347F0 },
+ { "Europe/Tirane" , 0x034B2A },
+ { "Europe/Tiraspol" , 0x034E30 },
+ { "Europe/Uzhgorod" , 0x0351BE },
+ { "Europe/Vaduz" , 0x0354D5 },
+ { "Europe/Vatican" , 0x035784 },
+ { "Europe/Vienna" , 0x035B47 },
+ { "Europe/Vilnius" , 0x035E74 },
+ { "Europe/Volgograd" , 0x0361B3 },
+ { "Europe/Warsaw" , 0x0363B3 },
+ { "Europe/Zagreb" , 0x036794 },
+ { "Europe/Zaporozhye" , 0x036A5D },
+ { "Europe/Zurich" , 0x036D9E },
+ { "Factory" , 0x03704D },
+ { "GB" , 0x0370BE },
+ { "GB-Eire" , 0x0375F5 },
+ { "GMT" , 0x037B2C },
+ { "GMT+0" , 0x037BF8 },
+ { "GMT-0" , 0x037BB4 },
+ { "GMT0" , 0x037B70 },
+ { "Greenwich" , 0x037C3C },
+ { "Hongkong" , 0x037C80 },
+ { "HST" , 0x037E42 },
+ { "Iceland" , 0x037E86 },
+ { "Indian/Antananarivo" , 0x03803F },
+ { "Indian/Chagos" , 0x0380B3 },
+ { "Indian/Christmas" , 0x038115 },
+ { "Indian/Cocos" , 0x038159 },
+ { "Indian/Comoro" , 0x03819D },
+ { "Indian/Kerguelen" , 0x0381F2 },
+ { "Indian/Mahe" , 0x038247 },
+ { "Indian/Maldives" , 0x03829C },
+ { "Indian/Mauritius" , 0x0382F1 },
+ { "Indian/Mayotte" , 0x038367 },
+ { "Indian/Reunion" , 0x0383BC },
+ { "Iran" , 0x038411 },
+ { "Israel" , 0x03867F },
+ { "Jamaica" , 0x0389AE },
+ { "Japan" , 0x038A73 },
+ { "Kwajalein" , 0x038AFC },
+ { "Libya" , 0x038B5F },
+ { "MET" , 0x038C68 },
+ { "Mexico/BajaNorte" , 0x038F71 },
+ { "Mexico/BajaSur" , 0x0392DA },
+ { "Mexico/General" , 0x03951F },
+ { "MST" , 0x03977D },
+ { "MST7MDT" , 0x0397C1 },
+ { "Navajo" , 0x039B12 },
+ { "NZ" , 0x039E8B },
+ { "NZ-CHAT" , 0x03A209 },
+ { "Pacific/Apia" , 0x03A4F1 },
+ { "Pacific/Auckland" , 0x03A68D },
+ { "Pacific/Chatham" , 0x03AA19 },
+ { "Pacific/Chuuk" , 0x03AD10 },
+ { "Pacific/Easter" , 0x03AD69 },
+ { "Pacific/Efate" , 0x03B0C7 },
+ { "Pacific/Enderbury" , 0x03B18D },
+ { "Pacific/Fakaofo" , 0x03B1FB },
+ { "Pacific/Fiji" , 0x03B24C },
+ { "Pacific/Funafuti" , 0x03B3DF },
+ { "Pacific/Galapagos" , 0x03B423 },
+ { "Pacific/Gambier" , 0x03B49B },
+ { "Pacific/Guadalcanal" , 0x03B500 },
+ { "Pacific/Guam" , 0x03B555 },
+ { "Pacific/Honolulu" , 0x03B5AB },
+ { "Pacific/Johnston" , 0x03B622 },
+ { "Pacific/Kiritimati" , 0x03B6A1 },
+ { "Pacific/Kosrae" , 0x03B70C },
+ { "Pacific/Kwajalein" , 0x03B769 },
+ { "Pacific/Majuro" , 0x03B7D5 },
+ { "Pacific/Marquesas" , 0x03B834 },
+ { "Pacific/Midway" , 0x03B89B },
+ { "Pacific/Nauru" , 0x03B925 },
+ { "Pacific/Niue" , 0x03B99D },
+ { "Pacific/Norfolk" , 0x03B9FB },
+ { "Pacific/Noumea" , 0x03BA50 },
+ { "Pacific/Pago_Pago" , 0x03BAE0 },
+ { "Pacific/Palau" , 0x03BB69 },
+ { "Pacific/Pitcairn" , 0x03BBAD },
+ { "Pacific/Pohnpei" , 0x03BC02 },
+ { "Pacific/Ponape" , 0x03BC57 },
+ { "Pacific/Port_Moresby" , 0x03BC9C },
+ { "Pacific/Rarotonga" , 0x03BCE0 },
+ { "Pacific/Saipan" , 0x03BDBC },
+ { "Pacific/Samoa" , 0x03BE1F },
+ { "Pacific/Tahiti" , 0x03BEA8 },
+ { "Pacific/Tarawa" , 0x03BF0D },
+ { "Pacific/Tongatapu" , 0x03BF61 },
+ { "Pacific/Truk" , 0x03BFED },
+ { "Pacific/Wake" , 0x03C032 },
+ { "Pacific/Wallis" , 0x03C082 },
+ { "Pacific/Yap" , 0x03C0C6 },
+ { "Poland" , 0x03C10B },
+ { "Portugal" , 0x03C4EC },
+ { "PRC" , 0x03C9E8 },
+ { "PST8PDT" , 0x03CA99 },
+ { "ROC" , 0x03CDEA },
+ { "ROK" , 0x03CF02 },
+ { "Singapore" , 0x03CFA6 },
+ { "Turkey" , 0x03D05D },
+ { "UCT" , 0x03D44A },
+ { "Universal" , 0x03D48E },
+ { "US/Alaska" , 0x03D4D2 },
+ { "US/Aleutian" , 0x03D83B },
+ { "US/Arizona" , 0x03DBA1 },
+ { "US/Central" , 0x03DC2F },
+ { "US/East-Indiana" , 0x03E639 },
+ { "US/Eastern" , 0x03E13A },
+ { "US/Hawaii" , 0x03E8A3 },
+ { "US/Indiana-Starke" , 0x03E914 },
+ { "US/Michigan" , 0x03EC85 },
+ { "US/Mountain" , 0x03EFBC },
+ { "US/Pacific" , 0x03F335 },
+ { "US/Pacific-New" , 0x03F73A },
+ { "US/Samoa" , 0x03FB3F },
+ { "UTC" , 0x03FBC8 },
+ { "W-SU" , 0x03FEBF },
+ { "WET" , 0x03FC0C },
+ { "Zulu" , 0x0400FD },
};
/* This is a generated file, do not modify */
-const unsigned char timelib_timezone_db_data_builtin[262480] = {
+const unsigned char timelib_timezone_db_data_builtin[262465] = {
/* Africa/Abidjan */
@@ -711,8 +711,8 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
/* Africa/Cairo */
0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x47, 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, 0xB6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0,
0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60,
0xCC, 0xDF, 0x29, 0xD0, 0xCD, 0xAC, 0xE1, 0xE0, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0,
0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xAD, 0x50, 0xE8, 0x36, 0x63, 0x60,
@@ -743,14 +743,14 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0,
0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0,
0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0,
-0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAF, 0x3A, 0xE0, 0x53, 0xD6, 0xC7, 0xE0,
-0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x81, 0xED, 0xE0, 0x55, 0xA9, 0x7A, 0xE0,
-0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x55, 0xF2, 0x60, 0x57, 0x7D, 0x7F, 0x60,
-0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x28, 0xA5, 0x60, 0x59, 0x50, 0x32, 0x60,
-0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xFB, 0x58, 0x60, 0x5B, 0x22, 0xE5, 0x60,
-0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCF, 0x5C, 0xE0, 0x5C, 0xF6, 0xE9, 0xE0,
-0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xC9, 0x9C, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9C, 0x4F, 0xE0,
-0x61, 0x56, 0x25, 0x50, 0x62, 0x70, 0x54, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60,
+0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAC, 0x89, 0xD0, 0x53, 0xDA, 0xBC, 0x60,
+0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0,
+0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x50, 0x9E, 0x50, 0x57, 0x7E, 0xD0, 0xE0,
+0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x27, 0x45, 0xD0, 0x59, 0x55, 0x78, 0x60,
+0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xF4, 0xB2, 0xD0, 0x5B, 0x22, 0xE5, 0x60,
+0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCB, 0x5A, 0x50, 0x5C, 0xF9, 0x8C, 0xE0,
+0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xD0, 0x34, 0x60, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9D, 0xA1, 0x60,
+0x61, 0x56, 0x25, 0x50, 0x62, 0x74, 0x48, 0xE0, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60,
0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60,
0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0,
0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0,
@@ -763,16 +763,16 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
-0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00,
-0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, 0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 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, 0x00, 0x01, 0x00, 0x01,
+0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01,
+0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 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, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x45, 0x45, 0x53, 0x54,
+0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01,
+0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00,
/* Africa/Casablanca */
0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -786,23 +786,23 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x4B, 0xDC, 0xC0, 0x80, 0x4C, 0x5D, 0xE5, 0x70,
0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x08, 0xBB, 0xA0,
0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x51, 0xD8, 0xCB, 0xA0,
-0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAF, 0x73, 0x20,
-0x53, 0xD7, 0x00, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, 0x55, 0x82, 0x26, 0x20,
-0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x56, 0x2A, 0xA0,
-0x57, 0x7D, 0xB7, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, 0x59, 0x28, 0xDD, 0xA0,
-0x59, 0x50, 0x6A, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xFB, 0x90, 0xA0,
-0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCF, 0x95, 0x20,
-0x5C, 0xF7, 0x22, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, 0x5E, 0xA2, 0x48, 0x20,
-0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, 0x60, 0x74, 0xFB, 0x20,
-0x60, 0x9C, 0x88, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, 0x62, 0x48, 0xFF, 0xA0,
-0x62, 0x70, 0x8C, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, 0x65, 0x3D, 0xBC, 0xA0,
-0x66, 0x15, 0xF2, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xE9, 0xF7, 0x20, 0x68, 0xFD, 0x80, 0xA0,
+0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAE, 0x21, 0xA0,
+0x53, 0xDC, 0x46, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, 0x55, 0x7B, 0x8E, 0xA0,
+0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x52, 0x36, 0x20,
+0x57, 0x80, 0x5A, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, 0x59, 0x1F, 0xA3, 0x20,
+0x59, 0x57, 0x02, 0x20, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xF6, 0x4A, 0xA0,
+0x5B, 0x24, 0x6F, 0x20, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCC, 0xF2, 0x20,
+0x5C, 0xFB, 0x16, 0xA0, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, 0x5E, 0x9A, 0x5F, 0x20,
+0x5E, 0xD1, 0xBE, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, 0x60, 0x71, 0x06, 0xA0,
+0x60, 0x9F, 0x2B, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, 0x62, 0x47, 0xAE, 0x20,
+0x62, 0x75, 0xD2, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, 0x65, 0x3D, 0xBC, 0xA0,
+0x66, 0x19, 0xE7, 0x20, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF0, 0x8E, 0xA0, 0x68, 0xFD, 0x80, 0xA0,
0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20,
0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20,
0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20,
0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0,
-0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCE, 0xC9, 0xA0,
-0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA8, 0x14, 0x20, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x7C, 0x18, 0xA0,
+0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCD, 0x78, 0x20,
+0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA4, 0x1F, 0xA0, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x7A, 0xC7, 0x20,
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,
0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01,
@@ -919,23 +919,23 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x4C, 0x5D, 0xE5, 0x70, 0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0,
0x50, 0x08, 0xBB, 0xA0, 0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0,
0x51, 0xD8, 0xCB, 0xA0, 0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0,
-0x53, 0xAF, 0x73, 0x20, 0x53, 0xD7, 0x00, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0,
-0x55, 0x82, 0x26, 0x20, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0,
-0x57, 0x56, 0x2A, 0xA0, 0x57, 0x7D, 0xB7, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0,
-0x59, 0x28, 0xDD, 0xA0, 0x59, 0x50, 0x6A, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0,
-0x5A, 0xFB, 0x90, 0xA0, 0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20,
-0x5C, 0xCF, 0x95, 0x20, 0x5C, 0xF7, 0x22, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20,
-0x5E, 0xA2, 0x48, 0x20, 0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20,
-0x60, 0x74, 0xFB, 0x20, 0x60, 0x9C, 0x88, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20,
-0x62, 0x48, 0xFF, 0xA0, 0x62, 0x70, 0x8C, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0,
-0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x15, 0xF2, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xE9, 0xF7, 0x20,
+0x53, 0xAE, 0x21, 0xA0, 0x53, 0xDC, 0x46, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0,
+0x55, 0x7B, 0x8E, 0xA0, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0,
+0x57, 0x52, 0x36, 0x20, 0x57, 0x80, 0x5A, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0,
+0x59, 0x1F, 0xA3, 0x20, 0x59, 0x57, 0x02, 0x20, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0,
+0x5A, 0xF6, 0x4A, 0xA0, 0x5B, 0x24, 0x6F, 0x20, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20,
+0x5C, 0xCC, 0xF2, 0x20, 0x5C, 0xFB, 0x16, 0xA0, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20,
+0x5E, 0x9A, 0x5F, 0x20, 0x5E, 0xD1, 0xBE, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20,
+0x60, 0x71, 0x06, 0xA0, 0x60, 0x9F, 0x2B, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20,
+0x62, 0x47, 0xAE, 0x20, 0x62, 0x75, 0xD2, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0,
+0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x19, 0xE7, 0x20, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF0, 0x8E, 0xA0,
0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0,
0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0,
0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20,
0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20,
0x78, 0x0F, 0x05, 0xA0, 0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20,
-0x7B, 0xCE, 0xC9, 0xA0, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA8, 0x14, 0x20, 0x7E, 0x79, 0xB2, 0xA0,
-0x7F, 0x7C, 0x18, 0xA0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
+0x7B, 0xCD, 0x78, 0x20, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA4, 0x1F, 0xA0, 0x7E, 0x79, 0xB2, 0xA0,
+0x7F, 0x7A, 0xC7, 0x20, 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, 0x03, 0x02, 0x03, 0x02, 0x03,
@@ -9553,7 +9553,7 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
/* Asia/Vladivostok */
0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 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, 0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0xA7, 0x59, 0x47, 0x50,
+0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0xA7, 0x59, 0x47, 0x50,
0xB5, 0xA3, 0xB6, 0xF0, 0x15, 0x27, 0x45, 0x60, 0x16, 0x18, 0x79, 0xD0, 0x17, 0x08, 0x78, 0xE0,
0x17, 0xF9, 0xAD, 0x50, 0x18, 0xE9, 0xAC, 0x60, 0x19, 0xDA, 0xE0, 0xD0, 0x1A, 0xCC, 0x31, 0x60,
0x1B, 0xBC, 0x3E, 0x80, 0x1C, 0xAC, 0x2F, 0x80, 0x1D, 0x9C, 0x20, 0x80, 0x1E, 0x8C, 0x11, 0x80,
@@ -9576,12 +9576,12 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x08, 0x00, 0x00, 0x7B, 0xB0,
0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00,
0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09,
-0x00, 0x00, 0x8C, 0xA0, 0x01, 0x0F, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 0x00, 0x9A, 0xB0,
+0x00, 0x00, 0x8C, 0xA0, 0x01, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0,
0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x53, 0x54,
-0x00, 0x56, 0x4C, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x3A, 0x01, 0xDB,
-0xF8, 0xF5, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20,
-0x2D, 0x20, 0x41, 0x6D, 0x75, 0x72, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x3A, 0x01, 0xDB, 0xF8, 0xF5, 0x00, 0x00, 0x00, 0x16, 0x4D,
+0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20, 0x2D, 0x20, 0x41, 0x6D, 0x75, 0x72, 0x20,
+0x52, 0x69, 0x76, 0x65, 0x72,
/* Asia/Yakutsk */
0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -12053,8 +12053,8 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
/* Egypt */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 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, 0xB6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0,
0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60,
0xCC, 0xDF, 0x29, 0xD0, 0xCD, 0xAC, 0xE1, 0xE0, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0,
0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xAD, 0x50, 0xE8, 0x36, 0x63, 0x60,
@@ -12085,14 +12085,14 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0,
0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0,
0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0,
-0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAF, 0x3A, 0xE0, 0x53, 0xD6, 0xC7, 0xE0,
-0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x81, 0xED, 0xE0, 0x55, 0xA9, 0x7A, 0xE0,
-0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x55, 0xF2, 0x60, 0x57, 0x7D, 0x7F, 0x60,
-0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x28, 0xA5, 0x60, 0x59, 0x50, 0x32, 0x60,
-0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xFB, 0x58, 0x60, 0x5B, 0x22, 0xE5, 0x60,
-0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCF, 0x5C, 0xE0, 0x5C, 0xF6, 0xE9, 0xE0,
-0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xC9, 0x9C, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9C, 0x4F, 0xE0,
-0x61, 0x56, 0x25, 0x50, 0x62, 0x70, 0x54, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60,
+0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAC, 0x89, 0xD0, 0x53, 0xDA, 0xBC, 0x60,
+0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0,
+0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x50, 0x9E, 0x50, 0x57, 0x7E, 0xD0, 0xE0,
+0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x27, 0x45, 0xD0, 0x59, 0x55, 0x78, 0x60,
+0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xF4, 0xB2, 0xD0, 0x5B, 0x22, 0xE5, 0x60,
+0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCB, 0x5A, 0x50, 0x5C, 0xF9, 0x8C, 0xE0,
+0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xD0, 0x34, 0x60, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9D, 0xA1, 0x60,
+0x61, 0x56, 0x25, 0x50, 0x62, 0x74, 0x48, 0xE0, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60,
0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60,
0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0,
0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0,
@@ -12105,16 +12105,16 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
-0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03,
-0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00,
-0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20,
-0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 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, 0x00, 0x01, 0x00, 0x01,
+0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01,
+0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 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, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00,
+0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x45, 0x45, 0x53, 0x54,
+0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01,
+0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Eire */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -14441,7 +14441,7 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
/* Europe/Moscow */
0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x9B, 0x5F, 0x1E, 0xD8,
+0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x9B, 0x5F, 0x1E, 0xD8,
0x9D, 0x3E, 0xF2, 0x98, 0x9E, 0x2A, 0xEF, 0x18, 0x9E, 0xF7, 0x39, 0x88, 0x9F, 0x84, 0x58, 0x18,
0xA0, 0xD8, 0x6D, 0x08, 0xA1, 0x00, 0x16, 0x28, 0xA1, 0x3C, 0xA6, 0x40, 0xA4, 0x10, 0x6D, 0xC0,
0xA4, 0x3D, 0x32, 0xB0, 0xA5, 0x15, 0x68, 0xB0, 0xA5, 0x3D, 0x03, 0xC0, 0xA7, 0x1E, 0x45, 0x50,
@@ -14468,15 +14468,15 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0C, 0x00, 0x00, 0x23, 0x28, 0x00, 0x00, 0x00, 0x00,
0x31, 0x68, 0x01, 0x04, 0x00, 0x00, 0x23, 0x58, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x78, 0x01, 0x08,
0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x46, 0x50,
-0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00,
-0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15,
+0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00,
+0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19,
0x00, 0x00, 0x38, 0x40, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44,
-0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45,
-0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE,
-0x65, 0x98, 0x01, 0x4C, 0x01, 0x7D, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77,
-0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x52, 0x75, 0x73, 0x73, 0x69,
-0x61,
+0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4D, 0x00, 0x45,
+0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xDE, 0x65, 0x98, 0x01, 0x4C, 0x01, 0x7D, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F,
+0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x52,
+0x75, 0x73, 0x73, 0x69, 0x61,
/* Europe/Nicosia */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -18429,7 +18429,7 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
/* W-SU */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x9B, 0x5F, 0x1E, 0xD8,
+0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x9B, 0x5F, 0x1E, 0xD8,
0x9D, 0x3E, 0xF2, 0x98, 0x9E, 0x2A, 0xEF, 0x18, 0x9E, 0xF7, 0x39, 0x88, 0x9F, 0x84, 0x58, 0x18,
0xA0, 0xD8, 0x6D, 0x08, 0xA1, 0x00, 0x16, 0x28, 0xA1, 0x3C, 0xA6, 0x40, 0xA4, 0x10, 0x6D, 0xC0,
0xA4, 0x3D, 0x32, 0xB0, 0xA5, 0x15, 0x68, 0xB0, 0xA5, 0x3D, 0x03, 0xC0, 0xA7, 0x1E, 0x45, 0x50,
@@ -18456,13 +18456,13 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0C, 0x00, 0x00, 0x23, 0x28, 0x00, 0x00, 0x00, 0x00,
0x31, 0x68, 0x01, 0x04, 0x00, 0x00, 0x23, 0x58, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x78, 0x01, 0x08,
0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x46, 0x50,
-0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00,
-0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15,
+0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00,
+0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19,
0x00, 0x00, 0x38, 0x40, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44,
-0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45,
-0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
-0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89,
-0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4D, 0x00, 0x45,
+0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00,
/* Zulu */
0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -18471,4 +18471,4 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = {
0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80,
0x00, 0x00, 0x00, 0x00, };
-const timelib_tzdb timezonedb_builtin = { "2014.3", 580, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
+const timelib_tzdb timezonedb_builtin = { "2014.5", 580, timezonedb_idx_builtin, timelib_timezone_db_data_builtin };
diff --git a/ext/date/tests/bug41523.phpt b/ext/date/tests/bug41523.phpt
index 05c591f063..68fe1bd6a3 100644
--- a/ext/date/tests/bug41523.phpt
+++ b/ext/date/tests/bug41523.phpt
@@ -46,7 +46,7 @@ array(12) {
bool(false)
object(DateTime)#1 (3) {
["date"]=>
- string(20) "-0001-11-30 00:00:00.000000"
+ string(27) "-0001-11-30 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
diff --git a/ext/oci8/LICENSE b/ext/oci8/LICENSE
index 42536af320..6059c80e12 100644
--- a/ext/oci8/LICENSE
+++ b/ext/oci8/LICENSE
@@ -1,6 +1,6 @@
--------------------------------------------------------------------
The PHP License, version 3.01
-Copyright (c) 1999 - 2012 The PHP Group. All rights reserved.
+Copyright (c) 1999 - 2014 The PHP Group. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index 20b7a1ae31..7df2764d93 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -80,7 +80,7 @@ static inline void print_block(zend_code_block *block, zend_op *opcodes, char *t
/* find code blocks in op_array
code block is a set of opcodes with single flow of control, i.e. without jmps,
branches, etc. */
-static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
+static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg, zend_optimizer_ctx *ctx)
{
zend_op *opline;
zend_op *end = op_array->opcodes + op_array->last;
@@ -88,7 +88,7 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
zend_uint opno = 0;
memset(cfg, 0, sizeof(zend_cfg));
- blocks = cfg->blocks = ecalloc(op_array->last + 2, sizeof(zend_code_block));
+ blocks = cfg->blocks = zend_arena_calloc(&ctx->arena, op_array->last + 2, sizeof(zend_code_block));
opline = op_array->opcodes;
blocks[0].start_opline = opline;
blocks[0].start_opline_no = 0;
@@ -102,7 +102,6 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
/* would not optimize non-optimized BRK/CONTs - we cannot
really know where it jumps, so these optimizations are
too dangerous */
- efree(blocks);
return 0;
#if ZEND_EXTENSION_API_NO > PHP_5_4_X_API_NO
case ZEND_FAST_CALL:
@@ -169,8 +168,8 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
/* first find block start points */
if (op_array->last_try_catch) {
int i;
- cfg->try = ecalloc(op_array->last_try_catch, sizeof(zend_code_block *));
- cfg->catch = ecalloc(op_array->last_try_catch, sizeof(zend_code_block *));
+ cfg->try = zend_arena_calloc(&ctx->arena, op_array->last_try_catch, sizeof(zend_code_block *));
+ cfg->catch = zend_arena_calloc(&ctx->arena, op_array->last_try_catch, sizeof(zend_code_block *));
for (i = 0; i< op_array->last_try_catch; i++) {
cfg->try[i] = &blocks[op_array->try_catch_array[i].try_op];
cfg->catch[i] = &blocks[op_array->try_catch_array[i].catch_op];
@@ -203,9 +202,9 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
}
}
if (j) {
- cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
- cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
- cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
+ cfg->loop_start = zend_arena_calloc(&ctx->arena, op_array->last_brk_cont, sizeof(zend_code_block *));
+ cfg->loop_cont = zend_arena_calloc(&ctx->arena, op_array->last_brk_cont, sizeof(zend_code_block *));
+ cfg->loop_brk = zend_arena_calloc(&ctx->arena, op_array->last_brk_cont, sizeof(zend_code_block *));
j = 0;
for (i = 0; i< op_array->last_brk_cont; i++) {
if (op_array->brk_cont_array[i].start >= 0 &&
@@ -317,18 +316,16 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
zend_block_source *__s = tob->sources; \
while (__s && __s->from != fromb) __s = __s->next; \
if (__s == NULL) { \
- zend_block_source *__t = emalloc(sizeof(zend_block_source)); \
+ zend_block_source *__t = zend_arena_alloc(&ctx->arena, sizeof(zend_block_source)); \
__t->next = tob->sources; \
tob->sources = __t; \
__t->from = fromb; \
} \
}
-#define DEL_SOURCE(cs) { \
- zend_block_source *__ns = (*cs)->next; \
- efree(*cs); \
- *cs = __ns; \
-}
+#define DEL_SOURCE(cs) do { \
+ *(cs) = (*(cs))->next; \
+ } while (0)
static inline void replace_source(zend_block_source *list, zend_code_block *old, zend_code_block *new)
@@ -400,7 +397,7 @@ static inline void del_source(zend_code_block *from, zend_code_block *to)
/* move 'to'`s references to 'from' */
to->start_opline = NULL;
to->access = 0;
- efree(to->sources);
+//???A efree(to->sources);
to->sources = NULL;
from_block->follow_to = to->follow_to;
if (to->op1_to) {
@@ -423,7 +420,7 @@ static inline void del_source(zend_code_block *from, zend_code_block *to)
}
}
-static void delete_code_block(zend_code_block *block)
+static void delete_code_block(zend_code_block *block, zend_optimizer_ctx *ctx)
{
if (block->protected) {
return;
@@ -455,7 +452,7 @@ static void delete_code_block(zend_code_block *block)
block->access = 0;
}
-static void zend_access_path(zend_code_block *block)
+static void zend_access_path(zend_code_block *block, zend_optimizer_ctx *ctx)
{
if (block->access) {
return;
@@ -463,25 +460,25 @@ static void zend_access_path(zend_code_block *block)
block->access = 1;
if (block->op1_to) {
- zend_access_path(block->op1_to);
+ zend_access_path(block->op1_to, ctx);
ADD_SOURCE(block, block->op1_to);
}
if (block->op2_to) {
- zend_access_path(block->op2_to);
+ zend_access_path(block->op2_to, ctx);
ADD_SOURCE(block, block->op2_to);
}
if (block->ext_to) {
- zend_access_path(block->ext_to);
+ zend_access_path(block->ext_to, ctx);
ADD_SOURCE(block, block->ext_to);
}
if (block->follow_to) {
- zend_access_path(block->follow_to);
+ zend_access_path(block->follow_to, ctx);
ADD_SOURCE(block, block->follow_to);
}
}
/* Traverse CFG, mark reachable basic blocks and build back references */
-static void zend_rebuild_access_path(zend_cfg *cfg, zend_op_array *op_array, int find_start)
+static void zend_rebuild_access_path(zend_cfg *cfg, zend_op_array *op_array, int find_start, zend_optimizer_ctx *ctx)
{
zend_code_block *blocks = cfg->blocks;
zend_code_block *start = find_start? NULL : blocks;
@@ -495,26 +492,26 @@ static void zend_rebuild_access_path(zend_cfg *cfg, zend_op_array *op_array, int
start = b;
}
b->access = 0;
- cs = b->sources;
- while (cs) {
- zend_block_source *n = cs->next;
- efree(cs);
- cs = n;
- }
+//???A cs = b->sources;
+//???A while (cs) {
+//???A zend_block_source *n = cs->next;
+//???A efree(cs);
+//???A cs = n;
+//???A }
b->sources = NULL;
b = b->next;
}
/* Walk thorough all paths */
- zend_access_path(start);
+ zend_access_path(start, ctx);
/* Add brk/cont paths */
if (op_array->last_brk_cont) {
int i;
for (i=0; i< op_array->last_brk_cont; i++) {
- zend_access_path(cfg->loop_start[i]);
- zend_access_path(cfg->loop_cont[i]);
- zend_access_path(cfg->loop_brk[i]);
+ zend_access_path(cfg->loop_start[i], ctx);
+ zend_access_path(cfg->loop_cont[i], ctx);
+ zend_access_path(cfg->loop_brk[i], ctx);
}
}
@@ -523,7 +520,7 @@ static void zend_rebuild_access_path(zend_cfg *cfg, zend_op_array *op_array, int
int i;
for (i=0; i< op_array->last_try_catch; i++) {
if (!cfg->catch[i]->access) {
- zend_access_path(cfg->catch[i]);
+ zend_access_path(cfg->catch[i], ctx);
}
}
}
@@ -558,7 +555,7 @@ static void zend_rebuild_access_path(zend_cfg *cfg, zend_op_array *op_array, int
convert_to_string((v)); \
}
-static void strip_nop(zend_code_block *block)
+static void strip_nop(zend_code_block *block, zend_optimizer_ctx *ctx)
{
zend_op *opline = block->start_opline;
zend_op *end, *new_end;
@@ -568,7 +565,7 @@ static void strip_nop(zend_code_block *block)
if (block->len == 1) {
/* this block is all NOPs, join with following block */
if (block->follow_to) {
- delete_code_block(block);
+ delete_code_block(block, ctx);
}
return;
}
@@ -603,11 +600,11 @@ static void strip_nop(zend_code_block *block)
block->len = new_end - block->start_opline;
}
-static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array, char *used_ext TSRMLS_DC)
+static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array, char *used_ext, zend_cfg *cfg, zend_optimizer_ctx *ctx TSRMLS_DC)
{
zend_op *opline = block->start_opline;
zend_op *end, *last_op = NULL;
- zend_op **Tsource = NULL;
+ zend_op **Tsource = cfg->Tsource;
print_block(block, op_array->opcodes, "Opt ");
@@ -616,7 +613,7 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
if (block->len == 1) {
/* this block is all NOPs, join with following block */
if (block->follow_to) {
- delete_code_block(block);
+ delete_code_block(block, ctx);
}
return;
}
@@ -626,9 +623,7 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
}
/* we track data dependencies only insight a single basic block */
- if (op_array->T) {
- Tsource = ecalloc(op_array->last_var + op_array->T, sizeof(zend_op *));
- }
+ memset(Tsource, 0, (op_array->last_var + op_array->T) * sizeof(zend_op *));
opline = block->start_opline;
end = opline + block->len;
while ((op_array->T) && (opline < end)) {
@@ -1198,11 +1193,7 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
opline++;
}
- strip_nop(block);
-
- if (op_array->T) {
- efree(Tsource);
- }
+ strip_nop(block, ctx);
}
/* Rebuild plain (optimized) op_array from CFG */
@@ -1277,8 +1268,6 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array)
}
}
op_array->last_try_catch = j;
- efree(cfg->try);
- efree(cfg->catch);
}
/* adjust loop jump targets */
@@ -1289,9 +1278,6 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array)
op_array->brk_cont_array[i].cont = cfg->loop_cont[i]->start_opline - new_opcodes;
op_array->brk_cont_array[i].brk = cfg->loop_brk[i]->start_opline - new_opcodes;
}
- efree(cfg->loop_start);
- efree(cfg->loop_cont);
- efree(cfg->loop_brk);
}
/* adjust jump targets */
@@ -1337,7 +1323,7 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array)
#endif
}
-static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_array, zend_code_block *blocks TSRMLS_DC)
+static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_array, zend_code_block *blocks, zend_cfg *cfg, zend_optimizer_ctx *ctx TSRMLS_DC)
{
/* last_op is the last opcode of the current block */
zend_op *last_op = (block->start_opline + block->len - 1);
@@ -1364,7 +1350,7 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_arra
block->len--;
if (block->len == 0) {
/* this block is nothing but NOP now */
- delete_code_block(block);
+ delete_code_block(block, ctx);
}
break;
}
@@ -1473,7 +1459,7 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_arra
block->len--;
if(block->len == 0) {
/* this block is nothing but NOP now */
- delete_code_block(block);
+ delete_code_block(block, ctx);
}
break;
}
@@ -1665,10 +1651,8 @@ next_target:
if (var_num <= 0) {
return;
}
- same_t = ecalloc(var_num, sizeof(char));
- if (same_t == NULL) {
- return;
- }
+ same_t = cfg->same_t;
+ memset(same_t, 0, var_num);
same_t[VAR_NUM_EX(last_op->op1)] |= ZEND_OP1_TYPE(last_op);
same_t[VAR_NUM_EX(last_op->result)] |= ZEND_RESULT_TYPE(last_op);
target_block = block->op2_to;
@@ -1742,9 +1726,6 @@ next_target_ex:
}
ADD_SOURCE(block, block->op2_to);
}
- if (same_t != NULL) {
- efree(same_t);
- }
}
break;
@@ -1895,19 +1876,22 @@ next_target_znz:
/* Find a set of variables which are used outside of the block where they are
* defined. We won't apply some optimization patterns for such variables. */
-static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char *used_ext)
+static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char *used_ext, zend_optimizer_ctx *ctx)
{
zend_code_block *next_block = block->next;
char *usage;
char *defined_here;
+ void *checkpoint;
if (op_array->T == 0) {
/* shortcut - if no Ts, nothing to do */
return;
}
- usage = ecalloc(op_array->last_var + op_array->T, 1);
- defined_here = emalloc(op_array->last_var + op_array->T);
+ checkpoint = zend_arena_checkpoint(ctx->arena);
+ usage = zend_arena_alloc(&ctx->arena, op_array->last_var + op_array->T);
+ memset(usage, 0, op_array->last_var + op_array->T);
+ defined_here = zend_arena_alloc(&ctx->arena, op_array->last_var + op_array->T);
while (next_block) {
zend_op *opline = next_block->start_opline;
@@ -2053,18 +2037,18 @@ static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char *
block = block->next;
} /* end blocks */
- efree(defined_here);
- efree(usage);
+ zend_arena_release(&ctx->arena, checkpoint);
}
#define PASSES 3
-static void zend_block_optimization(zend_op_array *op_array TSRMLS_DC)
+static void zend_block_optimization(zend_op_array *op_array, zend_optimizer_ctx *ctx TSRMLS_DC)
{
zend_cfg cfg;
zend_code_block *cur_block;
int pass;
char *usage;
+ void *checkpoint;
#if DEBUG_BLOCKPASS
fprintf(stderr, "File %s func %s\n", op_array->filename, op_array->function_name? op_array->function_name : "main");
@@ -2078,24 +2062,34 @@ static void zend_block_optimization(zend_op_array *op_array TSRMLS_DC)
#endif
/* Build CFG */
- if (!find_code_blocks(op_array, &cfg)) {
+ checkpoint = zend_arena_checkpoint(ctx->arena);
+ if (!find_code_blocks(op_array, &cfg, ctx)) {
+ zend_arena_release(&ctx->arena, checkpoint);
return;
}
- zend_rebuild_access_path(&cfg, op_array, 0);
+ zend_rebuild_access_path(&cfg, op_array, 0, ctx);
/* full rebuild here to produce correct sources! */
- usage = emalloc(op_array->last_var + op_array->T);
+ if (op_array->last_var || op_array->T) {
+ cfg.Tsource = zend_arena_calloc(&ctx->arena, op_array->last_var + op_array->T, sizeof(zend_op *));
+ cfg.same_t = zend_arena_alloc(&ctx->arena, op_array->last_var + op_array->T);
+ usage = zend_arena_alloc(&ctx->arena, op_array->last_var + op_array->T);
+ } else {
+ cfg.Tsource = NULL;
+ cfg.same_t = NULL;
+ usage = NULL;
+ }
for (pass = 0; pass < PASSES; pass++) {
/* Compute data dependencies */
memset(usage, 0, op_array->last_var + op_array->T);
- zend_t_usage(cfg.blocks, op_array, usage);
+ zend_t_usage(cfg.blocks, op_array, usage, ctx);
/* optimize each basic block separately */
for (cur_block = cfg.blocks; cur_block; cur_block = cur_block->next) {
if (!cur_block->access) {
continue;
}
- zend_optimize_block(cur_block, op_array, usage TSRMLS_CC);
+ zend_optimize_block(cur_block, op_array, usage, &cfg, ctx TSRMLS_CC);
}
/* Jump optimization for each block */
@@ -2103,19 +2097,19 @@ static void zend_block_optimization(zend_op_array *op_array TSRMLS_DC)
if (!cur_block->access) {
continue;
}
- zend_jmp_optimization(cur_block, op_array, cfg.blocks TSRMLS_CC);
+ zend_jmp_optimization(cur_block, op_array, cfg.blocks, &cfg, ctx TSRMLS_CC);
}
/* Eliminate unreachable basic blocks */
- zend_rebuild_access_path(&cfg, op_array, 1);
+ zend_rebuild_access_path(&cfg, op_array, 1, ctx);
}
memset(usage, 0, op_array->last_var + op_array->T);
- zend_t_usage(cfg.blocks, op_array, usage);
+ zend_t_usage(cfg.blocks, op_array, usage, ctx);
assemble_code_blocks(&cfg, op_array);
- efree(usage);
/* Destroy CFG */
+/* ???A
for (cur_block = cfg.blocks; cur_block; cur_block = cur_block->next) {
zend_block_source *cs = cur_block->sources;
while (cs) {
@@ -2124,5 +2118,6 @@ static void zend_block_optimization(zend_op_array *op_array TSRMLS_DC)
cs = n;
}
}
- efree(cfg.blocks);
+*/
+ zend_arena_release(&ctx->arena, checkpoint);
}
diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c
index aad6243e0a..6300d0fcfd 100644
--- a/ext/opcache/Optimizer/compact_literals.c
+++ b/ext/opcache/Optimizer/compact_literals.c
@@ -87,7 +87,7 @@ static void optimizer_literal_class_info(literal_info *info,
}
}
-static void optimizer_compact_literals(zend_op_array *op_array TSRMLS_DC)
+static void optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx *ctx TSRMLS_DC)
{
zend_op *opline, *end;
int i, j, n, *map, cache_slots;
@@ -98,9 +98,10 @@ static void optimizer_compact_literals(zend_op_array *op_array TSRMLS_DC)
int l_true = -1;
HashTable hash;
zend_string *key = NULL;
+ void *checkpoint = zend_arena_checkpoint(ctx->arena);
if (op_array->last_literal) {
- info = (literal_info*)ecalloc(op_array->last_literal, sizeof(literal_info));
+ info = (literal_info*)zend_arena_calloc(&ctx->arena, op_array->last_literal, sizeof(literal_info));
/* Mark literals of specific types */
opline = op_array->opcodes;
@@ -282,7 +283,9 @@ static void optimizer_compact_literals(zend_op_array *op_array TSRMLS_DC)
/* Merge equal constants */
j = 0; cache_slots = 0;
zend_hash_init(&hash, 16, NULL, NULL, 0);
- map = (int*)ecalloc(op_array->last_literal, sizeof(int));
+ map = (int*)zend_arena_alloc(&ctx->arena, op_array->last_literal * sizeof(int));
+//???A
+memset(map, 0, op_array->last_literal * sizeof(int));
for (i = 0; i < op_array->last_literal; i++) {
if (!info[i].flags) {
/* unsed literal */
@@ -440,8 +443,7 @@ static void optimizer_compact_literals(zend_op_array *op_array TSRMLS_DC)
}
opline++;
}
- efree(map);
- efree(info);
+ zend_arena_release(&ctx->arena, checkpoint);
#if DEBUG_COMPACT_LITERALS
{
diff --git a/ext/opcache/Optimizer/optimize_func_calls.c b/ext/opcache/Optimizer/optimize_func_calls.c
index f9ae14290f..cd27704de5 100644
--- a/ext/opcache/Optimizer/optimize_func_calls.c
+++ b/ext/opcache/Optimizer/optimize_func_calls.c
@@ -8,16 +8,12 @@ typedef struct _optimizer_call_info {
zend_op *opline;
} optimizer_call_info;
-static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script *script TSRMLS_DC) {
+static void optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx TSRMLS_DC) {
zend_op *opline = op_array->opcodes;
zend_op *end = opline + op_array->last;
int call = 0;
-#if ZEND_EXTENSION_API_NO > PHP_5_4_X_API_NO
- optimizer_call_info *call_stack = ecalloc(op_array->nested_calls + 1, sizeof(optimizer_call_info));
-#else
- int stack_size = 4;
- optimizer_call_info *call_stack = ecalloc(stack_size, sizeof(optimizer_call_info));
-#endif
+ void *checkpoint = zend_arena_checkpoint(ctx->arena);
+ optimizer_call_info *call_stack = zend_arena_calloc(&ctx->arena, op_array->nested_calls + 1, sizeof(optimizer_call_info));
while (opline < end) {
switch (opline->opcode) {
@@ -26,7 +22,7 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
if (ZEND_OP2_TYPE(opline) == IS_CONST) {
zend_function *func;
zval *function_name = &op_array->literals[opline->op2.constant + 1];
- if ((func = zend_hash_find_ptr(&script->function_table,
+ if ((func = zend_hash_find_ptr(&ctx->script->function_table,
Z_STR_P(function_name))) != NULL) {
call_stack[call].func = func;
}
@@ -37,13 +33,6 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
case ZEND_INIT_STATIC_METHOD_CALL:
call_stack[call].opline = opline;
call++;
-#if ZEND_EXTENSION_API_NO < PHP_5_5_X_API_NO
- if (call == stack_size) {
- stack_size += 4;
- call_stack = erealloc(call_stack, sizeof(optimizer_call_info) * stack_size);
- memset(call_stack + 4, 0, 4 * sizeof(optimizer_call_info));
- }
-#endif
break;
case ZEND_DO_FCALL_BY_NAME:
call--;
@@ -137,6 +126,6 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
opline++;
}
- efree(call_stack);
+ zend_arena_release(&ctx->arena, checkpoint);
}
#endif
diff --git a/ext/opcache/Optimizer/optimize_temp_vars_5.c b/ext/opcache/Optimizer/optimize_temp_vars_5.c
index 77e07a586e..af193802dd 100644
--- a/ext/opcache/Optimizer/optimize_temp_vars_5.c
+++ b/ext/opcache/Optimizer/optimize_temp_vars_5.c
@@ -70,7 +70,7 @@ static const char op_const_means_class[256] = {
max = i; \
}
-static void optimize_temporary_variables(zend_op_array *op_array)
+static void optimize_temporary_variables(zend_op_array *op_array, zend_optimizer_ctx *ctx)
{
int T = op_array->T;
int offset = op_array->last_var;
@@ -83,11 +83,12 @@ static void optimize_temporary_variables(zend_op_array *op_array)
int i;
int max = -1;
int var_to_free = -1;
+ void *checkpoint = zend_arena_checkpoint(ctx->arena);
- taken_T = (char *) emalloc(T);
- start_of_T = (zend_op **) emalloc(T * sizeof(zend_op *));
- valid_T = (char *) emalloc(T);
- map_T = (int *) emalloc(T * sizeof(int));
+ taken_T = (char *) zend_arena_alloc(&ctx->arena, T);
+ start_of_T = (zend_op **) zend_arena_alloc(&ctx->arena, T * sizeof(zend_op *));
+ valid_T = (char *) zend_arena_alloc(&ctx->arena, T);
+ map_T = (int *) zend_arena_alloc(&ctx->arena, T * sizeof(int));
end = op_array->opcodes;
opline = &op_array->opcodes[op_array->last - 1];
@@ -238,9 +239,6 @@ static void optimize_temporary_variables(zend_op_array *op_array)
opline--;
}
- efree(taken_T);
- efree(start_of_T);
- efree(valid_T);
- efree(map_T);
+ zend_arena_release(&ctx->arena, checkpoint);
op_array->T = max + 1;
}
diff --git a/ext/opcache/Optimizer/pass1_5.c b/ext/opcache/Optimizer/pass1_5.c
index ab41fa92f7..73fa0d02f9 100644
--- a/ext/opcache/Optimizer/pass1_5.c
+++ b/ext/opcache/Optimizer/pass1_5.c
@@ -16,7 +16,7 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) {
int i = 0;
zend_op *opline = op_array->opcodes;
zend_op *end = opline + op_array->last;
- zend_bool collect_constants = (op_array == &script->main_op_array);
+ zend_bool collect_constants = (op_array == &ctx->script->main_op_array);
while (opline < end) {
switch (opline->opcode) {
@@ -245,7 +245,7 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) {
zval c;
if (!zend_get_persistent_constant(Z_STR(ZEND_OP2_LITERAL(opline)), &c, 1 TSRMLS_CC)) {
- if (!*constants || !zend_optimizer_get_collected_constant(*constants, &ZEND_OP2_LITERAL(opline), &c)) {
+ if (!ctx->constants || !zend_optimizer_get_collected_constant(ctx->constants, &ZEND_OP2_LITERAL(opline), &c)) {
break;
}
}
@@ -334,7 +334,7 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) {
(opline-2)->opcode == ZEND_SEND_VAL &&
ZEND_OP1_TYPE(opline-2) == IS_CONST &&
Z_TYPE(ZEND_OP1_LITERAL(opline-2)) == IS_STRING) {
- zend_optimizer_collect_constant(constants, &ZEND_OP1_LITERAL(opline-2), &ZEND_OP1_LITERAL(opline-1));
+ zend_optimizer_collect_constant(ctx, &ZEND_OP1_LITERAL(opline-2), &ZEND_OP1_LITERAL(opline-1));
break;
} else {
/* don't colllect constants after any other function call */
@@ -452,7 +452,7 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) {
if (collect_constants &&
Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_STRING &&
Z_TYPE(ZEND_OP2_LITERAL(opline)) <= IS_STRING) {
- zend_optimizer_collect_constant(constants, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERAL(opline));
+ zend_optimizer_collect_constant(ctx, &ZEND_OP1_LITERAL(opline), &ZEND_OP2_LITERAL(opline));
}
break;
#endif
diff --git a/ext/opcache/Optimizer/pass5.c b/ext/opcache/Optimizer/pass5.c
index b0d651a5fc..ba36da5990 100644
--- a/ext/opcache/Optimizer/pass5.c
+++ b/ext/opcache/Optimizer/pass5.c
@@ -1,3 +1,3 @@
if (ZEND_OPTIMIZER_PASS_5 & OPTIMIZATION_LEVEL) {
- zend_block_optimization(op_array TSRMLS_CC);
+ zend_block_optimization(op_array, ctx TSRMLS_CC);
}
diff --git a/ext/opcache/Optimizer/pass9.c b/ext/opcache/Optimizer/pass9.c
index 586160c14d..ec54dc6c1d 100644
--- a/ext/opcache/Optimizer/pass9.c
+++ b/ext/opcache/Optimizer/pass9.c
@@ -4,5 +4,5 @@
*/
if (ZEND_OPTIMIZER_PASS_9 & OPTIMIZATION_LEVEL) {
- optimize_temporary_variables(op_array);
+ optimize_temporary_variables(op_array, ctx);
}
diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c
index 029f0846dd..2ea6544e23 100644
--- a/ext/opcache/Optimizer/zend_optimizer.c
+++ b/ext/opcache/Optimizer/zend_optimizer.c
@@ -35,16 +35,16 @@ static void zend_optimizer_zval_dtor_wrapper(zval *zvalue)
zval_dtor(zvalue);
}
-static void zend_optimizer_collect_constant(HashTable **constants, zval *name, zval* value)
+static void zend_optimizer_collect_constant(zend_optimizer_ctx *ctx, zval *name, zval* value)
{
zval val;
- if (!*constants) {
- *constants = emalloc(sizeof(HashTable));
- zend_hash_init(*constants, 16, NULL, zend_optimizer_zval_dtor_wrapper, 0);
+ if (!ctx->constants) {
+ ctx->constants = zend_arena_alloc(&ctx->arena, sizeof(HashTable));
+ zend_hash_init(ctx->constants, 16, NULL, zend_optimizer_zval_dtor_wrapper, 0);
}
ZVAL_DUP(&val, value);
- zend_hash_add(*constants, Z_STR_P(name), &val);
+ zend_hash_add(ctx->constants, Z_STR_P(name), &val);
}
static int zend_optimizer_get_collected_constant(HashTable *constants, zval *name, zval* value)
@@ -425,9 +425,8 @@ static void replace_tmp_by_const(zend_op_array *op_array,
#include "Optimizer/compact_literals.c"
#include "Optimizer/optimize_func_calls.c"
-static void zend_optimize(zend_op_array *op_array,
- zend_persistent_script *script,
- HashTable **constants TSRMLS_DC)
+static void zend_optimize(zend_op_array *op_array,
+ zend_optimizer_ctx *ctx TSRMLS_DC)
{
if (op_array->type == ZEND_EVAL_CODE ||
(op_array->fn_flags & ZEND_ACC_INTERACTIVE)) {
@@ -462,7 +461,7 @@ static void zend_optimize(zend_op_array *op_array,
* - INIT_FCALL_BY_NAME -> DO_FCALL
*/
if (ZEND_OPTIMIZER_PASS_4 & OPTIMIZATION_LEVEL) {
- optimize_func_calls(op_array, script TSRMLS_CC);
+ optimize_func_calls(op_array, ctx TSRMLS_CC);
}
#endif
@@ -486,14 +485,13 @@ static void zend_optimize(zend_op_array *op_array,
* - Compact literals table
*/
if (ZEND_OPTIMIZER_PASS_11 & OPTIMIZATION_LEVEL) {
- optimizer_compact_literals(op_array TSRMLS_CC);
+ optimizer_compact_literals(op_array, ctx TSRMLS_CC);
}
#endif
}
-static void zend_accel_optimize(zend_op_array *op_array,
- zend_persistent_script *script,
- HashTable **constants TSRMLS_DC)
+static void zend_accel_optimize(zend_op_array *op_array,
+ zend_optimizer_ctx *ctx TSRMLS_DC)
{
zend_op *opline, *end;
@@ -543,7 +541,7 @@ static void zend_accel_optimize(zend_op_array *op_array,
}
/* Do actual optimizations */
- zend_optimize(op_array, script, constants TSRMLS_CC);
+ zend_optimize(op_array, ctx TSRMLS_CC);
/* Redo pass_two() */
opline = op_array->opcodes;
@@ -596,17 +594,21 @@ int zend_accel_script_optimize(zend_persistent_script *script TSRMLS_DC)
{
uint idx, j;
Bucket *p, *q;
- HashTable *constants = NULL;
zend_class_entry *ce;
zend_op_array *op_array;
+ zend_optimizer_ctx ctx;
- zend_accel_optimize(&script->main_op_array, script, &constants TSRMLS_CC);
+ ctx.arena = zend_arena_create(64 * 1024);
+ ctx.script = script;
+ ctx.constants = NULL;
+
+ zend_accel_optimize(&script->main_op_array, &ctx TSRMLS_CC);
for (idx = 0; idx < script->function_table.nNumUsed; idx++) {
p = script->function_table.arData + idx;
if (Z_TYPE(p->val) == IS_UNDEF) continue;
op_array = (zend_op_array*)Z_PTR(p->val);
- zend_accel_optimize(op_array, script, &constants TSRMLS_CC);
+ zend_accel_optimize(op_array, &ctx TSRMLS_CC);
}
for (idx = 0; idx < script->class_table.nNumUsed; idx++) {
@@ -618,7 +620,7 @@ int zend_accel_script_optimize(zend_persistent_script *script TSRMLS_DC)
if (Z_TYPE(q->val) == IS_UNDEF) continue;
op_array = (zend_op_array*)Z_PTR(q->val);
if (op_array->scope == ce) {
- zend_accel_optimize(op_array, script, &constants TSRMLS_CC);
+ zend_accel_optimize(op_array, &ctx TSRMLS_CC);
} else if (op_array->type == ZEND_USER_FUNCTION) {
zend_op_array *orig_op_array;
if ((orig_op_array = zend_hash_find_ptr(&op_array->scope->function_table, q->key)) != NULL) {
@@ -630,10 +632,10 @@ int zend_accel_script_optimize(zend_persistent_script *script TSRMLS_DC)
}
}
- if (constants) {
- zend_hash_destroy(constants);
- efree(constants);
+ if (ctx.constants) {
+ zend_hash_destroy(ctx.constants);
}
+ zend_arena_destroy(ctx.arena);
return 1;
}
diff --git a/ext/opcache/Optimizer/zend_optimizer_internal.h b/ext/opcache/Optimizer/zend_optimizer_internal.h
index 049036c1f4..0ae3feb2ee 100644
--- a/ext/opcache/Optimizer/zend_optimizer_internal.h
+++ b/ext/opcache/Optimizer/zend_optimizer_internal.h
@@ -55,6 +55,12 @@
# define SAME_VAR(op1, op2) (((op1.op_type == IS_VAR && op2.op_type == IS_VAR) || (op1.op_type == IS_TMP_VAR && op2.op_type == IS_TMP_VAR)) && op1.u.var == op2.u.var)
#endif
+typedef struct _zend_optimizer_ctx {
+ zend_arena *arena;
+ zend_persistent_script *script;
+ HashTable *constants;
+} zend_optimizer_ctx;
+
typedef struct _zend_code_block zend_code_block;
typedef struct _zend_block_source zend_block_source;
@@ -79,6 +85,8 @@ typedef struct _zend_cfg {
zend_code_block **loop_start;
zend_code_block **loop_cont;
zend_code_block **loop_brk;
+ zend_op **Tsource;
+ char *same_t;
} zend_cfg;
struct _zend_block_source {
diff --git a/ext/openssl/tests/openssl_spki_verify.phpt b/ext/openssl/tests/openssl_spki_verify.phpt
index 1ee573fd3f..52dc8e2045 100644
--- a/ext/openssl/tests/openssl_spki_verify.phpt
+++ b/ext/openssl/tests/openssl_spki_verify.phpt
@@ -17,9 +17,7 @@ $ksize = array('1024'=>1024,
'4096'=>4096);
/* array of available hashings to test */
-$algo = array('md4'=>OPENSSL_ALGO_MD4,
- 'md5'=>OPENSSL_ALGO_MD5,
- 'sha1'=>OPENSSL_ALGO_SHA1,
+$algo = array('sha1'=>OPENSSL_ALGO_SHA1,
'sha224'=>OPENSSL_ALGO_SHA224,
'sha256'=>OPENSSL_ALGO_SHA256,
'sha384'=>OPENSSL_ALGO_SHA384,
@@ -90,16 +88,4 @@ bool(false)
bool(true)
bool(false)
bool(true)
-bool(false)
-bool(true)
-bool(false)
-bool(true)
-bool(false)
-bool(true)
-bool(false)
-bool(true)
-bool(false)
-bool(true)
-bool(false)
-bool(true)
bool(false) \ No newline at end of file
diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c
index b9b5044a8e..9cd205f4eb 100644
--- a/ext/pdo/pdo_sql_parser.c
+++ b/ext/pdo/pdo_sql_parser.c
@@ -4,7 +4,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re
index be38dfd29c..76ac3d115a 100644
--- a/ext/pdo/pdo_sql_parser.re
+++ b/ext/pdo/pdo_sql_parser.re
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/session/session.c b/ext/session/session.c
index c39e954ded..529e6eee2d 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -51,6 +51,7 @@
#include "ext/standard/php_smart_str.h"
#include "ext/standard/url.h"
#include "ext/standard/basic_functions.h"
+#include "ext/standard/head.h"
#include "mod_files.h"
#include "mod_user.h"
@@ -1254,14 +1255,6 @@ static int php_session_cache_limiter(TSRMLS_D) /* {{{ */
* Cookie Management *
********************* */
-#define COOKIE_SET_COOKIE "Set-Cookie: "
-#define COOKIE_EXPIRES "; expires="
-#define COOKIE_MAX_AGE "; Max-Age="
-#define COOKIE_PATH "; path="
-#define COOKIE_DOMAIN "; domain="
-#define COOKIE_SECURE "; secure"
-#define COOKIE_HTTPONLY "; HttpOnly"
-
/*
* Remove already sent session ID cookie.
* It must be directly removed from SG(sapi_header) because sapi_add_header_ex()
@@ -1327,7 +1320,7 @@ static void php_session_send_cookie(TSRMLS_D) /* {{{ */
e_session_name = php_url_encode(PS(session_name), strlen(PS(session_name)));
e_id = php_url_encode(PS(id)->val, PS(id)->len);
- smart_str_appends(&ncookie, COOKIE_SET_COOKIE);
+ smart_str_appendl(&ncookie, "Set-Cookie: ", sizeof("Set-Cookie: ")-1);
smart_str_appendl(&ncookie, e_session_name->val, e_session_name->len);
smart_str_appendc(&ncookie, '=');
smart_str_appendl(&ncookie, e_id->val, e_id->len);
diff --git a/ext/sockets/sendrecvmsg.c b/ext/sockets/sendrecvmsg.c
index 4ddae3f6ff..72c7286eb5 100644
--- a/ext/sockets/sendrecvmsg.c
+++ b/ext/sockets/sendrecvmsg.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2012 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/sockets/windows_common.h b/ext/sockets/windows_common.h
index 3a9cb59129..9cc01ae129 100644
--- a/ext/sockets/windows_common.h
+++ b/ext/sockets/windows_common.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2012 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 2fa7a53dd3..3e688aaf88 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -1781,7 +1781,6 @@ SPL_METHOD(Array, unserialize)
}
if (buf_len == 0) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Empty serialized string cannot be empty");
return;
}
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index 70f2d84128..929fdd8798 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -1168,7 +1168,6 @@ SPL_METHOD(SplDoublyLinkedList, unserialize)
}
if (buf_len == 0) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Serialized string cannot be empty");
return;
}
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 4ccd345df1..a13a7db155 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -807,7 +807,6 @@ SPL_METHOD(SplObjectStorage, unserialize)
}
if (buf_len == 0) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Empty serialized string cannot be empty");
return;
}
diff --git a/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt b/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt
index 75d8a41321..4c446c82b9 100644
--- a/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt
+++ b/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt
@@ -1,5 +1,5 @@
--TEST--
-ArrayObject: test that you cannot unserialize a empty string
+ArrayObject: test that you can unserialize a empty string
--CREDITS--
Havard Eide <nucleuz@gmail.com>
#PHPTestFest2009 Norway 2009-06-09 \o/
@@ -8,9 +8,6 @@ Havard Eide <nucleuz@gmail.com>
$a = new ArrayObject(array());
$a->unserialize("");
?>
+Done
--EXPECTF--
-Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Empty serialized string cannot be empty' in %s.php:%d
-Stack trace:
-#0 %s(%d): ArrayObject->unserialize('')
-#1 {main}
- thrown in %s.php on line %d
+Done
diff --git a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt
index 4c2dd75e14..617f85e63c 100644
--- a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt
+++ b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt
@@ -1,5 +1,5 @@
--TEST--
-Check that SplObjectStorage::unserialize throws exception when NULL passed
+Check that SplObjectStorage::unserialize doesn't throws exception when NULL passed
--CREDITS--
PHPNW Testfest 2009 - Simon Westcott (swestcott@gmail.com)
--FILE--
@@ -14,6 +14,6 @@ try {
}
?>
+Done
--EXPECTF--
-Empty serialized string cannot be empty
-
+Done
diff --git a/ext/standard/array.c b/ext/standard/array.c
index b8b57d7cf4..e1113a8ed5 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -331,7 +331,7 @@ PHP_FUNCTION(count)
RETVAL_LONG(zval_get_long(&retval));
zval_ptr_dtor(&retval);
}
- zval_dtor(&mode_zv);
+ zval_ptr_dtor(&mode_zv);
return;
}
#endif
diff --git a/ext/standard/head.c b/ext/standard/head.c
index 7c4b963285..ad82b9fbbf 100644
--- a/ext/standard/head.c
+++ b/ext/standard/head.c
@@ -124,7 +124,7 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t
if (expires > 0) {
const char *p;
char tsdelta[13];
- strlcat(cookie, "; expires=", len + 100);
+ strlcat(cookie, COOKIE_EXPIRES, len + 100);
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
/* check to make sure that the year does not exceed 4 digits in length */
p = zend_memrchr(dt->val, '-', dt->len);
@@ -139,7 +139,7 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t
STR_FREE(dt);
snprintf(tsdelta, sizeof(tsdelta), "%li", (long) difftime(expires, time(NULL)));
- strlcat(cookie, "; Max-Age=", len + 100);
+ strlcat(cookie, COOKIE_MAX_AGE, len + 100);
strlcat(cookie, tsdelta, len + 100);
}
}
@@ -149,18 +149,18 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t
}
if (path && path_len > 0) {
- strlcat(cookie, "; path=", len + 100);
+ strlcat(cookie, COOKIE_PATH, len + 100);
strlcat(cookie, path, len + 100);
}
if (domain && domain_len > 0) {
- strlcat(cookie, "; domain=", len + 100);
+ strlcat(cookie, COOKIE_DOMAIN, len + 100);
strlcat(cookie, domain, len + 100);
}
if (secure) {
- strlcat(cookie, "; secure", len + 100);
+ strlcat(cookie, COOKIE_SECURE, len + 100);
}
if (httponly) {
- strlcat(cookie, "; httponly", len + 100);
+ strlcat(cookie, COOKIE_HTTPONLY, len + 100);
}
ctr.line = cookie;
diff --git a/ext/standard/head.h b/ext/standard/head.h
index efca9b8637..59b1518676 100644
--- a/ext/standard/head.h
+++ b/ext/standard/head.h
@@ -21,6 +21,13 @@
#ifndef HEAD_H
#define HEAD_H
+#define COOKIE_EXPIRES "; expires="
+#define COOKIE_MAX_AGE "; Max-Age="
+#define COOKIE_DOMAIN "; domain="
+#define COOKIE_PATH "; path="
+#define COOKIE_SECURE "; secure"
+#define COOKIE_HTTPONLY "; HttpOnly"
+
extern PHP_RINIT_FUNCTION(head);
PHP_FUNCTION(header);
PHP_FUNCTION(header_remove);
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index 7cfc07ed25..2b10370710 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -726,10 +726,11 @@ finish:
if (!strncasecmp(http_header_line, "Location: ", 10)) {
if (context && (tmpzval = php_stream_context_get_option(context, "http", "follow_location")) != NULL) {
follow_location = zval_get_long(tmpzval);
- } else if (!((response_code >= 300 && response_code < 304) || 307 == response_code)) {
+ } else if (!(response_code >= 300 && response_code < 304 || 307 == response_code || 308 == response_code)) {
/* we shouldn't redirect automatically
if follow_location isn't set and response_code not in (300, 301, 302, 303 and 307)
- see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1 */
+ see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1
+ RFC 7238 defines 308: http://tools.ietf.org/html/rfc7238 */
follow_location = 0;
}
strlcpy(location, http_header_line + 10, sizeof(location));
diff --git a/ext/standard/tests/general_functions/header_redirection_001.phpt b/ext/standard/tests/general_functions/header_redirection_001.phpt
new file mode 100644
index 0000000000..ecf57ec54a
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_001.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Location: headers change the status code
+--CGI--
+--FILE--
+<?php
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 302 Moved Temporarily
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_002.phpt b/ext/standard/tests/general_functions/header_redirection_002.phpt
new file mode 100644
index 0000000000..2bf6dec510
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_002.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers override non-201 and 3xx response codes
+--CGI--
+--FILE--
+<?php
+header("HTTP/1.1 418 I'm a Teapot");
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 302 Moved Temporarily
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_003.phpt b/ext/standard/tests/general_functions/header_redirection_003.phpt
new file mode 100644
index 0000000000..678e3143ac
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_003.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Location: headers respect the header() response code parameter
+--CGI--
+--FILE--
+<?php
+header('Location: http://example.com/', true, 404);
+?>
+--EXPECTHEADERS--
+Status: 404 Not Found
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_004.phpt b/ext/standard/tests/general_functions/header_redirection_004.phpt
new file mode 100644
index 0000000000..678e3143ac
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_004.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Location: headers respect the header() response code parameter
+--CGI--
+--FILE--
+<?php
+header('Location: http://example.com/', true, 404);
+?>
+--EXPECTHEADERS--
+Status: 404 Not Found
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_005.phpt b/ext/standard/tests/general_functions/header_redirection_005.phpt
new file mode 100644
index 0000000000..fc3e0f7af8
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_005.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 201 response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 201 Created');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 201 Created
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_006.phpt b/ext/standard/tests/general_functions/header_redirection_006.phpt
new file mode 100644
index 0000000000..5fb52096ce
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_006.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 300 Multiple Choices response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 300 Multiple Choices');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 300 Multiple Choices
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_007.phpt b/ext/standard/tests/general_functions/header_redirection_007.phpt
new file mode 100644
index 0000000000..6769b080fb
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_007.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 301 Moved Permanently response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 301 Moved Permanently');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 301 Moved Permanently
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_008.phpt b/ext/standard/tests/general_functions/header_redirection_008.phpt
new file mode 100644
index 0000000000..50993707c1
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_008.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 302 Found response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 302 Found');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 302 Found
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_009.phpt b/ext/standard/tests/general_functions/header_redirection_009.phpt
new file mode 100644
index 0000000000..f8d27f9bfd
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_009.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 303 See Other response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 303 See Other');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 303 See Other
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_010.phpt b/ext/standard/tests/general_functions/header_redirection_010.phpt
new file mode 100644
index 0000000000..316112dde7
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_010.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 304 Not Modified response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 304 Not Modified');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 304 Not Modified
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_011.phpt b/ext/standard/tests/general_functions/header_redirection_011.phpt
new file mode 100644
index 0000000000..bfd8789639
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_011.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 305 Use Proxy response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 305 Use Proxy');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 305 Use Proxy
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_012.phpt b/ext/standard/tests/general_functions/header_redirection_012.phpt
new file mode 100644
index 0000000000..657028b09c
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_012.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 307 Temporary Redirect response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 307 Temporary Redirect');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 307 Temporary Redirect
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_013.phpt b/ext/standard/tests/general_functions/header_redirection_013.phpt
new file mode 100644
index 0000000000..4dce0d00fa
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_013.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 308 Permanent Redirect response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 308 Permanent Redirect');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 308 Permanent Redirect
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/general_functions/header_redirection_014.phpt b/ext/standard/tests/general_functions/header_redirection_014.phpt
new file mode 100644
index 0000000000..a5fb6e8fec
--- /dev/null
+++ b/ext/standard/tests/general_functions/header_redirection_014.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Location: headers do not override the 399 Choose Your Own Adventure response code
+--CGI--
+--FILE--
+<?php
+header('HTTP/1.1 399 Choose Your Own Adventure');
+header('Location: http://example.com/');
+?>
+--EXPECTHEADERS--
+Status: 399 Choose Your Own Adventure
+Location: http://example.com/
+--EXPECT--
diff --git a/ext/standard/tests/http/bug67430.phpt b/ext/standard/tests/http/bug67430.phpt
new file mode 100644
index 0000000000..d4474fdf5d
--- /dev/null
+++ b/ext/standard/tests/http/bug67430.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Bug #67430 (http:// wrapper doesn't follow 308 redirects)
+--INI--
+allow_url_fopen=1
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--FILE--
+<?php
+require 'server.inc';
+
+function do_test($follow) {
+ $options = [
+ 'http' => [
+ 'method' => 'POST',
+ 'follow_location' => $follow,
+ ],
+ ];
+
+ $ctx = stream_context_create($options);
+
+ $responses = [
+ "data://text/plain,HTTP/1.1 308\r\nLocation: /foo\r\n\r\n",
+ "data://text/plain,HTTP/1.1 200\r\nConnection: close\r\n\r\n",
+ ];
+ $pid = http_server('tcp://127.0.0.1:12342', $responses, $output);
+
+ $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $ctx);
+ fseek($output, 0, SEEK_SET);
+ echo stream_get_contents($output);
+
+ http_server_kill($pid);
+}
+
+do_test(true);
+do_test(false);
+
+?>
+Done
+--EXPECT--
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+
+GET /foo HTTP/1.0
+Host: 127.0.0.1:12342
+
+POST / HTTP/1.0
+Host: 127.0.0.1:12342
+
+Done
diff --git a/ext/standard/tests/network/setcookie.phpt b/ext/standard/tests/network/setcookie.phpt
index a2a72e7177..3b8e551834 100644
--- a/ext/standard/tests/network/setcookie.phpt
+++ b/ext/standard/tests/network/setcookie.phpt
@@ -29,7 +29,7 @@ $expected = array(
'Set-Cookie: name=value; path=/path/',
'Set-Cookie: name=value; domain=domain.tld',
'Set-Cookie: name=value; secure',
- 'Set-Cookie: name=value; httponly'
+ 'Set-Cookie: name=value; HttpOnly'
);
$headers = headers_list();
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c
index 23b1f3fb70..fc865b64a7 100644
--- a/ext/standard/url_scanner_ex.c
+++ b/ext/standard/url_scanner_ex.c
@@ -4,7 +4,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re
index 38ed0633c3..240e504d6d 100644
--- a/ext/standard/url_scanner_ex.re
+++ b/ext/standard/url_scanner_ex.re
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index e1d899587c..0a5cbaa2cb 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -4,7 +4,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index 70bff6704b..af9da9c6a8 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/header b/header
index bb5c17d0c5..fcbcaea9e3 100644
--- a/header
+++ b/header
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/main/SAPI.c b/main/SAPI.c
index 49bd6ffbfc..e587f7aaf7 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -823,7 +823,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC)
STR_RELEASE(key);
} else if (!STRCASECMP(header_line, "Location")) {
if ((SG(sapi_headers).http_response_code < 300 ||
- SG(sapi_headers).http_response_code > 307) &&
+ SG(sapi_headers).http_response_code > 399) &&
SG(sapi_headers).http_response_code != 201) {
/* Return a Found Redirect if one is not already specified */
if (http_response_code) { /* user specified redirect code */
diff --git a/sapi/cli/php.1.in b/sapi/cli/php.1.in
index 8672b3ba33..4d536df53c 100644
--- a/sapi/cli/php.1.in
+++ b/sapi/cli/php.1.in
@@ -1,4 +1,4 @@
-.TH PHP 1 "2013" "The PHP Group" "Scripting Language"
+.TH PHP 1 "2014" "The PHP Group" "Scripting Language"
.SH NAME
php \- PHP Command Line Interface 'CLI'
.P
@@ -454,7 +454,7 @@ contributors all around the world.
.SH VERSION INFORMATION
This manpage describes \fBphp\fP, version @PHP_VERSION@.
.SH COPYRIGHT
-Copyright \(co 1997\-2013 The PHP Group
+Copyright \(co 1997\-2014 The PHP Group
.LP
This source file is subject to version 3.01 of the PHP license,
that is bundled with this package in the file LICENSE, and is
diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c
index 0eab71c868..85881bcab5 100644
--- a/sapi/cli/php_cli_server.c
+++ b/sapi/cli/php_cli_server.c
@@ -220,6 +220,7 @@ static php_cli_server_http_response_status_code_pair status_map[] = {
{ 304, "Not Modified" },
{ 305, "Use Proxy" },
{ 307, "Temporary Redirect" },
+ { 308, "Permanent Redirect" },
{ 400, "Bad Request" },
{ 401, "Unauthorized" },
{ 402, "Payment Required" },
@@ -238,6 +239,7 @@ static php_cli_server_http_response_status_code_pair status_map[] = {
{ 415, "Unsupported Media Type" },
{ 416, "Requested Range Not Satisfiable" },
{ 417, "Expectation Failed" },
+ { 426, "Upgrade Required" },
{ 428, "Precondition Required" },
{ 429, "Too Many Requests" },
{ 431, "Request Header Fields Too Large" },
diff --git a/sapi/cli/tests/bug67429.phpt b/sapi/cli/tests/bug67429.phpt
new file mode 100644
index 0000000000..856946b29d
--- /dev/null
+++ b/sapi/cli/tests/bug67429.phpt
@@ -0,0 +1,49 @@
+--TEST--
+FR #67429 (CLI server is missing some new HTTP response codes)
+--SKIPIF--
+<?php
+include "skipif.inc";
+?>
+--FILE--
+<?php
+include "php_cli_server.inc";
+
+foreach ([308, 426] as $code) {
+ php_cli_server_start(<<<PHP
+http_response_code($code);
+PHP
+ );
+
+ list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
+ $port = intval($port)?:80;
+
+ $fp = fsockopen($host, $port, $errno, $errstr, 0.5);
+ if (!$fp) {
+ die("connect failed");
+ }
+
+ if(fwrite($fp, <<<HEADER
+GET / HTTP/1.1
+
+
+HEADER
+ )) {
+ while (!feof($fp)) {
+ echo fgets($fp);
+ }
+ }
+
+ fclose($fp);
+}
+?>
+--EXPECTF--
+HTTP/1.1 308 Permanent Redirect
+Connection: close
+X-Powered-By: %s
+Content-type: text/html; charset=UTF-8
+
+HTTP/1.1 426 Upgrade Required
+Connection: close
+X-Powered-By: %s
+Content-type: text/html; charset=UTF-8
+
diff --git a/sapi/continuity/capi.c b/sapi/continuity/capi.c
index 87fd9328f2..30d10ed0a0 100644
--- a/sapi/continuity/capi.c
+++ b/sapi/continuity/capi.c
@@ -462,7 +462,7 @@ int phpFinit(lstTset * opt)
core_globals = ts_resource(core_globals_id);
logFmsg(0, "mod/php: PHP Interface v3 (module)");
- logFmsg(0, "mod/php: Copyright (c) 1999-2013 The PHP Group. All rights reserved.");
+ logFmsg(0, "mod/php: Copyright (c) 1999-2014 The PHP Group. All rights reserved.");
sapi_startup(&capi_sapi_module);
capi_sapi_module.startup(&capi_sapi_module);
diff --git a/sapi/phpdbg/.travis.yml b/sapi/phpdbg/.travis.yml
index 353402858e..d5b492e7cf 100644
--- a/sapi/phpdbg/.travis.yml
+++ b/sapi/phpdbg/.travis.yml
@@ -1,3 +1,12 @@
language: c
-script: ./travis/ci.sh
+env:
+- PHP="PHP-5.4"
+- PHP="PHP-5.5"
+- PHP="PHP-5.6"
+- PHP="master"
+
+before_script: ./travis/ci.sh
+
+script:
+- ./php-src/sapi/cli/php php-src/sapi/phpdbg/tests/run-tests.php -diff2stdout --phpdbg php-src/sapi/phpdbg/phpdbg
diff --git a/sapi/phpdbg/config.m4 b/sapi/phpdbg/config.m4
index ecac171506..1a6640eaca 100644
--- a/sapi/phpdbg/config.m4
+++ b/sapi/phpdbg/config.m4
@@ -9,6 +9,7 @@ PHP_ARG_ENABLE(phpdbg-debug, for phpdbg debug build,
[ --enable-phpdbg-debug Build phpdbg in debug mode], no, no)
if test "$PHP_PHPDBG" != "no"; then
+ AC_HEADER_TIOCGWINSZ
AC_DEFINE(HAVE_PHPDBG, 1, [ ])
if test "$PHP_PHPDBG_DEBUG" != "no"; then
diff --git a/sapi/phpdbg/phpdbg_btree.c b/sapi/phpdbg/phpdbg_btree.c
index 8fc2561e04..491445399b 100644
--- a/sapi/phpdbg/phpdbg_btree.c
+++ b/sapi/phpdbg/phpdbg_btree.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/sapi/phpdbg/phpdbg_btree.h b/sapi/phpdbg/phpdbg_btree.h
index 5fb217db35..af2a6ac314 100644
--- a/sapi/phpdbg/phpdbg_btree.h
+++ b/sapi/phpdbg/phpdbg_btree.h
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
diff --git a/sapi/phpdbg/phpdbg_utils.c b/sapi/phpdbg/phpdbg_utils.c
index c9b22a2039..98748b202a 100644
--- a/sapi/phpdbg/phpdbg_utils.c
+++ b/sapi/phpdbg/phpdbg_utils.c
@@ -32,6 +32,9 @@
# include "win32/time.h"
#elif defined(HAVE_SYS_IOCTL_H)
# include "sys/ioctl.h"
+# ifndef GWINSZ_IN_SYS_IOCTL
+# include <termios.h>
+# endif
#endif
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
@@ -437,12 +440,12 @@ PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D) /* {{{ */
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
-#elif defined(HAVE_SYS_IOCTL_H)
+#elif defined(HAVE_SYS_IOCTL_H) && defined (TIOCGWINSZ)
struct winsize w;
- columns = ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 100;
+ columns = ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 80;
#else
- columns = 100;
+ columns = 80;
#endif
return columns;
} /* }}} */
diff --git a/sapi/phpdbg/phpdbg_utils.h b/sapi/phpdbg/phpdbg_utils.h
index 68ae7e44a3..56bacfc459 100644
--- a/sapi/phpdbg/phpdbg_utils.h
+++ b/sapi/phpdbg/phpdbg_utils.h
@@ -124,4 +124,24 @@ PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D); /* }}} */
int phpdbg_rebuild_symtable(TSRMLS_D);
+#if PHP_VERSION_ID < 50500
+/* copy from zend_hash.c PHP 5.5 for 5.4 compatibility */
+static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) {
+ Bucket *p;
+
+ p = pos ? (*pos) : ht->pInternalPointer;
+
+ if (!p) {
+ Z_TYPE_P(key) = IS_NULL;
+ } else if (p->nKeyLength) {
+ Z_TYPE_P(key) = IS_STRING;
+ Z_STRVAL_P(key) = IS_INTERNED(p->arKey) ? (char*)p->arKey : estrndup(p->arKey, p->nKeyLength - 1);
+ Z_STRLEN_P(key) = p->nKeyLength - 1;
+ } else {
+ Z_TYPE_P(key) = IS_LONG;
+ Z_LVAL_P(key) = p->h;
+ }
+}
+#endif
+
#endif /* PHPDBG_UTILS_H */
diff --git a/sapi/phpdbg/tests/run-tests.php b/sapi/phpdbg/tests/run-tests.php
index 47a998ccae..1cc31d815e 100644
--- a/sapi/phpdbg/tests/run-tests.php
+++ b/sapi/phpdbg/tests/run-tests.php
@@ -135,8 +135,8 @@ namespace phpdbg\testing {
* @param array basic configuration
* @param array command line
*/
- public function __construct(TestsConfiguration &$config) {
- $this->config = &$config;
+ public function __construct(TestsConfiguration $config) {
+ $this->config = $config;
if ($this->config->hasFlag('help') ||
$this->config->hasFlag('h')) {
@@ -153,7 +153,7 @@ namespace phpdbg\testing {
$paths = array();
$where = ($in != null) ? array($in) : $this->config['path'];
- foreach ($where as &$path) {
+ foreach ($where as $path) {
if ($path) {
if (is_dir($path)) {
$paths[] = $path;
@@ -243,6 +243,7 @@ namespace phpdbg\testing {
printf("\t--options\toptions to pass to phpdbg%s", PHP_EOL);
printf("\t--phpdbg\tpath to phpdbg binary%s", PHP_EOL);
printf('[flags]:%s', PHP_EOL);
+ printf("\t-diff2stdout\t\twrite diff to stdout instead of files%s", PHP_EOL);
printf("\t-nodiff\t\tdo not write diffs on failure%s", PHP_EOL);
printf("\t-nolog\t\tdo not write logs on failure%s", PHP_EOL);
printf('[examples]:%s', PHP_EOL);
@@ -266,9 +267,11 @@ namespace phpdbg\testing {
$test = sprintf('%s/%s', $path, $file);
if (preg_match('~\.test$~', $test)) {
- yield new Test($this->config, $test);
+ $tests[] = new Test($this->config, $test);
}
}
+
+ return $tests;
}
/**
@@ -354,7 +357,7 @@ namespace phpdbg\testing {
* @param array configuration
* @param string file
*/
- public function __construct(TestsConfiguration &$config, &$file) {
+ public function __construct(TestsConfiguration $config, $file) {
if (($handle = fopen($file, 'r'))) {
while (($line = fgets($handle))) {
$trim = trim($line);
@@ -417,8 +420,8 @@ namespace phpdbg\testing {
}
fclose($handle);
- $this->config = &$config;
- $this->file = &$file;
+ $this->config = $config;
+ $this->file = $file;
}
}
@@ -427,8 +430,7 @@ namespace phpdbg\testing {
*
*/
public function getResult() {
- $options = sprintf(
- '-i%s -nqb', $this->file);
+ $options = sprintf('-i%s -nqb', $this->file);
if ($this->options) {
$options = sprintf(
@@ -526,7 +528,7 @@ namespace phpdbg\testing {
* Write log to disk if configuration allows it
*
*/
- protected function writeLog(&$result = null) {
+ protected function writeLog($result = null) {
$log = sprintf(
'%s/%s.log',
dirname($this->file), basename($this->file));
diff --git a/sapi/phpdbg/travis/ci.sh b/sapi/phpdbg/travis/ci.sh
index d9f3ac6a02..206b158b9b 100755
--- a/sapi/phpdbg/travis/ci.sh
+++ b/sapi/phpdbg/travis/ci.sh
@@ -1,10 +1,11 @@
#!/usr/bin/env sh
git clone https://github.com/php/php-src
-cd php-src/sapi
+cd php-src
+git checkout $PHP
+cd sapi
rm -rf phpdbg
git clone https://github.com/krakjoe/phpdbg.git
cd ../
./buildconf --force
./configure --disable-all --enable-phpdbg --enable-maintainer-zts
make
-make test-phpdbg
diff --git a/tests/classes/bug63462.phpt b/tests/classes/bug63462.phpt
index 119bf592c2..f425c1526b 100644
--- a/tests/classes/bug63462.phpt
+++ b/tests/classes/bug63462.phpt
@@ -18,7 +18,7 @@ class Test {
}
function __get($name) {
- echo '__get ' . $name . "\n";
+ echo '__get ' . $name;
return $this->$name;
}
@@ -52,16 +52,12 @@ $test->privateProperty = 'value';
--EXPECTF--
__get nonExisting
-
Notice: Undefined property: Test::$nonExisting in %sbug63462.php on line %d
__get publicProperty
-
Notice: Undefined property: Test::$publicProperty in %sbug63462.php on line %d
__get protectedProperty
-
Notice: Undefined property: Test::$protectedProperty in %sbug63462.php on line %d
__get privateProperty
-
Notice: Undefined property: Test::$privateProperty in %sbug63462.php on line %d
__isset nonExisting
__isset publicProperty
diff --git a/win32/build/template.rc b/win32/build/template.rc
index 13e92e9a3b..f36f2c041c 100644
--- a/win32/build/template.rc
+++ b/win32/build/template.rc
@@ -65,7 +65,7 @@ BEGIN
#endif
VALUE "FileVersion", EXT_VERSION
VALUE "InternalName", INTERNAL_NAME
- VALUE "LegalCopyright", "Copyright © 1997-2013 The PHP Group"
+ VALUE "LegalCopyright", "Copyright © 1997-2014 The PHP Group"
VALUE "LegalTrademarks", "PHP"
VALUE "OriginalFilename", FILE_NAME
VALUE "ProductName", "PHP"